Appium 中webdriver提供scroll()方法来滚动页面,不过不是滑动滚动条,而是获取两个元素后,从一个元素滚动到另一个元素。
scroll的方法简介:
scroll(self, origin_el, destination_el, duration=None):
参数:
- originalEl - 开始要滚动的元素
- destinationEl - 要滚动到的元素
- 即从元素origin_el滚动至元素destination_el
- duration 即滚动的持续时间
用法: driver.scroll(el1,el2)
讲解实例
如下图所示,用scroll方法实现从“物理”元素滚动到“语文”元素。
from appium import webdriver
from time import sleep
import os
from selenium.webdriver.support.wait import WebDriverWait
desired_caps={
'platformName':'Android',
'platformVersion':'6.0.1',
'deviceName':'127.0.0.1:21503',
'appPackage':'com.baidu.homework',
'appActivity':'com.baidu.homework.activity.index.IndexActivity',
'automationName':'Appium',
'noReset':False
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
driver.find_element_by_xpath("//*[@class='android.widget.RelativeLayout' and @index='3']").click()
sleep(10)
def taptest(driver):
# 设定系数,控件在当前手机的坐标位置除以当前手机的最大坐标就是相对的系数了
a1 = 536/1073
b1 = 1542/1916
# 获取当前手机屏幕大小X,Y
X = driver.get_window_size()['width']
Y = driver.get_window_size()['height']
# 屏幕坐标乘以系数即为用户要点击位置的具体坐标
driver.tap([(a1*X, b1*Y)])
#处理广告弹窗
taptest(driver)
sleep(1)
WebDriverWait(driver,100).until(lambda x :x.find_element_by_accessibility_id('全部分类')).click()
def scroll_page():
#获取【语文】、【物理】两个元素,将页面从语文向物理滑动,即从右向左滑动
stop_element=driver.find_element_by_accessibility_id('语文')
start_element=driver.find_element_by_accessibility_id('物理')
driver.scroll(start_element,stop_element,3000)
if __name__ == '__main__':
scroll_page()
注意: scroll() 与swipe()的区别,swipe是可以根据自己需要设置滑动的距离,而scroll是根据页面中两个元素位置距离进行滑动。
swipe请参考博客:swipe滑屏操作实例