我正在使用Appium框架测试我的Android应用程序。 我有一个Android屏幕,它的视图没有id(我不想添加...),所以我想使用Xpath。
这是 UI Automator Viewer 中屏幕的样子:
我希望得到所有相对布局(用红色标记 - 十六项)
我尝试了以下内容:
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
感谢任何帮助。
答案 0 :(得分:7)
现在Android上有一些令人讨厌的错误,它们解释了你所看到的行为。它们计划在1.3.1 release
中修复理想情况下,您可以查找所有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();
答案 3 :(得分:0)
以下代码对我有用:
WebElement webElement = driver.findElementByXPath("//android.widget.ListView[1]/android.widget.LinearLayout[1]");