Appium [已解决] iOS appium - 遍历到一半就没效果了

jytest · 2015年06月09日 · 最后由 jytest 回复于 2015年06月10日 · 1467 次阅读

求诸大神指导。。
appium 1.3.4
iOS 模拟器(iphone 6,8.1)
场景:获取当前屏幕内列表里的一条条内容,点击进入,再返回
主要代码:

table =  wd.find_elements_by_class_name("UIATableCell")
i = len(table)
print i
for x in range(i):
    wd.find_elements_by_class_name("UIATableCell")[x].click() 
    print "第",x+1,"个cell"
    time.sleep(3)
    wd.find_element_by_name("返回").click()

问题:
1)定位到了 27 个 tablecell,但开始遍历后,执行到第 11 个之后,就再也没有执行效果了。
命令行里没打印出后面的数量

appium 客户端里也没有明显报错

2)如果不写循环,写 20 多条点击语句堆在一起,又是可以的。。。

解决方案:
点击操作前,先用 scrollto 方法让当前元素滑入屏幕内

wd.execute_script("mobile: scrollTo", {"element": x.id})
time.sleep(2)
x.click() 
共收到 12 条回复 时间 点赞

发一下这个界面的截图,可能是第 12 个开始就不在界面可见范围了,需要滑动一下可见。

不用每次都 find ,find 出来后的元素会在 appium 内部记录的,脚本里直接循环 table 这个数组就好了。
find 得太多不知道会不会有影响。而且你的 log 里面有 Waited for 32032ms so far ,说明很有可能很早就已经找不到元素了。

需要滑动可见的话可以用 scrollTo 。

看样子应该是不可见了

#2 楼 @chenhengjie123 谢谢大神回复。如果是不可见的原因,有没有什么方法可以自己判断它不可见了,然后就滑动一下,感觉每 12 条就滑动一下,有点机械.....

#4 楼 @jytest 你在循环里加个 scrollTo 就能保证点击前元素会被滑到当前界面了。
参考文档:http://appium.io/slate/en/master/?python#scroll-to

#4 楼 @jytest 有个方法可以返回元素是否是可见的,好像叫啥 isExist,你具体搜搜看

#1 楼 @doctorq 好的,这个是第一屏内容,其实也只露出了 4 个,所以能一直定位到 11 也很神奇。。

#3 楼 @cy_suncheng 额,冒昧地问一下,是从某段日志,还是某个属性看出它已经不可见了的?谢谢

#6 楼 @eurekasaber 好的好的,拜谢

jytest #10 · 2015年06月10日 Author

#5 楼 @chenhengjie123 加了一句 scrollTo 的,可以点到后面的元素了,万分感谢。

table =  wd.find_elements_by_class_name("UIATableCell")
for x in table:
    time.sleep(3)
    wd.execute_script("mobile: scrollTo", {"element": x.id})
    time.sleep(2)
    x.click() 

#10 楼 @jytest 帖子更新下解决方案,标题加上已经解决。

jytest #12 · 2015年06月10日 Author

#11 楼 @lihuazhang 恒温老师,已改好

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册