04. 高级手势API
2024年10月28日大约 5 分钟
04. 高级手势API
高级手势TouchAction:轻敲、按下、抬起、等待、长按、移动
1. TouchAction介绍
下面这些场景怎么使用自动化模拟实现? --- 高级手势TouchAction
- 实现步骤
- 创建TouchAction对象
- touch_action = TouchAction(driver)
- 调用高级手势对象提供所想执行的手势方法
- touch_action**.手势方法**
- 执行手势
- touch_action.perform()
- 创建TouchAction对象
- 注意
- 所有手势都要通过执行perform()函数才会运行
- 也可以直接连续一行进行编写:TouchAction(driver).手势方法.perform()
2. TouchAction-轻敲
红包雨-嵌套在图片中的链接
轻敲:模拟手指对某个元素或坐标按下并快速抬起
实现方法
- 创建TouchAction对象
- touch_action = TouchAction(driver)
- 调用轻敲,元素对象或坐标二选一
- touch_action.tap(element=None,x=None,y=None)
- 执行手势
- touch_action.perform()
- 创建TouchAction对象
演练
打开设置 轻敲WLAN
from time import sleep from appium import webdriver # 定义字典变量 from appium.webdriver.common.appiumby import AppiumBy from appium.webdriver.common.touch_action import TouchAction desired_caps = {} # 字典追加启动参数 desired_caps["platformName"] = "Android" desired_caps["platformVersion"] = "7.1.2" desired_caps["deviceName"] = "127.0.0.1:62001" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" # 设置支持中文输入, 不设置输入中文没反应 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) """ 手势操作:TaouchAction类 1、轻敲:tap(元素,x,y) 模拟手指对某个元素或坐标按下并快速抬起 重点:执行手势,必须调用perform()方法 # 需求: 1、轻敲WLAN """ # 获取WLAN元素 wlan = driver.find_element(AppiumBy.XPATH, ("//*[@text='WLAN']")) TouchAction(driver).tap(wlan).perform() sleep(3) driver.quit()
3. TouchAction-按下和抬起
按下和抬起:模拟手指一直按下,模拟手指抬起。可以用来组合成轻敲或长按的操作
实现方法
- 创建TouchAction对象
- touch_action = TouchAction(driver)
- 调用按下,元素对象或坐标二选一
- touch_action.press(el=None,x=None,y=None)
- 调用抬起
- touch_action.release()
- 执行手势
- touch_action.perform()
- 换个写法,连续调用也OK。
- TouchAction(driver).press(el=None,x=None,y=None).perform()
- TouchAction(driver).release().perform()
- 创建TouchAction对象
演练
练习一:使用坐标的形式按下 WLAN (650, 650),2 秒后,按下(650, 650)的位置。
练习二:使用坐标的形式按下 WLAN (650, 650),2 秒后,按下(650, 650)的位置,并抬起。
from time import sleep from appium import webdriver # 定义字典变量 from appium.webdriver.common.appiumby import AppiumBy from appium.webdriver.common.touch_action import TouchAction desired_caps = {} # 字典追加启动参数 desired_caps["platformName"] = "Android" desired_caps["platformVersion"] = "7.1.2" desired_caps["deviceName"] = "127.0.0.1:52001" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" # 设置中文 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) """ 手势操作:TaouchAction类 1、轻敲:tap(元素,x,y) 2、按下:press 3、抬起:release() 重点:执行手势,必须调用perform()方法 # 需求: 1、使用按下和抬起 点击WLAN """ # 获取WLAN元素 wlan = driver.find_element(AppiumBy.XPATH, "//*[@text='WLAN']") loc = wlan.location print(f'wlan location:${loc}') # release();模拟手指一直按下,模拟手指抬起。可以用来组合成轻敲或长按的操作 # 效果类似点击 TouchAction(driver).press(x=loc.get("x"), y=loc.get("y")).release().perform() sleep(3) driver.quit()
4. TouchAction-长按
长按App图标,可以卸载应用
长按
- 模拟手指对元素或坐标的长按操作
实现方法
- 模拟手指对元素或者坐标的长按操作
- TouchAction(driver).long_press(el=None,duration=1000).perform()
- TouchAction(driver).long_press(x=None,y=None,duration=1000).perform()
- 模拟手指对元素或者坐标的长按操作
演练
练习:使用坐标的形式长按 WLAN (650, 650)5s,再释放。
from time import sleep from appium import webdriver # 定义字典变量 from appium.webdriver.common.appiumby import AppiumBy from appium.webdriver.common.touch_action import TouchAction desired_caps = {} # 字典追加启动参数 desired_caps["platformName"] = "Android" desired_caps["platformVersion"] = "7.1.2" desired_caps["deviceName"] = "127.0.0.1:52001" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" # 设置中文 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) """ 手势操作:TaouchAction类 1、轻敲:tap(元素,x,y) 2、按下:press 3、抬起:release() 4、长安:long_press() 重点:执行手势,必须调用perform()方法 # 需求: 1、使用点击WLAN 2、长按3秒无线,出现菜单(修改网络) """ # 获取WLAN元素 wlan = driver.find_element(AppiumBy.XPATH, "//*[@text='WLAN']") wlan.click() # 必须暂时一定时间 暂停3秒 sleep(3) # 效果类似点击 wlan = driver.find_element(AppiumBy.XPATH, "//*[@text='WiredSSID']") TouchAction(driver).long_press(wlan, duration=3000).perform() # TouchAction(driver).long_press(x=777, y=375, duration=3000).perform() sleep(3) # driver.quit()
5. TouchAction-移动和思考时间
手指移动
- 模拟手指移动操作
思考时间
- 模拟手指等待,在执行下一步时等待一段指定时间
实现方法
- 模拟手指对元素或坐标的移动操作。
- TouchAction(driver).move_to(el=None,x=None,y=None).perform()
- 模拟手指暂停到当前动作指定时间。
- TouchAction(driver).wait(ms=time).perform()
- 模拟手指对元素或坐标的移动操作。
演练
练习:给模拟器设置图案解锁
- 查找坐标点: 使用UI Automator 或者 手机开发者工具debug调试显示指针位置
from time import sleep from appium import webdriver # 定义字典变量 from appium.webdriver.common.appiumby import AppiumBy from appium.webdriver.common.touch_action import TouchAction desired_caps = {} # 字典追加启动参数 desired_caps["platformName"] = "Android" desired_caps["platformVersion"] = "7.1.2" desired_caps["deviceName"] = "127.0.0.1:62001" desired_caps["appPackage"] = "com.android.settings" desired_caps["appActivity"] = ".Settings" # 设置支持中文输入, 不设置输入中文没反应 desired_caps["unicodeKeyboard"] = True desired_caps["resetKeyboard"] = True # 获取driver driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 等待 driver.implicitly_wait(10) """ 需求:绘制解锁图案 Z 绘制坐标点: 1、1048,340 1377,340 1707,340 2、1377,669 3、1048,999 1377,999 1707,999 """ # 1、定位WLAN WLAN = driver.find_element(AppiumBy.XPATH, "//*[@text='WLAN']") # 2、定位应用 app = driver.find_element(AppiumBy.XPATH, "//*[@text='应用']") driver.drag_and_drop(app, WLAN) # 3、点击安全 driver.find_element(AppiumBy.XPATH, "//*[@text='安全']").click() # 4、点击屏幕锁定方式 driver.find_element(AppiumBy.XPATH, "//*[@text='屏幕锁定']").click() # 5、点击图案 driver.find_element(AppiumBy.XPATH, "//*[@text='图案']").click() # 必须暂停,登录绘制页面加载完成 sleep(2) # 6、绘制 TouchAction(driver) \ .press(x=145, y=610) \ .wait(500).move_to(x=360, y=610) \ .wait(500).move_to(x=575, y=610) \ .wait(500).move_to(x=360, y=830) \ .wait(500).move_to(x=145, y=1045) \ .wait(500).move_to(x=360, y=1045) \ .wait(500).move_to(x=575, y=1045) \ .wait(500).release().perform() sleep(3) driver.quit()