You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Appium-Python-client中TouchAction已弃用,如何用ActionChains实现按压与滚动?

用ActionChains实现自定义坐标的侧菜单滚动

你可以通过W3C Actions API结合ActionChains模拟触摸按压、滑动、释放的动作,完全替代原TouchAction的逻辑,解决侧菜单自定义距离滚动的问题。以下是具体实现:

实现代码

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput

def _scroll_down_menu_settings(self, distance=400):
    # 获取窗口尺寸,沿用原逻辑计算初始触摸坐标
    window_size = self.driver.get_window_size()
    x = window_size['width'] / 6
    y = window_size['height'] / 2

    # 创建触摸类型的输入源
    touch_input = PointerInput(interaction.POINTER_TOUCH, "touch")
    actions = ActionChains(self.driver)
    # 替换默认鼠标输入为触摸输入,适配移动端操作
    actions.w3c_actions = ActionBuilder(self.driver, mouse=touch_input)

    # 复刻原TouchAction的动作逻辑:定位→按压→等待→滑动→释放
    actions.w3c_actions.pointer_action.move_to_location(x, y)
    actions.w3c_actions.pointer_action.press()
    actions.w3c_actions.pointer_action.pause(0.5)  # 对应原代码的wait(500),单位为秒
    actions.w3c_actions.pointer_action.move_to_location(x, y - distance)
    actions.w3c_actions.pointer_action.release()

    # 执行动作链
    actions.perform()

关键说明

  • 为什么scroll_to_element()等方法无效?这些方法是针对Web页面元素的滚动逻辑,依赖于页面的滚动容器或元素布局,而侧菜单这类自定义滚动区域通常没有对应的可识别滚动元素,因此直接用坐标模拟触摸滑动更可靠。
  • 这段代码完全复刻了你原有的TouchAction逻辑:保持相同的坐标计算、按压等待时间、滑动距离,确保Android和iOS侧菜单的滚动效果和之前一致。
  • 这是Appium 2.x官方推荐的替代TouchAction的方案,基于W3C Actions API实现,兼容性更好。

内容的提问来源于stack exchange,提问作者christianzunalargo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:42:14