我在测试一个使用非唯一的 resourse-id
的元素。
有什么办法可以通过xpath找到这样的元素,比如说
//*[@resourse-id='non-unique-id'][2]
我的意思是第二种元素相同 resourse-id
.
我建议在移动自动化中避免使用xpath,因为这是最耗时的寻找元素的策略。如果你的元素没有其他锚点,但你对它的顺序有信心,你可以坚持使用下面的方法。Appium驱动可以返回一个具有相同定位器的元素列表,如果是Page Object模型,你可以采用这种方式。
@AndroidFindBy(uiAutomator = "resourceIdMatches(\".*whatever\")")
private List<MobileElement> elements;
所以,一旦你的页面被初始化,你就可以通过index来访问一个元素。
elements.get(1).click();
或者,在手动管理的情况下,你可以这样做。
List<MobileElement> elements = driver.findElements(MobileBy.AndroidUIAutomator("resoureceIdMatches(\".*whatever\")"));
elements.get(3).click();
希望能帮到你
据我的理解,你需要选择第二个元素的路径,如上所述。//*[@resourse-id='non-unique-id']
要做到这一点,你需要首先抓住所有具有相同非唯一资源ID的元素,然后... get()
他们。所以,你的代码应该是。
driver.findElements(By.xpath("//*[@resourse-id='non-unique-id']")).get(1).click();
任何一个列表的索引都是从0开始的,所以,第二个元素可以通过1的值来访问。
希望这能帮助你。
试试下面的方法。
(//*[@resourse-id='non-unique-id'])[2]
非唯一ID的HTML不是一个有效的HTML文档。
所以,为了以后的可测试性,请开发者修正id。