背景
我们在操作APP密码解锁里面就有一个九宫格滑动解锁,这时候我们就需要手动连续滑动进行操作,前面提到的swipe
、scroll
、drag_and_drop
这些就无法实现解锁操作,我们就需要学会使用高级手势操作。
高级手势
高级手势TouchAction可以实现一些针对手势的操作,比如滑动、长按、拖动等。我们可以将这些基本手势组合成一个相对复杂的手势。
想要使用TouchAction,必须要创建TouchAction对象,通过对象调用想要执行的手势,通过perform()执行动作。
使用手势操作,需要导入 TouchAction
包
1
|
from appium.webdriver.common.touch_action import TouchAction |
轻敲(tap)
模拟手指对某个元素或坐标按下并快速抬起。比如点击(200, 200)的位置。
方法:
TouchAction(driver).tap(element=None, x=None, y=None)
参数可以是元素,也可以是x,y坐标。
短按 (press)
模拟手指一直按下。
方法:
TouchAction(driver).press(el=None, x=None, y=None)
参数可以是元素,也可以是x,y坐标。
长按 (long_press)
模拟手指长按几秒。
方法:
TouchAction(driver).long_press(el=None, x=None, y=None,duration: int = 1000)
参数可以是元素,也可以是x,y坐标,默认长按 1 秒,单位毫秒
等待 (wait)
模拟手指等待,比如按下后等待5秒之后再抬起。
方法:
TouchAction(driver).wait(ms=0)
参数是暂停的毫秒数。
移动到 (moveTo)
模拟手指移动操作,比如,手势解锁需要先按下,再移动。
方法:
TouchAction(driver).move_to(el=None, x=None, y=None)
参数可以是元素,也可以是x,y坐标。
释放 (release)
模拟手指抬起
方法:
TouchAction(driver).release()
模拟手指对元素或坐标的抬起操作。
执行 (perform)
执行手势操作,相当于发送手势操作命令到手机执行
方法:
TouchAction(driver).perform()
九宫格解锁
现在大部分九宫格就是一整个元素,所以无法通过每个点的元素坐标进行操作,只能通过先获取元素坐标位置,再获取元素大小,然后切割图片,分别计算出每个点的坐标
下图
实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
from appium.webdriver.common.touch_action import TouchAction from appium.webdriver.common.appiumby import AppiumBy from appium import webdriver import time desc = { "platformName" : "Android" , "platformVersion" : "7.1.2" , "deviceName" : "127.0.0.1:62001" , "appPackage" : "com.android.settings" , "appActivity" : "com.android.settings.ChooseLockPattern" , "noReset" : True , "unicodeKeyboard" : True , "resetKeyboard" : True } driver = webdriver.Remote( "http://127.0.0.1:4723/wd/hub" , desc) driver.implicitly_wait( 5 ) #获取起始坐标-九宫格左上顶点 loc = driver.find_element(AppiumBy. ID , "com.android.settings:id/lockPattern" ).location # 获取九宫格元素大小 loc_size = driver.find_element(AppiumBy. ID , "com.android.settings:id/lockPattern" ).size # 获取分割后的均值,即下面要用到的九宫格的步长 step = loc_size[ "width" ] / 6 step_x = loc_size[ "width" ] / 6 step_y = loc_size[ "height" ] / 6 # 计算出每个点的坐标 point1 = (loc[ "x" ] + step, loc[ "y" ] + step) point2 = (point1[ 0 ] + step * 2 , point1[ 1 ]) point3 = (point2[ 0 ], point2[ 1 ] + step * 2 ) point4 = (point3[ 0 ] + step * 2 , point3[ 1 ]) # 进行滑动操作 TouchAction(driver).press(x = point1[ 0 ], y = point1[ 1 ]).wait( 500 ). \ move_to(x = point2[ 0 ], y = point2[ 1 ]). \ move_to(x = point3[ 0 ], y = point3[ 1 ]). \ move_to(x = point4[ 0 ], y = point4[ 1 ]). \ release().perform() time.sleep( 10 ) driver.quit() |
说明
在计算各个点的坐标时,为什么是 6 等分,我们可以大概画一下线估算出来,或者找UI设计图可以计算
到此这篇关于Appium自动化测试实现九宫格解锁的文章就介绍到这了,更多相关Appium 九宫格解锁内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/u010454117/article/details/122934431