python+appium自动化测试 —— 滑动到固定的位置停止

来自APP Android端自动化测试初学者的笔记,写的不对的地方大家多多指教哦。

当前很多APP都存在滑动操作,但这些元素一般无法单独定位到,多为一个数组或列表,这边介绍了几种方法,使元素滑动到你想要的位置后停止。

一、scroll()方法

Appium 中webdriver提供scroll()方法来滚动页面,该方法只适用于屏幕上已经显示的两个元素,从一个元素滚动到另一个元素。若元素不存在当前屏幕或被遮挡,则无法使用该方法。

方法介绍:


scroll(self, start_el, stop_el, duration=None):


参数:

- start_el- 开始要滚动的元素

- stop_el- 要滚动到的元素

- 即从元素stop_el滚动至元素start_el

- duration 即滚动的持续时间

上栗子:使用scroll()方法实现从“2008”滑动到“2012”,即方向为向上滑动,将2012滑动到2008的位置。

具体代码如下:


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)

注意:以上方法无法实现从2008滑动到2013,因为2013未显示在屏幕中,被遮挡了。

二、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次。

注意:该方法会直接滑动到列表最底部或最顶部,在中间时比较不好判断,如果列表的数据比较长的话,建议不使用哦。评论区有没有哪位大神,有好的方法来解决这个局限性,感谢!!

参考文章:blog.csdn.net/yiwaChen/ar…

三、swipe()方法

之前已经有发布swipe()方法的封装类,具体位置:juejin.cn/post/691558…

上栗子:仍然以方法一的图片作为例子,当前的年份为2008,需要滑动或点击2020。

使用循环实现,具体实现方法为:

  • 写一个循环,循环中再做判断
  • 若查找到元素,则执行点击
  • 若未查找到元素,则做上滑操作,向上滑动列表
  • 若向上滑到列表最底部仍然未查找到数据,则判断当前是否处于列表最底部
    • 当前处于列表最底部,则做下滑操作,向下滑动列表

def swipe():

# 默认没找到元素

is_find = False

# 默认顺序查找,即上滑

is_sequential_search = True

while is_find is not True:

try:

self.driver.find_element_by_xpath("//android.widget.TextView[@text='1995']").click()

is_find = True # 找到了,退出循环

except NoSuchElementException:

if is_sequential_search: # 顺序查找

# 该方法调用已封装的向上滑动类

self.slide.swipe_up(2500)

# 所有年份,获取屏幕列表中最底部的一个年份的text值

years = self.driver.find_elements_by_class_name("android.widget.TextView")

years_text = years[9].text

# 判断获取到的text值是否等于2021

if years_text == "2021": # 到列表的最后一个,但没找到

is_sequential_search = False # 转换为逆序查找,即下滑

else:

# 该方法调用已封装的向下滑动类

self.slide.swipe_down_search(2500)

注意:scroll() 与swipe()的区别,swipe是可以根据自己需要设置滑动的距离,而scroll是根据页面中两个元素位置距离进行滑动。今天的分享就到此结束了, 如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值