如何通过非唯一资源 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。
我测试了一个对元素使用非唯一 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。