如何通过非唯一的resousre-id查找元素?

问题描述 投票:0回答:1

我在测试一个使用非唯一的 resourse-id 的元素。

有什么办法可以通过xpath找到这样的元素,比如说

//*[@resourse-id='non-unique-id'][2]

我的意思是第二种元素相同 resourse-id.

selenium appium qa selenide
1个回答
1
投票

我建议在移动自动化中避免使用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();

希望能帮到你


1
投票

据我的理解,你需要选择第二个元素的路径,如上所述。//*[@resourse-id='non-unique-id']

要做到这一点,你需要首先抓住所有具有相同非唯一资源ID的元素,然后... get() 他们。所以,你的代码应该是。

driver.findElements(By.xpath("//*[@resourse-id='non-unique-id']")).get(1).click();

任何一个列表的索引都是从0开始的,所以,第二个元素可以通过1的值来访问。

希望这能帮助你。


1
投票

试试下面的方法。

(//*[@resourse-id='non-unique-id'])[2]

0
投票

非唯一ID的HTML不是一个有效的HTML文档。

所以,为了以后的可测试性,请开发者修正id。

© www.soinside.com 2019 - 2024. All rights reserved.