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 元素时,默认是通过全局查找的方法定位的,无法直接指定特定的范围或区域来查找元素。

相关推荐
志栋智能2 小时前
超自动化运维:如何降低人为错误?
大数据·运维·网络·人工智能·自动化
迁移科技3 小时前
AI+3D视觉赋能汽车箱体智能上下料
人工智能·3d·自动化·视觉检测
BD4SXV3 小时前
线性二次调节器(Linear Quadratic Regulator,LQR)的无限时域最优控制求解与黎卡提方程
算法·自动化
帅次3 小时前
讯飞与腾讯云:Android 实时语音识别服务对比选择
android·ios·微信小程序·小程序·android studio·android runtime
NiceCloud喜云3 小时前
Claude Code 跑 HyperFrames 实测:本地生成 AI 视频素材全流程
java·运维·人工智能·自动化·json·音视频·飞书
2501_927283584 小时前
堆垛机立体库:告别人工翻找与货物堆压
大数据·人工智能·低代码·自动化·区块链
console.log('npc')5 小时前
Windows试用期重置工具,纯官方 / 安全教程
运维·自动化·typora·脚本
择势5 小时前
用一套View代码,同时支持RTL和LTR布局混合排版
ios
游戏开发爱好者86 小时前
iOS开发工具推荐:Xcode、AppCode、SwiftLint使用心得与效率提升
ide·vscode·macos·ios·个人开发·xcode·敏捷流程
小程故事多_806 小时前
从想法到落地零返工,AI Agent六阶段自动化开发全流水线实践
运维·人工智能·自动化