找到多个元素在网络视图与浓缩咖啡



我正在测试一个混合应用程序,其中每个视图都有一个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
}

最新更新