『与善仁』Appium基础 — 25、APP模拟手势高级操作

『与善仁』Appium基础 — 25、APP模拟手势高级操作

目录
  • 1、手指轻敲操作
  • 2、手指按下和抬起操作
  • 3、等待操作
  • 4、手指长按操作
  • 5、手指移动操作
  • 6、综合练习

APP模拟手势的动作都被封装在TouchAction类中,TouchActionAppiumDriver的辅助类,主要针对手势操作,如滑动、按、拖动等,原理是将一系列的动作放在一个链条中发送到服务器,服务器接受到该链条后,解析各个动作,逐个执行。 所有手势都要通过执行函数才会运行

提示

我们之前学习的滑动操作,都是TouchAction进行的封装。

之前我们说可以自定义滑动操作,就是通过封装TouchAction类中的方法实现的。

注意:

  • TouchAction辅助类所有的方法,都不能直接执行,需要调用perfrom()方法执行。
  • TouchAction类使用前需要导入包:

from appium.webdriver.common.touch_action import TouchAction

1、手指轻敲操作

模拟手指轻敲一下屏幕操作。

方法介绍

python
轻敲操作:tap(element=None, x=None, y=None)# 发送命令到服务器执行操作执行方法:perform()# 调用方式TouchAction(driver).tap(element,x,y).perform()

参数

  1. element:被定位到的元素
  2. x:相对于元素左上⻆的坐标,通常会使用元素的X轴坐标
  3. y:通常会使用元素的Y轴坐标

参数可以传入元素,也可以传入xy坐标。也就是说可以在元素上进行轻敲动作,也可以在坐标上进行轻敲动作。

业务场景:

  1. 进入设置
  2. 点击“蓝牙”选项

代码实现:

python
"""1.学习目标    掌握TouchAction类使用,    轻敲方法tap2.操作步骤    2.1 导入TouchAction类    2.2 使用tap方法---手指轻敲        tap(element=None,x=None,y=None)            element  元素            x  坐标            y  坐标        使用方式:            TouchAction(driver).tap(element,x,y).perform()3.需求    使用tap方法点击设置首页蓝牙"""# 1.导入appium和TouchActionimport timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction# 2.创建Desired capabilities对象,添加启动参数desired_caps = {    "platformName": "Android",  # 系统名称    "platformVersion": "7.1.2",  # 系统版本    "deviceName": "127.0.0.1:21503",  # 设备名称    "appPackage": "com.android.settings",  # APP包名    "appActivity": ".Settings"  # APP启动名}# 3.启动APPdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)time.sleep(2)# 4.操作APP# 使用TouchAction中的tap方法点击蓝牙# 4.1 敲击元素,传入元素# 先定位到元素blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')# 轻敲蓝牙按钮TouchAction(driver).tap(blue_tooth).perform()# 注意:# 现在不是用click()方法进行点击元素的,# 而是用TouchAction类中的tap方法进行的点击元素操作。# 4.2 进入到蓝牙界面,传入开启\关闭按钮的坐标,实现开启\关闭蓝牙的操作# 可以通过uiautomatorviewer定位工具获得元素按钮的坐标# 开启\关闭元素的坐标为:[108,138][624,185]# 也就是该元素x轴坐标为108到624,y轴坐标138到185# 点击“关闭”按钮关闭蓝牙time.sleep(2)TouchAction(driver).tap(x=120, y=200).perform()# 点击“开启”按钮打开蓝牙time.sleep(2)TouchAction(driver).tap(x=120, y=200).perform()# 5.关闭APPtime.sleep(5)driver.quit()

拓展:

如果调用tap()方法时,同时元素和坐标都传入参数,到底会怎样执行呢?

结论:

  • tap()方法元素和坐标参数同时传入,使用元素参数进行操作。
  • 如果所传的元素参数定位不到该元素,就会报错。

所以,传入元素参数就不用传入坐标参数了,二者选其一就行。

示例:

python
# 1.导入appium和TouchActionimport timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction# 2.创建Desired capabilities对象,添加启动参数desired_caps = {    "platformName": "Android",  # 系统名称    "platformVersion": "7.1.2",  # 系统版本    "deviceName": "127.0.0.1:21503",  # 设备名称    "appPackage": "com.android.settings",  # APP包名    "appActivity": ".Settings"  # APP启动名}# 3.启动APPdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)time.sleep(2)# 4.操作APP# 元素和坐标都传入# 当元素和坐标在同一个元素上的时候,两个都传入会正常执行。# 当元素和坐标所指的位置不同时,执行元素参数。view = driver.find_element_by_android_uiautomator('new UiSelector().text("显示")')# 坐标指向蓝牙,坐标为x=120, y=200TouchAction(driver).tap(element=view, x=120, y=200).perform()# 5.关闭APPtime.sleep(5)driver.quit()

