如何用Appium Python客户端滚动Android应用?滚动至页面底部失败求助
解决Appium Android页面滚动到底部的问题
嘿,我来帮你搞定这个滚动难题!你遇到的报错是因为Appium版本的变化——原来的mobile: scroll命令在1.7+的服务端版本里已经被移除了,再加上你的客户端(Appium v1.4.1)和服务端(v1.7.2)版本差得有点多,兼容性问题也会导致这类报错。下面给你几个靠谱的替代方案:
方案一:用TouchAction模拟手动滑动
这是最通用的方法,不管Appium版本新旧,基本都能生效,原理就是模拟手指从屏幕下方往上滑的动作,重复几次就能滚到底部。
代码示例:
from appium.webdriver.common.touch_action import TouchAction # 获取当前屏幕的尺寸 screen_size = self.driver.get_window_size() # 定义滑动的起点和终点(从屏幕下半部分滑到上半部分) start_x = screen_size['width'] // 2 # 屏幕水平中间位置 start_y = screen_size['height'] * 0.8 # 屏幕垂直80%的位置(偏下) end_x = start_x # 水平位置不变 end_y = screen_size['height'] * 0.2 # 屏幕垂直20%的位置(偏上) # 执行滑动动作 action = TouchAction(self.driver) action.press(x=start_x, y=start_y) \ .wait(ms=500) # 按下后等待500毫秒,模拟真实滑动的停顿 .move_to(x=end_x, y=end_y) \ .release() \ .perform()
如果要直接滚到底部,可以把这个滑动动作放到循环里,直到页面不再更新为止:
from appium.webdriver.common.touch_action import TouchAction previous_page = "" while True: # 执行一次滑动 screen_size = self.driver.get_window_size() start_x = screen_size['width'] // 2 start_y = screen_size['height'] * 0.8 end_x = start_x end_y = screen_size['height'] * 0.2 TouchAction(self.driver).press(x=start_x, y=start_y).wait(500).move_to(x=end_x, y=end_y).release().perform() # 对比当前页面和上一次的页面源码,判断是否到底 current_page = self.driver.page_source if current_page == previous_page: break previous_page = current_page
方案二:使用Appium的scrollGesture命令(适用于Appium 1.8+)
如果你的服务端版本支持UiAutomator2驱动,可以用官方推荐的scrollGesture命令,功能更精准:
self.driver.execute_script('mobile: scrollGesture', { 'left': 100, # 滚动区域的左边界 'top': 100, # 滚动区域的上边界 'width': 300, # 滚动区域的宽度 'height': 500, # 滚动区域的高度 'direction': 'up', # 滚动方向(up表示页面向上滚,即往底部走) 'percent': 1.0 # 滚动的比例,1.0代表滚满整个区域高度 })
额外建议:修复版本兼容性问题
你的Appium客户端(v1.4.1)和服务端(v1.7.2)版本差距太大,很容易出现各种奇怪的兼容性问题。建议把Python的Appium客户端升级到和服务端版本接近的版本(比如1.7.x或更高),用pip就能升级:
pip install --upgrade Appium-Python-Client
这样能避免很多因为版本不匹配导致的命令不支持问题~
内容的提问来源于stack exchange,提问作者Jordan Helios
相关产品推荐
相关产品推荐

