需要使用appium为android元素识别xpath

时间:2014-10-02 11:14:10

标签: android xpath appium android-uiautomator

我正在使用Appium框架测试我的Android应用程序。 我有一个Android屏幕,它的视图没有id(我不想添加...),所以我想使用Xpath。

这是 UI Automator Viewer 中屏幕的样子: enter image description here

我希望得到所有相对布局(用红色标记 - 十六项)

我尝试了以下内容:

 List<WebElement> webElementslist =
 mAppDriver.findElementsByXPath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ViewAnimator[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[2]");

但我没有得到任何物品。

我在网上搜索并找到了下一个xpath教程,尝试了更多选项,但又没有成功。

http://www.zvon.org/comp/r/tut-XPath_1.html#intro

http://www.w3.org/TR/xpath/

感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

现在Android上有一些令人讨厌的错误,它们解释了你所看到的行为。它们计划在1.3.1 release

中修复
  1. 您无法按根节点进行搜索.. link
    • 不幸的是,这意味着详细的xpath可能是xpath (双关语)成功
  2. 当你只有16 link
  3. 时,你有时会获得240个元素

    理想情况下,您可以查找所有16个android.widget.LinearLayout的{​​{1}}父级的资源ID,然后执行以下操作:

    RelativeLayout

    您的详细解决方案无效,因为您为其中一个布局提供了//android.widget.LinearLayout[@resource-id="foo"]/android.widget.RelativeLayout 的位置。

    这是固定的:

    [2]

    ....请,请使用第一个解决方案。

    我正在使用//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ViewAnimator[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.RelativeLayout 定位器策略为您的问题寻找解决方案,但尚无答案(因为UiAutomator.fromChild()似乎已被破坏)

答案 1 :(得分:1)

请记住//foo[1]返回所有foo节点的事实,这些节点是父节点的第一个子节点(不是foo节点的第一个子节点),尝试这样的事情:

//ScrollView/LinearLayout/LinearLayout[2]/LinearLayout/RelativeLayout

未经测试,但它应该为您提供所有RelativeLayout,它们是LinearLayout的子项,LinearLayout是LinearLayout的子项,LinearLayout是LinearLayout的第二个子项,它是ScrollView的子项。

答案 2 :(得分:0)

试试这个你可以轻松访问

driver.findElement(By.xpath("//*[@class='android.widget.FrameLayout' and @bounds='[418,564][780,885]']")).click();

Screenshot of UI

答案 3 :(得分:0)

以下代码对我有用:

WebElement webElement = driver.findElementByXPath("//android.widget.ListView[1]/android.widget.LinearLayout[1]");

礼貌:Unable to locate element using xpath in Appium