Appium [已解决] Appium 找不到 button

Anson · 2013年12月30日 · 最后由 shen 回复于 2013年12月31日 · 2046 次阅读

公司的 iPad App,发现找不到某些 Button,如图。
左下方的"Adhoc Check in"能找到,通过 find_element_by_name('Adhoc Check in')。
红色框住的 button "Sync today application"就找不到 (find_element_by_name('Sync today application')),

请问,是什么原因么?

共收到 19 条回复 时间 点赞

这是原生, 还是混合 app?
你可以遍历下所有的控件,找找有没有你要的元素。

Anson #18 · 2013年12月30日 Author

#1 楼 @seveniruby
不好意思,原生,混合是怎样区分的?
我用 btns = wd.find_element_by_name('button') 去找 button,使用 print len(btns) 却报错了。
所以现在也不知道能找到几个 button。

#2 楼 @532589730 你应该用 tagname 吧。。。

#3 楼 @spikeshen find_elements 才是列表, 才能用 len。 你可以使用 xpath 的//button 获取所有的 button 不过却确保你的元素是 button, 还是其他的东西。

#4 楼 @seveniruby 我觉得他是想找所有的按钮,用 name 就变成是找值为 button 而不是标签的

Anson #14 · 2013年12月30日 Author

#5 楼 @spikeshen
不是,是想找 sync 按钮,再 click 这个按键。
之所以用 len 是因为找不到 sync 按钮,想找出所有的 button,再 print 出每个按钮的 text,看看 sync 按钮在不在里面,但我用错了方法,如 seveniruby 所说的,应该用 elements,复数,但我用了单数,所以报错。

使用了 btns = wd.find_elements_by_name('button'),再 print 按钮的 text,发现没有"Sync"的按键文本。

如果使用 tag_name 的话,也是找不到 sync 这个按钮

#6 楼 @532589730 那你试试先找到这个 sync 上层的 view,然后在通过它去找按钮,看看有没有

Anson #12 · 2013年12月30日 Author

#7 楼 @spikeshen
是的,我怀疑是不是 adhoc 按钮是在一个 view 里,而 sync 按钮是在另一个 view 里,找 button 时只在 adhoc 的 view 查找,所以找不到 sync 按钮,这只是我的猜测而已。

请问怎样跳到 sync 上层的 view,进而找按钮呢?
谢谢

#8 楼 @532589730 你就先把所有 view 找出来,用 xpath 吧。。靠谱点

Anson #10 · 2013年12月30日 Author

#9 楼 @spikeshen
不好意思,在 app 上用 xpath 还不会用,在 firefox 浏览器上使用 firebug+xpath finder 倒是容易定位元素的 xpath。

在 inspector 上可以看到 xpath,现在的问题是,高亮部分不准确。
我先得解决这个问题先。

Anson #12 · 2013年12月30日 Author

问题已经解决了。
在 inspector 上看到,原来这个 sync 按钮的 name 是空的,就算是使用 find_element_by_name(""),名为空都找不到,现在使用 xpath 可以找到了。

谢谢各位的帮忙,及谢谢恒温在 qq 解答怎么打开 inspector 的初级问题。

#12 楼 @532589730 你用 tagname 应该也可以找到的

Anson #14 · 2013年12月30日 Author

#13 楼 @spikeshen
tag_name 是也可以找到的,但这里的找到现在我还是没转过弯来。
比如说使用 elements 找到所有的按钮,可以通过下标来定位哪个按钮,但如果直接使用 element_by_tag_name 的话,是不是也是 element_by_tag_name('args'),这个 agrs 应该是什么才对?

#14 楼 @532589730 你这样的需求,就需要用 xpath 了。 //button[2] 这种方式

#15 楼 @seveniruby
目前来说,只能是 xpath 了,看了下论坛的元素定位的文檔,说元素定位 3 种方式,by_name, by_tag_name, by_xpath。
并没有其他的,这样的话,如果 name 是空的话,只能是 xpath 一次性精确定位了。

#14 楼 @532589730 args 这个,android 去看所有元素对应的。。。代码,没错,是代码,不是文档。。。https://github.com/appium/appium/blob/master/lib/devices/android/bootstrap/src/io/appium/android/bootstrap/AndroidElementClassMap.java

#17 楼 @spikeshen
谢谢 spikeshen

#18 楼 @532589730 不客气,共同学习成长哈

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