Selenium WebDriver滑动报错,如何操作每5秒自动轮播的移动端横幅
报错原因说明
- 第一个报错
AttributeError: 'WebElement' object has no attribute 'swipe':Selenium原生WebElement没有内置swipe方法,直接调用属于语法错误。 - 第二个报错
selenium.common.exceptions.WebDriverException: Message: Unknown mobile command "swipeGesture":你当前使用的驱动版本不支持swipeGesture命令,报错信息里已经明确列出了当前支持的所有移动端命令,其中没有该指令。
可行实现方案
方案1:使用TouchAction实现滑动(兼容性最高)
该方法不依赖特定版本的移动端命令,适配绝大多数Appium+Selenium环境:
from appium.webdriver.common.touch_action import TouchAction import time # 先获取目标横幅元素 element = wait.until(EC.visibility_of_element_located((By.ID, 'com.project.PROJECTNAME:id/bannersRecyclerView'))) # 计算滑动坐标:从元素右侧90%位置滑到左侧10%位置,纵向保持居中 start_x = element.location['x'] + element.size['width'] * 0.9 start_y = element.location['y'] + element.size['height'] * 0.5 end_x = element.location['x'] + element.size['width'] * 0.1 end_y = start_y # 避免和5秒自动轮播逻辑冲突,滑动前加1秒延迟 time.sleep(1) # 执行滑动操作 TouchAction(driver).press(x=start_x, y=start_y).wait(ms=300).move_to(x=end_x, y=end_y).release().perform()
方案2:使用驱动支持的scroll命令
根据报错提示的支持命令列表,可替换为mobile: scroll实现滑动:
element = wait.until(EC.visibility_of_element_located((By.ID, 'com.project.PROJECTNAME:id/bannersRecyclerView'))) # 直接传入元素对象,方向设为left即可 driver.execute_script('mobile: scroll', {'element': element, 'direction': 'left'})
注意:如果滑动无响应,可适当调整wait的毫秒参数,或者修改滑动起始/结束位置的比例,避免触碰到元素边缘的非滑动区域。
参考附件

内容的提问来源于stack exchange,提问作者Claudaette
相关产品推荐
相关产品推荐

