使用espresso在Web视图中查找多个元素

时间:2016-09-21 07:48:40

标签: android xpath webview android-webview android-espresso

我正在测试混合应用,其中每个视图都有一个Web视图 在其中一个Web视图中,我有一个具有相同属性的元素列表。它们具有相同的xpath定位器,如:

//h4[contains(@data-role, 'product-name')]

我想创建这些元素的列表并迭代它们,计算它们,得到它们的属性。

在文档中,我发现了两种类似的方法:

findElement(locator, value)

findMultipleElements(locator, value)

虽然我完全不清楚如何使用它。我试图找到它的例子,但没有成功。

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试类似的方法吗?由于您实际上应该关心的是ElementReference,因此可以使用简单的for / foreach语句迭代从findMultipleElements返回的lsit:

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
}

答案 1 :(得分:0)

这是我找到的解决方案。

@kaqqao是正确的,findMultipleItems调用返回Atom<List<ElementReference>>不能使用的onWebView(),因为那里只有withElement()接受Atom<ElementReference>或仅接受ElementReference doEval

您可以执行的操作是查找多个项目,并从Atom中获取结果。如果您在Web.java中检查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()) }

然后将其运行为

<