我正在Android设备上编写Appium测试版。我与Selenium WebDriver合作很多,我希望有类似的经历。但是,XPath让我很头疼。这是组件层次结构:
android.widget.GridView
--android.widget.RelativeLayout
------android.widget.RelativeLayout
------android.widget.RelativeLayout
----------android.widget.TextView <- text here is "Test1", resourceId=qa.com.text:id/bookTitle
--android.widget.RelativeLayout
------android.widget.RelativeLayout
------android.widget.RelativeLayout
----------android.widget.TextView <- text here is "Test2", resourceId=qa.com.text:id/bookTitle
--android.widget.RelativeLayout
------android.widget.RelativeLayout
------android.widget.RelativeLayout
----------android.widget.TextView <- text here is "Test3", resourceId=qa.com.text:id/bookTitle
--android.widget.RelativeLayout
------android.widget.RelativeLayout
------android.widget.RelativeLayout
----------android.widget.TextView <- text here is "Test4", resourceId=qa.com.text:id/bookTitle
我想要一个方法,它返回GridView的4个子元素。这是我的代码:
public List<WebElement> getElementsFromGrid() {
return driver.findElementsByXPath("//android.widget.GridView/android.widget.RelativeLayout");
}
测试:
for (final WebElement s : kno.getBooksInCourse()) {
final MobileElement m = (MobileElement) s;
System.err.println(m.findElementByAndroidUIAutomator("resourceId(\"qa.com.text:id/bookTitle\")").getText());
}
我应该看到:Test1,Test2,Test3,Test4,但我得到:Test1,Test1,Test2,Test4。我究竟做错了什么?我可以使用其他发现方法吗?使用classname对我没有帮助,因为它给了我所有的RelativeLayout元素,而不仅仅是层次结构中的下一个元素。我会使用UISelector,但我不知道如何使用。
使用Appium 1.2和Appium Java客户端1.5
答案 0 :(得分:0)
你可以使用findElementById(&#34; qa.com.text:id / bookTitle&#34;)但我怀疑问题是从finder中产生的。
您可以使用findElementsById(&#34; qa.com.text:id / bookTitle&#34;)并打印列表。如果问题仍然存在,则可能存在刷新问题。有时xpath只是疯了,因为页面没有重新加载,前一页仍在内存中。
答案 1 :(得分:0)
在压缩层次结构方面,它实际上是Appium中的一个错误。在Appium 1.3中修复