问答 请教下各位大佬,用 appium 测试 app 的时候,为什么同样的代码,加两个打印,就可以找到点击那个元素,少两个打印就会报错找不到那个元素,反复试了无数次都是这样

happy · 2024年05月07日 · 最后由 哲豪 回复于 2024年05月08日 · 6502 次阅读

请教下各位大佬,用 appium 测试 app 的时候,为什么同样的代码,加两个打印,就可以找到点击那个元素,少两个打印就会报错找不到那个元素,反复试了无数次都是这样


最佳回复

感谢大家的回复,最后的解决方法是:加了个显式等待就好了。
但还是不明白为什么在不加显式等待的情况下,加 print(session.page_source) 也可以成功😅

共收到 10 条回复 时间 点赞

稳定性问题?推荐 uiautomator2 😆

cobb 回复

啊?现在 appium 底层调用的不就是 uiautomator2 么

我看你截图,两个截图里展示的内容都不大一样,第二个多了个弹窗。

从我历史经验,有 2 种可能:
1、sleep 时间不够长。session.page_source 语句的执行是比较耗时的(一般几秒左右,复杂页面时间更长),相当于再 sleep 了几秒。你看下加长 sleep,去掉 print,是否可以解决?
2、webview 内部元素要通过调用 page_source 强制遍历一遍,才会出现在控件树中(猜测)。可以试试不加 page_source 和加 page_source ,看加的话是不是稳定成功,不加的话是不是稳定失败。

你直接加个隐式等待多==

感觉和打印无关,可能和 session 的 2 个方法有关,那 2 个方法内部可能需要等元素加载完成,所以你调用之后就可以找到元素

一般这种问题,先加个等待试试

陈恒捷 回复

感谢你的回复。我这段代码就是的目的就是点击那个弹窗的关闭按钮,图 1 是因为操作成功了,所以截图上也就没有那个弹窗了。我试了只要有 print(session.page_source) 就必定会成功,没有 print(session.page_source) 就必定会失败,即使加长了 time.sleep 的等待时间,也一样会失败。

感谢大家的回复,最后的解决方法是:加了个显式等待就好了。
但还是不明白为什么在不加显式等待的情况下,加 print(session.page_source) 也可以成功😅

有可能是 print 起到了等待的效果

happy 回复

page_source 也耗时啊

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