一、scroll()方法
Appium 中webdriver提供scroll()方法来滚动页面,该方法只适用于屏幕上已经显示的两个元素,从一个元素滚动到另一个元素。若元素不存在当前屏幕或被遮挡,则无法使用该方法。
方法介绍:
scroll(self, start_el, stop_el, duration=None):
参数:
- start_el- 开始要滚动的元素
- stop_el- 要滚动到的元素
- 即从元素stop_el滚动至元素start_el
- duration 即滚动的持续时间
具体代码如下
def scroll():
stop_el = self.driver.find_element_by_xpath("//android.widget.TextView[@text='2008']")
start_el = self.driver.find_element_by_xpath("//android.widget.TextView[@text='2012']")
self.driver.scroll(start_el, stop_el)
二、UiScrollable()方法
UiScrollable是UiCollection的子类,专门处理滚动时间,提供各种滚动方法,下面只介绍了滚动到固定的对象。
相关概念:
步长:从一点到另一点使用的时间。步长越短滚动越快,反之步长越长滚动越慢。
扫动次数:触发滚动的次数。
上栗子:使用上一个方法scroll()的栗子图片,实现从“2008”滑动到“2012”。
def test():
self.driver.find_element_by_android_uiautomator(
'new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("2012")).scrollToEnd(10,5)')
# text("2012"):表示需要滑动的位置
# scrollToEnd(10,5):以步长(速率)5滚动到列表底部,最多滚动10次。
注意:该方法会直接滑动到列表最底部或最顶部,在中间时比较不好判断,如果列表的数据比较长的话,建议不使用哦。评论区有没有哪位大神,有好的方法来解决这个局限性,感谢!!
三、swipe()方法
使用循环实现,具体实现方法为:
写一个循环,循环中再做判断
若查找到元素,则执行点击
若未查找到元素,则做上滑操作,向上滑动列表
若向上滑到列表最底部仍然未查找到数据,则判断当前是否处于列表最底部
当前处于列表最底部,则做下滑操作,向下滑动列表
注意:scroll() 与swipe()的区别,swipe是可以根据自己需要设置滑动的距离,而scroll是根据页面中两个元素位置距离进行滑动。