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
相关产品推荐
相关产品推荐

