Appium 原生 android 滑动到可见元素问题

测试小书童 · 2017年09月29日 · 最后由 测试大头兵 回复于 2017年09月30日 · 1343 次阅读

在原生 android 中到列表中滑动我尝试用 scroll:

el1 = self.driver.find_element_by_xpath("//android.widget.TextView[@text='技术专区']")
el2 = self.driver.find_element_by_xpath("//android.widget.TextView[@text='全联接大会']")
self.driver.scroll(el1, el2)
  • 上面到方式可以适用到两个元素都在屏幕上可见时候,如果是某个元素必须向上滑动屏幕才可见,上面这样的方式就不行
  • 下面采用 swipe 滑动的方式我也发现一个问题,这样启动手机滑动,多次测试,居然在屏幕上滑动的位置偶尔会不一致,测试代码如下:
height = self.driver.get_window_size()["height"]
width = self.driver.get_window_size()["width"]
for i in range(n):
    self.driver.swipe(width / 2, height / 3*2, width /2 , height/3*1, 0)
    time.sleep(2)

请问下,有其他比较好的方式来处理滑动到指定页面元素到方案吗?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞
匿名 #1 · 2017年09月30日

之前有遇到过,在客户列表中滑动找到指定客户的问题,感觉和这个有点类似,我是这样处理的:

i=0
while i<5:
        a=self.driver.find_elements_by_name(u'客户A')
        if len(a)>0:
            public.get_name(u'客户A').click()
            break
        else:
            public.swipe_up()
        i=i+1

感觉这个问题,可以按照这个思路处理呢

我是自己写一个 swipe 的方法,然后通过判断元素存不存在,存在就执行,不存在就继续滑动,每次滑动半个页面,缺点执行效率有慢。
while True:
try:
self.capture()
self.driver.find_element_by_id("com.xxx.xxx:id/reedit_btn").click()
break
except:
self.swipeUp(500)

我这里比较坑爹,整个页面就是一个 listview,即使滑动到可见区域,有些元素无法定位,而是要必须滑动到指定区域才能定位到(其他页面元素造成布局元素不一样),临时解决方案是,我是把滑动到幅度变小,固定循环滑动。。。这样到成功率大概有 90% 左右

把滑动的 duration 设置大一点可能效果会好一点。
必须要测这个列表滑动吗?

页面已经展示,元素定位不到,这种情况是有点坑,原生的没碰到过,h5 的到是碰到过,然后就只好使用坐标了。

测试小书童 关闭了讨论 09月30日 14:35
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册