Python+Appium自动化测试(10)-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)

232 篇文章 0 订阅
208 篇文章 1 订阅

滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作,但自动化过程中还会遇到其他情况,如对控件元素进行滑动、拖拽操作,九宫格解锁,手势操作,地图的放大与缩小等。这些需要针对控件元素的滑动操作,或者点至点、元素至元素之间的滑动操作,使用swipe方法显然不是很方便,这时候就可以用到appium里提供TouchAction类和MultiAction类。

一,TouchAction类

1,TouchAction类由webdriver库提供,提供以下方法:
tap(self, element=None, x=None, y=None, count=1),点击,点击元素el或坐标点(x, y) 1次

press(self, el=None, x=None, y=None, pressure=None),短按,按压元素el或坐标点(x, y)

long_press(self, el=None, x=None, y=None, duration=1000),长按,长按元素el或坐标点(x, y),duration为按压时间,默认1000ms

wait(self, ms=0),暂停,时间默认为0

move_to(self, el=None, x=None, y=None),移动到,滑动至目标元素el位置或目标坐标点(x, y)

release(self),释放,将指针提离屏幕结束操作

perform(self),执行,将命令发送到要操作的服务器来执行该操作

注意,坐标x、y为int型,示例如下:

  1. ss="language-python"># @author: 给你一页白纸

  2. from appium import webdriver

  3. # 需要导入模块TouchAction

  4. from appium.webdriver.common.touch_action import TouchAction

  5. desired_caps = {

  6. "platformName": "Android",

  7. "platformVersion": "10",

  8. "deviceName": "PCT_AL10",

  9. "appPackage": "com.ss.android.article.news",

  10. "appActivity": ".activity.MainActivity",

  11. "automationName": "uiautomator2",

  12. "unicodeKeyboard": True,

  13. "resetKeyboard": True,

  14. "noReset": False,

  15. }

  16. # 启动app

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

  18. # 构造TouchAction实例对象

  19. action = TouchAction(driver)

  20. 按住点(x1, y1),等待1000ms,滑动至点(x2, y2),释放

  21. action.press(x=x1, y=y1).wait(1000).move_to(x=x2, y=y2).release()

  22. # 执行操作

  23. action.perform()

2,tap点击
  1. # 点击元素的中心点

  2. tap(element=ele1)

  3. # 点击坐标(x1, y1)

  4. tap(x=x1, y=y1)

  5. # 以元素ele1左上角的x坐标向右移动x2单位,y坐标向下移动y2单位,在点(x+x2, y+y2)上点击

  6. tap(element=ele1, x=x2, y=y2)

3,press短按
  1. # 按压元素

  2. press(el=ele1)

  3. # 按压坐标

  4. press(x=x1, y=y1)

  5. # 以元素ele1左上角的x坐标向右移动x2单位,y坐标向下移动y2单位,在点(x+x2, y+y2)上按压

  6. press(el=ele1, x=x2, y=y2)

4,long_press长按
  1. # 按压元素,默认1000ms

  2. long_press(el=ele1)

  3. # 按压坐标500ms

  4. long_press(x=x1, y=y1, duration=500)

  5. # 以元素ele1左上角的x坐标向右移动x2单位,y坐标向下移动y2单位,在点(x+x2, y+y2)上按压

  6. long_press(el=ele1, x=x2, y=y2)

5,move_to移动至目标点
  1. # 该方法需要与press()、long_press()结合使用

  2. # 从另一个点移动至目标元素ele1

  3. move_to(el=ele1)

  4. # 从另一个点移动至点(x1, y1)

  5. move_to(x=x1, y=y1)

  6. # 从另一个点移动至点(x+x2, y+y2), (x, y)为元素ele1左上角的坐标

  7. move_to(el=ele1, x=x2, y=y2)

6,wait等待
  1. # 等待,如等待500ms

  2. wait(500)

7,release释放
  1. # 释放操作,与按压、长按结合使用

  2. release()

8,perform执行
  1. # 将动作命令发送至服务器来执行该动作,如:

  2. action = TouchAction(driver).press(x=x1, y=y1).move_to(x=x2, y=y2).release()

  3. 执行滑动操作

  4. action.perform()

二,多点触控MultiAction类

1,MultiAction类中提供以下方法:
add(self, touch_actions),参数touch_actions为触摸操作集合,将一个或多个触摸操作添加至当前的多点触控实例中

