【问题标题】:Appium findElementsByXPath returns duplicates, alternative?Appium findElementsByXPath 返回重复项,替代方案?
【发布时间】:2014-09-20 21:53:11
【问题描述】:

我正在 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。我究竟做错了什么?我可以使用其他查找方法吗?使用类名对我没有帮助,因为它给了我所有的 RelativeLayout 元素,而不仅仅是层次结构中的下一个。我会使用 UISelector,但我不知道如何使用。

使用 Appium 1.2 和 Appium Java 客户端 1.5

【问题讨论】:

    标签: android mobile xpath automation appium


    【解决方案1】:

    您可以使用 findElementById("qa.com.text:id/bookTitle") 但我怀疑问题是由查找器产生的。

    您可以使用 findElementsById("qa.com.text:id/bookTitle") 并打印列表吗?如果问题仍然存在,则可能是有关刷新的问题。有时 xpath 只是因为页面没有重新加载并且前一页仍在内存中而变得疯狂。

    【讨论】:

    • 嗨,findElementById("qa.com.text:id/bookTitle") 工作正常,我已经在使用它了。但是,我需要 RelativeLayout 父级。即使我有对 TextView 元素的引用,我怎么能上 2 级?
    【解决方案2】:

    这实际上是 Appium 中的一个关于压缩层次结构的错误。在 Appium 1.3 中修复

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 2020-09-20
      • 2018-11-14
      • 2020-04-08
      • 1970-01-01
      • 2020-01-09
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多