Appium自动化(13):Appium常用操作之TouchAction操作

TouchAction操作

  Appium的辅助类,主要针对手势操作,比如滑动、长按、拖动等。其原理是将一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接受到该链条后,解析各个动作,逐个执行。

TouchAction类支持的动作很多;常用操作如下:

1、press(self,el=None,x=None,y=None):  按压一个元素或坐标,el为要点击的元素,x/y为坐标
2、long_press(self,el=None,x=None,y=None,duration=1000):  长按压一个元素或坐标,默认长按时间1000ms
3、tap(self,element=None,x=None,y=None,count=1):  对一个元素或控件执行点击操作
4、move_to(self,el=None,x=None,y=None):  将指针从上一个点移动到指定的元素或点
5、wait(self,ms=0):  等待时间,单位毫秒
6、release(self):  释放,结束屏幕上的一系列动作的命令操作
7、perform(self):  执行,将待执行的操作发送到服务器的命令操作

利用TouchAction类实现操作如下:

一、利用TouchAction类实现点击操作

导入 from appium.webdriver.common.touch_action import TouchAction

代码示例:

from appium import webdriver  # 导入appium 驱动包
from appium.webdriver.webdriver import By   # 导入appium 定位的方法包
from appium.webdriver.common.touch_action import TouchAction  # 导入appium的TouchAction类
des = {
   'automationName':'appium',
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.android.settings',    # 填写被测app包名
    'appActivity':'.Settings',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':30        # 30秒没发送新命令就断开连接
       }

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

el = driver.find_element(By.XPATH,'//android.widget.TextView[@text="显示"]')
# el.click()

# 通过TouchAction类实现点击操作
TouchAction(driver).press(el).release().perform()  # 链条指令  点击操作(同click效果一样)

二、长按操作:

TouchAction(driver).long_press(el,None,None,10000).perform()

代码示例:

# 长按 el元素 3秒
TouchAction(driver).long_press(el=el,duration=3000).perform()

注:long_press  有个bug:把元素作为参数,会把该元素的bounds(该属性可以在ispector工具中查看)属性,相加 /2,得到x,y坐标,但是x和y坐标可能出现小数情况;因为坐标只能是整数,所以会导致报错;

解决方案:

直接使用 long_press 的坐标进行操作;通过元素的x,y坐标的 bounds 属性,把元素坐标的 x相加 除以2 再把 y相加 除以2,如果有小数,就四舍五入

bounds 属性值为元素的左上角坐标和右下角坐标;如下图:

三、手势轨迹操作:

TouchAction(driver).press(x=211,y=660).wait(100).move_to(x=325,y=0).wait(100).move_to(x=0,y=325).move_to(x=0,y=325).release().perform()

备注:坐标采用相对值,非绝对坐标值

代码示例:通过点击并移动实现图案的手势操作

import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.webdriver import By
des = {
    'automationName':'appium',
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.android.settings',    # 填写被测app包名
    'appActivity':'.Settings',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':30        # 30秒没发送新命令就断开连接
       }


driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

driver.swipe(220,1872,220,1027,5000)  # 从坐标1移动到坐标2 时间为5秒
time.sleep(2)
# 点击 安全 按钮
el_01 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="安全"]')
touch_action = TouchAction(driver)
touch_action.press(el_01).release().perform()
time.sleep(2)
# 点击 屏幕锁定方式 按钮
el_02 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="屏幕锁定方式"]')
touch_action.press(el_02).release().perform()
time.sleep(2)
# 点击 图案 按钮
el_03 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="图案"]')
touch_action.press(el_03).release().perform()
# 执行手势操作  图案坐标 190 705 / 564 708 / 565 1085 / 562 1457 / 937 1455 / 935 1085
touch_action = (touch_action.press(x=190,y=705).wait(1000).move_to(x=564,y=708)
                .wait(1000).move_to(x=565,y=1085).wait(1000).move_to(x=562,y=1457)
                .wait(1000).move_to(x=937,y=1455).wait(1000).move_to(x=935, y=1085)
                .release().perform())

效果如下:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值