2、手指按下和抬起操作

一个点击屏幕的操作,可以分为按下和抬起两个操作。

press()方法:模拟手指按下屏幕的操作。

release()方法:表示结束动作,手指离开屏幕

方法介绍:

python
# press()方法press(el=None, x=None, y=None)参数:    1.element:被定位到的元素    2.x:通常会使用元素的X轴坐标    3.y:通常会使用元素的Y轴坐标# release()方法没有参数,执行调用即可# 调用方式TouchAction(driver).press(el=None, x=None, y=None).release().perform()

业务场景:

  1. 进入设置。
  2. 点击蓝牙选项。

代码实现:

python
"""1.学习目标    掌握TouchAction类使用,        按下press()方法和抬起release()方法的操作2.操作步骤    2.1 导入TouchAction类    2.2 使用press()---按压操作        press(el=None,x=None,y=None)            element  元素            x  坐标            y  坐标        release()方法---抬起操作        使用方式:            TouchAction(driver).press(el=None, x=None, y=None).release().perform()3.需求    使用press()方法和抬起release()方法实现点击设置首页蓝牙按钮"""# 1.导入appium和TouchActionimport timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction# 2.创建Desired capabilities对象,添加启动参数desired_caps = {    "platformName": "Android",  # 系统名称    "platformVersion": "7.1.2",  # 系统版本    "deviceName": "127.0.0.1:21503",  # 设备名称    "appPackage": "com.android.settings",  # APP包名    "appActivity": ".Settings"  # APP启动名}# 3.启动APPdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)time.sleep(2)# 4.操作APP# 使用press()方法按下蓝牙按钮,使用release()方法抬起blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')# 如果三个参数都传入,按照元素参数执行,同tap()方法。TouchAction(driver).press(blue_tooth).release().perform()# 注意:如果想按住不松手,就单独调用一个press()方法即可。# 5.关闭APPtime.sleep(5)driver.quit()

3、等待操作

wait()方法相当于一个动作要持续多长时间。

方法介绍:

python
# wait()方法,参数单位:毫秒wait(ms=0)# 参数:    ms:暂停的毫秒数# 调用方式TouchAction(driver).press(el=None, x=None, y=None).wait(5000).perform()

业务场:

  1. 进入设置。
  2. 长按蓝牙选项5秒。

代码实现:

python
"""1.学习目标    掌握TouchAction类中等待操作使用2.操作步骤    2.1 等待方法  wait(时间,单位ms)     2.2 调用方式         TouchAction(driver).press(el=None, x=None, y=None).wait(5000).perform()3.需求    在设置app首页长按蓝牙选项5秒"""# 1.导入appium和TouchActionimport timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction# 2.创建Desired capabilities对象,添加启动参数desired_caps = {    "platformName": "Android",  # 系统名称    "platformVersion": "7.1.2",  # 系统版本    "deviceName": "127.0.0.1:21503",  # 设备名称    "appPackage": "com.android.settings",  # APP包名    "appActivity": ".Settings"  # APP启动名}# 3.启动APPdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)time.sleep(2)# 4.操作APP# 在设置app首页长按蓝牙选项5秒# 定位蓝牙元素blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')# 长按蓝牙选项5秒TouchAction(driver).press(blue_tooth).wait(5000).perform()# 也可以长安蓝牙选项5秒之后把手抬起操作,如下调用方式:# TouchAction(driver).press(blue_tooth).wait(5000).release().perform()# 5.关闭APPtime.sleep(5)driver.quit()

4、手指长按操作

long_press()模拟手机按下屏幕一段时间。

方法介绍:

python
# long_press()方法long_press(el=None, x=None, y=None, duration=1000)参数:    1.element:被定位到的元素。    2.x:通常会使用元素的X轴坐标。    3.y:通常会使用元素的Y轴坐标。    4.duration:持续时间,默认为1000ms。# 调用方式TouchAction(driver).long_press(el=None, x=None, y=None, duration=1000).release().perform()

业务场景:

  1. 进入设置。
  2. 长按蓝牙选项。

代码实现:

python
"""1.学习目标    掌握TouchAction类长按操作使用2.操作步骤    2.1 长按  long_press(el=None, x=None, y=None, duration=1000)        参数:        1.element:被定位到的元素。        2.x:通X轴坐标。        3.y:Y轴坐标。        4.duration:持续时间,默认为1000ms。3.需求    在设置app首页长按蓝牙选项"""# 1.导入appium和TouchActionimport timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction# 2.创建Desired capabilities对象,添加启动参数desired_caps = {    "platformName": "Android",  # 系统名称    "platformVersion": "7.1.2",  # 系统版本    "deviceName": "127.0.0.1:21503",  # 设备名称    "appPackage": "com.android.settings",  # APP包名    "appActivity": ".Settings"  # APP启动名}# 3.启动APPdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)time.sleep(2)# 4.操作APP# 在设置app首页长按蓝牙选项blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')TouchAction(driver).long_press(el=blue_tooth, duration=5000).release().perform()# 5.关闭APPtime.sleep(5)driver.quit()

