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

相关推荐
Java后端的Ai之路5 小时前
SSE 接口设计 vs Agent UI:四个开源项目,把「模型吐词」和「界面更新」拆开后,我看懂了差距
ui·开源·sse·agui·agentui
YoungStudyAI6 小时前
QA的下一个自动化阶段,可能不是再写更多脚本,而是设计测试Agent
运维·自动化
金八梭6 小时前
车辆能源种类
自动化·车辆工程·电气工程
天远Date Lab10 小时前
微服务架构实战:基于天远学历信息高级版构建自动化人才准入网关
人工智能·微服务·架构·自动化
可乐鸡翅yeah_10 小时前
hls.js 切换多个视频源,新手开发常见踩坑
开发语言·前端·javascript·ios·ffmpeg·音视频·safari
传奇开心果编程10 小时前
【Flutter入门练中学】第8课:动画与过渡
android·学习·flutter·ui·ios
志栋智能11 小时前
超自动化巡检:驱动持续改进的运维飞轮
运维·自动化
海宇大数据11 小时前
零信任架构实战:基于海宇学历核验版构建自动化风控审查网关
运维·人工智能·架构·自动化
挨踢诗人11 小时前
容联七陌集成金蝶云星空解决方案
自动化
NailiConveyor11 小时前
输送机系统与WMS仓储管理系统集成的5个关键技术点
大数据·运维·自动化·制造·业界资讯