perform(self),执行多点触控操作

使用场景,如页面的放大、缩小等

2,示例

  1. ss="language-python"># @author: 给你一页白纸

  2. from appium import webdriver

  3. from appium.webdriver.common.touch_action import TouchAction

  4. # 需要导入模块MultiAction

  5. from appium.webdriver.common.multi_action import MultiAction

  6. desired_caps = {

  7. "platformName": "Android",

  8. "platformVersion": "10",

  9. "deviceName": "PCT_AL10",

  10. "appPackage": "com.ss.android.article.news",

  11. "appActivity": ".activity.MainActivity",

  12. "automationName": "uiautomator2",

  13. "unicodeKeyboard": True,

  14. "resetKeyboard": True,

  15. "noReset": False,

  16. }

  17. # 启动app

  18. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps

  19. # 创建两个触摸事件

  20. action = TouchAction(driver)

  21. action1 = action.press(ele1).move_to(ele2).release()

  22. action2 = action.press(x=50, y=50).move_to(x=100, y=200).release()

  23. # 创建MultiAction实例对象

  24. multi_action = MultiAction(driver)

  25. # 将触摸事件加入TouchAction对象

  26. multi_action.add(action1, action2)

  27. # 执行事件

  28. multi_action.perform()

三,使用场景
1,TouchAction使用场景–控件元素滑动
今日头条顶部菜单栏向左滑动

思路:长按"视频"元素滑动至"关注"元素位置,然后释放

  1. # 关注按钮元素

  2. concern_ele = driver.find_element_by_xpath("//*[@content-desc='关注']")

  3. # 视频按钮元素

  4. video_ele = driver.find_element_by_xpath("//*[@content-desc='视频']")

  5. action = TouchAction(driver)

  6. 长按"视频"元素滑动至"关注"元素位置,然后释放

  7. action.long_press(video_ele).move_to(concern_ele).release().perform()

还有下面这种形式,通过对滑动控件元素来选择时间:

思路:通过向上滑动选择年月日。以日期选择控件为例,按压日期元素滑动至【确定】按钮即可滚动日期(由于元素属性的原因这里不能选择精确的日期)

  1. # 日期元素

  2. day_ele = driver.find_element_by_id("resource-id")

  3. # 视频按钮元素

  4. sure_ele = driver.find_element_by_xpath("//*[@text='确定']")

  5. action = TouchAction(driver)

  6. # 长按日期元素滑动至确定按钮元素位置,然后释放

  7. action.long_press(day_ele).move_to(sure_ele).release().perform()

2,TouchAction使用场景–九宫格解锁

  1. # @author: 给你一页白纸

  2. from appium.webdriver.common.touch_action import TouchAction

  3. class NineSquUnlock(object):

  4. '''

  5. 九宫格解锁,九宫格中每个点的坐标可以通过uiautomatorviewer获取,以下仅为示例

  6. '''

  7. def __init__(self, driver):

  8. self.driver = driver

  9. self.pwd = '1235789' # 解锁密码

  10. self.unit_location = [

  11. (300, 300), (300, 600), (300, 900),

  12. (600, 200), (600, 600), (600, 900),

  13. (900, 200), (900, 600), (900, 900)

  14. ]

  15. def unlock(self):

  16. # 将密码转换为对应坐标点的索引,获取密码对应的坐标点

  17. pwd_loc = []

  18. for i in self.pwd:

  19. unit_index = self.unit_location[int(i)]

  20. pwd_loc.append(unit_index)

  21. action = TouchAction(self.driver)

  22. # 按压起点

  23. action.press(*pwd_loc[0]).wait(200)

  24. # 根据坐标点滑动

  25. for i in range(1, len(pwd_loc)):

  26. action.move_to(*pwd_loc[i]).wait(200)

  27. # 释放动作并执行

  28. action.release().perform()

  29. if __name__ == '__main__':

  30. # 调试,构造的driver仅为示例

  31. from appium import webdriver

  32. driver = webdriver.Remote()

  33. NineSquUnlock(driver).unlock()

3,MultiAction使用场景
app中地图的放大、缩小;app中图片的放大、缩小。

如下图中A、B、C、D四个坐标点,1所示滑动操作则放大图片,2所示滑动操作则缩小照片。

代码参考第二步中示例。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值