我正在测试一个混合应用程序,其中每个视图都有一个web视图。
在其中一个web视图中,我有一个具有相同属性的元素列表。它们有相同的xpath定位符,类似于:
//h4[contains(@data-role, 'product-name')]
我想创建一个这些元素的列表,并遍历它们,计数它们,获取它们的属性。
在文档中,我发现了两个类似的方法:
findElement(locator, value)
和
findMultipleElements(locator, value)
虽然我完全不清楚如何使用它。我试着找一些例子,但是没有成功。
有人能帮我一下吗?这是我找到的解决方案。
@kaqqao是对的,findMultipleItems
调用返回Atom<List<ElementReference>>
,不能与onWebView()
一起使用,因为只有withElement()
接受Atom<ElementReference>
或ElementReference
您可以做的是执行查找多个项目的操作,并从Atom中获取结果。这就是它是如何在内部工作的,如果你检查doEval
方法的源代码在Web.java for espresso。
val elements = with(AtomAction(findMultipleElements(
Locator.XPATH,
"YOUR_COMPLEX_XPATH"
), null, null)) {
onView(ViewMatchers.isAssignableFrom(WebView::class.java)).perform(this)
this.get()
}
这段代码会给你List<ElementMatcher>
。
然后以
方式运行elements.forEach {
onWebView().forceJavascriptEnabled().withElement(it).perform(webClick())
}
你能试一下吗?因为您应该关心的是真正的ElementReference,您可以迭代从findMultipleElements返回的列表,使用简单的for/foreach语句:
yourList = findMultipleElements(locator, value);
yourList.size(); //this will get you the count of found elements with that locator
for(Atom<ElementReference> item : yourList ){
item.getAttribute...
//and whatever you want
}