我正在尝试使用以下内容更新EditText
作为Espresso测试的一部分
onView(allOf(withClassName(endsWith("EditText")), withText(is("Test")))).perform(clearText())
.perform(click())
.perform(typeText("Another test"));
但是我收到以下错误:
com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: No views in hierarchy found matching: (with class name: a string ending with "EditText" and with text: is "Test")
通过分解测试线我可以看到在执行clearText()
之后发生这种情况,所以我假设匹配器在每个perform
之前重新运行并且在第二个动作之前失败。虽然这是有道理的,但是我对如何使用Espresso更新EditText
感到有些困惑。我该怎么做?
请注意,我无法在此方案中使用资源ID或类似资源,必须使用上面所示的组合来识别正确的视图。
答案 0 :(得分:34)
您可以使用replaceText
方法。
onView(allOf(withClassName(endsWith("EditText")), withText(is("Test"))))
.perform(replaceText("Another test"));
答案 1 :(得分:13)
尝试三件事:
1。您可以连续执行演出。
onView(...)
.perform(clearText(), typeText("Some Text"));
2。有一个recorded issue on the Espresso page被标记为无效(但仍然是一个很大的错误)。对此的解决方法是在执行之间暂停测试。
public void test01(){
onView(...).perform(clearText(), typeText("Some Text"));
pauseTestFor(500);
onView(...).perform(clearText(), typeText("Some Text"));
}
private void pauseTestFor(long milliseconds) {
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
3。您是否完全确定您的EditText包含文字,"测试"?
答案 2 :(得分:2)
我遇到了类似的问题,并使用containsString matcher和Class.getSimpleName()解决了它。像这样:
onView(withClassName(containsString(PDFViewPagerIVZoom.class.getSimpleName()))).check(matches(isDisplayed()));
您可以看到完整代码here
答案 3 :(得分:2)
使用Espresso在EditText中设置值 像这样简单
onView(withId(R.id.yourIdEditText)).perform(typeText("Your Text"))
答案 4 :(得分:1)
你可以尝试两件事。首先我会尝试使用
onView(withId(<id>).perform...
这样,即使屏幕上显示其他EditText字段,您也始终可以访问EditText字段。
如果这不是一个选项,您可以拆分执行调用。
onView(allOf(withClassName(endsWith("EditText")),withText(is("Test")))).perform(clearText());
onView(withClassName(endsWith("EditText"))).perform(click());
onView(withClassName(endsWith("EditText"))).perform(typeText("Another Test");