高级手势TouchAction
Posted xiaoxiangstudy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级手势TouchAction相关的知识,希望对你有一定的参考价值。
高级手势TouchAction
应用场景
TouchAction可以实现一些针对手势的操作,比如滑动、长按、拖动等。我们可以将这些基本手势组合成一个相对复杂的手势。比如,我们解锁手机或者一些应用软件都有手势解锁的这种方式。
使用步骤
1、导包from appium.webdriver.common.touch_action import TouchAction
2、创建TouchAction对象
3、通过对象调用想执行的手势
4、通过perform()执行动作
注意点
所有手势都要通过执行perform()函数才会运行。
轻敲
应用场景
模拟手指对某个元素或坐标按下并快速抬起。比如,固定点击(100.100)的位置。
方法名
#模拟手指对元素或坐标的轻融操作
#参数:
# element:元素
#x:x坐标
#y:y坐标
TouchAction(driver).tap(element=None,x=None,y=None).perform()
示例
1.打开《设置》
2.轻敲“WLAN”
核心代码
# 1、找到要点击的元素
#wlan_button = driver.find_element(By.XPATH,"//*[@text=\'WLAN\']")
# 2、创建touchAction对象
# touch_action = TouchAction(driver)
# 3、调用想要执行的动作
#tap参数,count模拟点击次数
# touch_action = touch_action.tap(wlan_button)
# 4、使用perform执行动作
#通过元素点击
#TouchAction(driver).tap(wlan_button).perform()
#通过坐标点击
#TouchAction(driver).tap(x=400,y=850).perform()
TouchAction(driver).tap(el=None,x=none,y=None,count=1).perform()
按下和抬起
应用场景
模拟手指按下,模拟手指抬起。可以用来组合成轻敲或长按的操作
方法名
#模拟手指对元素或坐标的按下操作
#参数:
#el:元素
#x:x坐标
#y:y坐标
TouchAction(driver).press(el=None, x=None, y=None).perform()
#模拟手指对元素或坐标的抬起操作
TouchAction(driver).release().perform()
核心代码
#使用坐标的形式点击WLAN(400,850),2秒后,按下(400,850)的位置
TouchAction(driver).press(x=400,y=850).perform()
sleep(2)
TouchAction(driver).press(x=400, y=850).perform()
#使用坐标的形式点击WLAN(400,850),2秒后,按下(400,850)的位置,并抬起
TouchAction(driver).press(x=400,y=850).perform()
sleep(2)
TouchAction(driver).press(x=400, y=850).release().perform()
等待
应用场景
模拟手指等待,比如按下后等待5秒之后再抬起。
方法名
#模拟手指暂定操作
#参数:
#ms:暂停的毫秒数
TouchAction(driver).wait(ms=0).perform()
示例
使用坐标的形式点击WLAN(400,850),2秒后,按下(400,850)的位置,暂停2秒,并抬起
核心代码
TouchAction(driver).tap(x=400,y=850).perform()
sleep(2)
TouchAction(driver).press(x=350,y=350).wait(2000).release().perform()
长按
应用场景
模拟手指对元素或坐标的长按操作。比如,长按某个按钮弹出菜单
方法名
#模拟手指对元素或坐标的长按操作
#参数:
#el:元素
#x:x坐标
#y:y坐标
#duration:长按时间,毫秒
TouchAction(driver).long_press(el=None,x=None,y=None,duration=1000).perform()
核心代码
#使用坐标的形式点击WLAN(400,850),2秒后,长按(350,350)的位置持续2秒
TouchAction(driver).tap(x=400,y=850).perform()
sleep(2)
TouchAction(driver).long_press(x=350,y=350,duration=2000).perform()
注意点
- 长按===按下+等待+抬手
移动
应用场景
模拟手指移动操作,比如,手势解锁需要先按下,再移动。
方法名
#模拟手指对元素或坐标的移动操作
#参故:
#el:元素
#x:x坐标
#y:y坐标
TouchAction(driver).move_to(el=None, x=None, y=None).perform()
核心代码
#手势解锁图案,包名界面名为com.android.settings/.ChooseLockPattern
TouchAction(driver).press(x=182,y=775).move_to(x=449,y=775)\\
.move_to(x=720,y=775).move_to(x=720,y=1040)\\
.move_to(x=450,y=1040).move_to(x=720,y=1310)\\
.move_to(x=450,y=1310).move_to(x=180,y=1040)\\
.move_to(x=180,y=1310).release().perform()
总结
-
创建对象
- 关键属性:TouchAction(driver)
-
执行动作
- 关键属性:perform()
-
轻敲事件
- 关键属性:tap(el=None,x=none,y=None,count=1)
-
按下事件
- 关键属性:press(el=None, x=None, y=None)
-
抬起事件
- 关键属性:release()
-
等待事件
- 关键属性:wait(1000)
-
长按事件
- 关键属性:long_press(el=None,x=None,y=None,duration=1000)
-
移动事件
- 关键属性:move_to(el=None, x=None, y=None)
Appnium+python实现手势密码为什么总是报错
最近一直在尝试Appnium实现Android手机自动化测试,一直一直卡在一个点上,那就是手势密码,因为所测应用的手势密码使用的不是单个的imageview实现的手势密码解锁窗,所以只能靠坐标点来定位。在网上看到的资料,使用python写的解锁手势密码的Appnium代码如下形式:
1 action = TouchAction(driver) 2 unlock = action.press(x=240, y=915).wait(ms=100)3 .move_to(x=480, y=0).wait(ms=100)4 .move_to(x=480, y=0).wait(ms=100)5 .release() 6 print unlock 7 unlock.perform()
但是,为什么自己实现的时候总是报错:
The coordinates provided to an interactions operation are invalid.
这段代码里面有俩个坑,呃,关键点:
1.press方法中的坐标为绝对坐标,move_to方法中的坐标都是相对坐标,具体来说第一个move_to中的坐标相对于press方法中的坐标,第二个move_to方法中的坐标相对于第一个move_to方法中的坐标。
2.wait是必须的:这里ms表示为毫秒,ms=100就是等待100毫秒。不用的话太快会出错
这俩关键点卡了我一天。。。写出来给大家看看,可能也会出这种问题吧
以上是关于高级手势TouchAction的主要内容,如果未能解决你的问题,请参考以下文章