测试人社区

【求助】安卓手机原生相机中倍率放大缩小不生效

问题:

  • 使用此代码在安卓原生的相机中不能放大和缩小倍率,我打开过指针器,能看到滑动已经生效
  • 这个代码在百度地图app中是可以放大和缩小倍率的
  • 请问这个是什么原因?
  • 我有两点猜测:
    1、move_to方法滑动的过程太短,好像此方法没法控制duration
    2、滑动的线为直线,原生相机有这方面检测?

求解惑。顺便告诉我该如何实现相机中倍率的切换?有些相机并没有倍率切换的滚动条,只能模拟多指操作进行滑动切换。

代码:

    action1 = MyTouchAction(driver)
    action2 = MyTouchAction(driver)
    action1.press(x=x * 0.47, y=y * 0.47).wait(200).move_to(x=x * 0.3, y=y * 0.3).wait(200).release()
    action2.press(x=x * 0.52, y=y * 0.52).wait(200).move_to(x=x * 0.7, y=y * 0.7).wait(200).release()
    multi_action = MultiAction(driver)
    multi_action.add(action1, action2)
    multi_action.perform()

来个大佬解惑呀,搞不定 :sleepy:

代码逻辑有点错了吧,参考

from appium.webdriver.common.multi_action import MultiAction 
from appium.webdriver.common.touch_action import TouchAction

imageView=self.driver.find_element_by_id('xxxx/photo_view') 
 #获取屏幕高和宽
srcHeight=self.driver.get_window_size()['height']         
srcWidth=self.driver.get_window_size()['width']         
#设置MultiAction,可以多点触控         
multiAction=MultiAction(self.driver)         
#设置两个“单点”动作         
t1=TouchAction(self.driver)         
t2=TouchAction(self.driver)         
#分成两点按住相片0.25秒(如果中间不等,可能是程序点太快什么的,会退出浏览模式或者不起放大的作用);X轴固定,从屏幕中间向上下两边移动
#imageView代表图片或者相机的定位         
t1.long_press(imageView,srcWidth/2,srcHeight/2 - 100).wait(250).move_to(imageView,srcWidth/2,srcHeight/2-130).release()         
t2.long_press(imageView,srcWidth/2,srcHeight/2 + 100).wait(250).move_to(imageView,srcWidth/2,srcHeight/2+125).release()         
#只能一个一个add()分别加上去        
multiAction.add(t1)         
multiAction.add(t2)         
multiAction.perform()  

你说的这个帖子我也看过了的,逻辑是一样的,选择两个点进行move_to操作,可是在相机中不能实现,我在相册中也试过,也实现不了,不过在百度地图中是可以的

size = driver.get_window_size()
x = size.get('width')
y = size.get('height')

# driver.find_element_by_id("com.android.camera:id/thumbnail").click()

camera_view = driver.find_element_by_id("com.android.camera:id/afregions_view")

for i in range(3):
    action1 = TouchAction(driver)
    action2 = TouchAction(driver)
    # action1.press(x=x * 0.47, y=y * 0.47).wait(200).move_to(x=x * 0.3, y=y * 0.3).wait(200).release()
    # action2.press(x=x * 0.52, y=y * 0.52).wait(200).move_to(x=x * 0.7, y=y * 0.7).wait(200).release()
    action1.long_press(x=x*0.4, y=y*0.4).wait(500).move_to(x=x*0.3, y=y*0.3).release()
    action2.long_press(x=x*0.6, y=y*0.6).wait(500).move_to(x=x*0.7, y=y*0.7).release()
    multi_action = MultiAction(driver)
    multi_action.add(action1)
    multi_action.add(action2)
    multi_action.perform()
    time.sleep(2)
# driver.get_screenshot_as_file("./aa.png")


time.sleep(5)
driver.quit()