如何通过非唯一资源 ID 查找元素?

How can I find element by non-unique resousre-id?

我测试了一个对元素使用非唯一 resourse-id 的应用程序。

有没有办法像

这样通过 xpath 找到这样的元素
//*[@resourse-id='non-unique-id'][2]

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

就我的理解而言,您需要 select 具有上述路径的第二个元素://*[@resourse-id='non-unique-id']

为此,您需要首先获取所有具有相同非唯一资源 ID 的元素,然后 get() 它们。所以,你的代码应该是:

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

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

希望对您有所帮助。

我建议在移动自动化中避免使用 xpath,因为这是查找元素最耗时的策略。 如果你的元素没有任何其他锚点,但你对它的顺序有信心,你可以坚持以下方法:Appium 驱动程序可以 return 具有相同定位器的元素列表,如果是页面对象模型你可以这样做:

@AndroidFindBy(uiAutomator = "resourceIdMatches(\".*whatever\")")
private List<MobileElement> elements;

因此,一旦您的页面被初始化,您就可以通过索引访问元素:

elements.get(1).click();

或者,如果是手动管理,您可以这样做:

List<MobileElement> elements = driver.findElements(MobileBy.AndroidUIAutomator("resoureceIdMatches(\".*whatever\")"));
elements.get(3).click();

希望对您有所帮助。

尝试以下方法:

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

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

因此,为了将来的可测试性,请开发人员修复这些 ID。