cell_elements = find_elements(:xpath, '//*/android.support.v7.widget.RecyclerView[1]/*')
element = cell_elements[0]
element.value.should eq 'something'
上面的代码返回列表视图中的所有元素,但是在第3行,解析element.value
时它失败并显示以下消息:
使用给定的搜索参数无法在页面上找到元素。 (硒::的webdriver ::错误:: NoSuchElementError)
对我而言,Appium能够找到元素并没有任何意义,但在尝试使用它时,它无法再找到它。所以这看起来像个bug。我也试过这个:
element = find_element(:xpath, "//*/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[0]")
element.value.should eq 'something'
失败并出现同样的错误。
我对xpath
没有太多经验,所以只想问我是否做错了或者我是否应该将此报告为错误?
答案 0 :(得分:1)
错误消息具有误导性,不是该元素不存在,而是它没有value
属性。
这可以通过获取元素的text
来确认。
答案 1 :(得分:1)
//*/abc
对我而言,Appium能够找到它并没有任何意义 元素,但是当试图使用它时,它再也找不到了。
在仔细阅读您的错误消息之后,我觉得可能会有一些懒惰的评估正在进行中。第一行不需要评估,例如selenium可以做一个说明:“我可能需要在某个时刻检索这些元素,但不仅仅是。”
同样对于第二行,selenium可以做一个额外的注释,“当我实际检索第一行指定的元素时,我需要返回第一个元素。”
但是对于第三行,硒必须实际进行评估(并且不再是懒惰)。需要第一个元素的值来将它与字符串'something'进行比较,所以此时selenium必须评估第一行,但“使用给定的搜索参数”元素不能位于。
这意味着你的xpath有问题。如果不知道你试图解析的东西的结构,很难知道什么是错的。顺便说一句,我认为//abc
相当于find_elements()
。
查看selenium文档,看起来你有{{1}}反转的论据。