Appium appium2 问题

nieda726 · 2024年12月30日 · 最后由 wupengfeng 回复于 2024年12月31日 · 1449 次阅读

def bezier_curve(sx, sy, ex, ey, cx, cy, part):
pointArr = []
changeX1 = (cx - sx) / part
changeY1 = (cy - sy) / part
# 控制点到结束点的 x 和 y 每次的增量
changeX2 = (ex - cx) / part
changeY2 = (ey - cy) / part
for i in range(part): # 计算两个动点的坐标
qx1 = sx + changeX1 * i
qy1 = sy + changeY1 * i
qx2 = cx + changeX2 * i
qy2 = cy + changeY2 * i
# 计算得到此时的一个贝塞尔曲线上的点坐标
bx = qx1 + (qx2 - qx1) * i / part
by = qy1 + (qy2 - qy1) * i / part
pointArr.append([bx, by])
return pointArr

获取屏幕尺寸

window_size = driver.get_window_size()
screen_width = window_size['width']
screen_height = window_size['height']

定义曲线滑动的坐标点列表,可按需增加更多点来细化曲线

point_list = bezier_curve(100,100, 100, 600, 200, 300, 10)

创建 ActionChains 对象

action_chains = ActionChains(driver)

移动到起始点并按下

action_chains.w3c_actions.pointer_action.move_to_location(point_list[0][0], point_list[0][1])
action_chains.w3c_actions.pointer_action.pointer_down()

依次移动经过各中间点

for point in point_list[1:]:
action_chains.w3c_actions.pointer_action.move_to_location(point[0], point[1])

移动到结束点并释放

action_chains.w3c_actions.pointer_action.move_to_location(point_list[-1][0], point_list[-1][1])
action_chains.w3c_actions.pointer_action.pointer_up()

action_chains.w3c_actions.pointer_action._interval = 0

执行动作链

action_chains.perform()
time.sleep(2) # 等待几秒,便于观察曲线滑动效果

关闭 Appium 会话

driver.quit()

如上代码实现了曲线滑动但是动作过程太慢了,请问各位前辈们有什么好的解决方法?

共收到 1 条回复 时间 点赞

安卓用的 driver.swipe_points([coordinates1,coordinates2,coordinates3], 0.2)
coordinates1=(x1,y1)
我的安卓是基于 uiautomator2,不过这个方法在 appium 也有(但是好像 ios 不支持)

我的 ios 是基于 wda,直接使用 http 通信
wda_url = f"http://localhost:8100/session/session_id}/actions{"
构建请求数据 相关文档https://github.com/jlipps/simple-wd-spec#perform-actions

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册