高级手势TouchAction

Posted xiaoxiangstudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级手势TouchAction相关的知识,希望对你有一定的参考价值。

tap & press & release & wait & long_press & move_to

高级手势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的主要内容,如果未能解决你的问题,请参考以下文章

appium---TouchAction

Appnium+python实现手势密码为什么总是报错

我无法使用 Java 在 Appium 中为我制作滑动手势

移动端App自动化之触屏操作自动化

app测试自动化操作方法之三

Appium 6.1.0 TouchAction 与 TouchAction