iOS UI 自动化 手势右滑退出当前页面

1、TouchAction

python 复制代码
from appium.webdriver.common.touch_action import TouchAction

# 获取屏幕的宽度和高度
screen_width = driver.get_window_size()["width"]
screen_height = driver.get_window_size()["height"]

# 定义滑动的起点和终点坐标
start_x = 0
end_x = screen_width
y = screen_height * 0.5

# 执行右滑操作
actions = TouchAction(driver)
actions.press(x=start_x, y=y).move_to(x=end_x, y=y).release().perform()

调试这个方法时报错:UnknownMethodException: Message: Unhandled endpoint

E selenium.common.exceptions.UnknownMethodException: Message: Unhandled endpoint: /session/9B1564DD-7FEF-4F3C-BA8B-70BD76770C11/wda/touch/perform -- http://127.0.0.1:8100/ with parameters { E wildcards = ( E "session/9B1564DD-7FEF-4F3C-BA8B-70BD76770C11/wda/touch/perform" E ); E } E Stacktrace: E UnknownCommandError: Unhandled endpoint: /session/9B1564DD-7FEF-4F3C-BA8B-70BD76770C11/wda/touch/perform -- http://127.0.0.1:8100/ with parameters { E wildcards = ( E "session/9B1564DD-7FEF-4F3C-BA8B-70BD76770C11/wda/touch/perform" E ); E } E at errorFromW3CJsonCode (/Users/testmanzhang/.appium/node_modules/appium-xcuitest-driver/node_modules/@appium/base-driver/lib/protocol/errors.js:1064:25) E at ProxyRequestError.getActualError (/Users/testmanzhang/.appium/node_modules/appium-xcuitest-driver/node_modules/@appium/base-driver/lib/protocol/errors.js:933:14) E at JWProxy.command (/Users/testmanzhang/.appium/node_modules/appium-xcuitest-driver/node_modules/@appium/base-driver/lib/jsonwp-proxy/proxy.js:353:19) E at processTicksAndRejections (node:internal/process/task_queues:105:5) E at XCUITestDriver.proxyCommand (/Users/testmanzhang/.appium/node_modules/appium-xcuitest-driver/lib/commands/proxy-helper.js:109:35) E at XCUITestDriver.performTouch (/Users/testmanzhang/.appium/node_modules/appium-xcuitest-driver/lib/commands/gesture.js:194:14) /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/appium/webdriver/errorhandler.py:125: UnknownMethodException

查了一下原因:WebDriverAgent(WDA)不支持这个命令。

2、使用 execute_script 调用 mobile: swipe

python 复制代码
driver.execute_script("mobile: swipe", {"direction": "right", "startX": start_x, "startY": start_y, "endX": end_x, "endY": end_y})

这个方法在调试中发现,不起作用,并没有退出当前页面。

3、mobile: dragFromToForDuration

python 复制代码
def gesture_right_drag(appium_service, ios_driver):
    driver = ios_driver
    screen_weight = driver.get_window_size()['width']
    screen_height = driver.get_window_size()['height']
    from_x = 0
    from_y = screen_height * 0.5
    to_x = screen_weight
    to_y = screen_height * 0.5
    duration = 0.2

    driver.execute_script("mobile: dragFromToForDuration", {
                                            "fromX": from_x,
                                            "fromY": from_y,
                                            "toX": to_x,
                                            "toY": to_y,
                                            "duration": duration
                                            })

driver.execute_script("mobile: dragFromToForDuration", {}) 是Appium的脚本命令,传入的字典参数定义了一个拖拽操作的起点、终点和持续时间:

fromX: 起始点的 X 坐标。

这里设置为 0,表示从屏幕的左边缘开始拖拽。

fromY: 起始点的 Y 坐标。

这里设置为 屏幕高度一半。

toX: 终点的 X 坐标。

这里设置为 屏幕宽度,表示屏幕的最右边。

toY: 终点的 Y 坐标。

这里设置与 fromY 相同,表示拖拽是在同一水平线上完成的。

duration: 拖拽操作的持续时间,单位为秒。

这里设置为 0.2,表示从起点到终点的拖拽将持续 0.2 秒。

这个方法是有效的,可以右滑退出当前页面。

这里需要说的是:

1、在 iOS 系统中没有像 Android 系统中专门的「返回键」。

2、在 Appium 中查找 iOS 或 Android 元素时,默认是通过全局查找的方法定位的,无法直接指定特定的范围或区域来查找元素。

相关推荐
勇太的数分之旅10 分钟前
Excel大厂自动化报表实战(互联网金融-数据分析周报制作下)
信息可视化·金融·数据分析·自动化·excel·数据可视化
FJSAY1 小时前
我自己动手写了一个MySQL自动化备份脚本,基于docker
mysql·docker·自动化
FF-Studio2 小时前
万物皆数:构建数字信号处理的数学基石
算法·数学建模·fpga开发·自动化·音视频·信号处理·dsp开发
二流小码农2 小时前
鸿蒙开发:DevEcoStudio中的代码提取
android·ios·harmonyos
MiaoChuPPT4 小时前
告别手动做PPT!4款AI工具实现自动化生成
人工智能·自动化·powerpoint
容器( ु⁎ᴗ_ᴗ⁎)ु.。oO6 小时前
Magentic-ui项目相关整理
开发语言·javascript·ui
Digitally8 小时前
如何用4 种可靠的方法更换 iPhone(2025 年指南)
ios·iphone
97650333512 小时前
iOS 审核 cocos 4.3a【苹果机审的“分层阈值”设计】
flutter·游戏·unity·ios
I烟雨云渊T12 小时前
iOS Alamofire库的使用
ios
程序员老刘·12 小时前
iOS 26 beta1 真机无法执行hot reload
flutter·ios·跨平台开发·客户端开发