说明:long_press()方法就相当于press()方法和wait()方法的封装。

5、手指移动操作

move_to()方法:模拟手机的滑动操作。

方法介绍:

python
# move_to()方法move_to(el=None, x=None, y=None)参数:  1.el:定位的元素  2.x:滑动到元素的X轴坐标  3.y:滑动到元素的Y轴坐标# 调用方式TouchAction(driver).press(save).move_to(el=None, x=None, y=None).release().perform()

业务场景:

  1. 进入设置APP。
  2. 在设置APP首页从存储滑动到蓝牙。

代码实现:

python
"""1.学习目标    掌握TouchAction类中手指移动使用2.操作步骤    移动  move_to(元素)3.需求    在设置app首页从存储滑动到蓝牙"""# 1.导入appium和TouchActionimport timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction# 2.创建Desired capabilities对象,添加启动参数desired_caps = {    "platformName": "Android",  # 系统名称    "platformVersion": "7.1.2",  # 系统版本    "deviceName": "127.0.0.1:21503",  # 设备名称    "appPackage": "com.android.settings",  # APP包名    "appActivity": ".Settings"  # APP启动名}# 3.启动APPdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)time.sleep(2)# 4.操作APP# 在设置app首页从存储滑动到蓝牙save = driver.find_element_by_android_uiautomator('new UiSelector().text("存储")')blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')# 滑动,相当于于向上滑动屏幕操作TouchAction(driver).press(save).wait(5000).move_to(blue_tooth).release().perform()# 5.关闭APPtime.sleep(5)driver.quit()

6、综合练习

业务场景:打开设置APP,设置屏幕锁定。

说明:

  • 实现步骤:
    打开设置APP首页,
    需要向上滑动屏幕(手势),到页面显示"安全"选项。
    定位"安全"选项,并进入安全页面。
    在安全页面中定位”屏幕锁定“选项,并点击进入。
    ”屏幕锁定“页面定位”图案“选项,并点击进入。
    开始绘制z字型图案。
  • 问题:
    1,不能直接定位到9个黑点的位置。因为红框内为一个元素,是一个整体,所以只能通过坐标的方式来进行定位。

    2,如何使用坐标的方式定位黑点
    方法很简单,就在UI Automator Viewer工具中,把鼠标放在黑点的上方就可以了。如下图:
    (注意:需要把工具的界面拉大一些。)

代码实现:

python
# 1.导入appium和TouchActionimport timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction# 2.创建Desired capabilities对象,添加启动参数desired_caps = {    "platformName": "Android",  # 系统名称    "platformVersion": "7.1.2",  # 系统版本    "deviceName": "127.0.0.1:21503",  # 设备名称    "appPackage": "com.android.settings",  # APP包名    "appActivity": ".Settings"  # APP启动名}# 3.启动APPdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)time.sleep(2)# 4.操作APP# 4.1 在设置app首页从存储滑动到蓝牙# 定位“存储”和“滑动”元素save = driver.find_element_by_android_uiautomator('new UiSelector().text("存储")')blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')# 开始滑动屏幕driver.scroll(save, blue_tooth, duration=4000)time.sleep(2)# 4.2 定位“安全”选项,并点击进入。safe = driver.find_element_by_android_uiautomator('new UiSelector().text("安全")')# 使用tap()方法,轻敲点击进入TouchAction(driver).tap(safe).perform()time.sleep(1)# 4.3 定位“屏幕锁定”选项,并点击进入。# 定位“屏幕锁定”选项lock = driver.find_element_by_android_uiautomator('new UiSelector().text("屏幕锁定")')# 使用按下和抬起操作,点击进入TouchAction(driver).press(lock).wait(3000).release().perform()time.sleep(1)# 4.4 定位“图案”选项,并点击进入。# 定位“图案”选项design = driver.find_element_by_android_uiautomator('new UiSelector().text("图案")')# 使用长按操作,点击进入TouchAction(driver).long_press(el=design, duration=3000).release().perform()time.sleep(1)# 5.开始绘图TouchAction(driver).press(x=145, y=615).move_to(x=575, y=620).wait(3000) \    .move_to(x=145, y=1050).wait(3000) \    .move_to(x=575, y=1050).release().perform()# 之后可以点击确定等继续操作# 6.关闭APPtime.sleep(5)driver.quit()

__EOF__

  • 本文作者: 繁华似锦Fighting
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/15707641.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
    相关文章
    返回顶部