Appium:为什么我不能使用我找到的使用xpath的元素?

时间:2017-02-22 17:18:44

标签: android ruby xpath appium

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没有太多经验,所以只想问我是否做错了或者我是否应该将此报告为错误?

2 个答案:

答案 0 :(得分:1)

错误消息具有误导性,不是该元素不存在,而是它没有value属性。

这可以通过获取元素的text来确认。

答案 1 :(得分:1)

//*/abc
     

对我而言,Appium能够找到它并没有任何意义   元素,但是当试图使用它时,它再也找不到了。

在仔细阅读您的错误消息之后,我觉得可能会有一些懒惰的评估正在进行中。第一行不需要评估,例如selenium可以做一个说明:“我可能需要在某个时刻检索这些元素,但不仅仅是。”

同样对于第二行,selenium可以做一个额外的注释,“当我实际检索第一行指定的元素时,我需要返回第一个元素。”

但是对于第三行,硒必须实际进行评估(并且不再是懒惰)。需要第一个元素的值来将它与字符串'something'进行比较,所以此时selenium必须评估第一行,但“使用给定的搜索参数”元素不能位于。

这意味着你的xpath有问题。如果不知道你试图解析的东西的结构,很难知道什么是错的。顺便说一句,我认为//abc相当于find_elements()

查看selenium文档,看起来你有{{1}}反转的论据。