私は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
の前にマッチャーが再実行され、2番目のアクションの前に失敗すると仮定します。 。これは理にかなっていますが、Espressoを使用してEditText
を更新する方法に関して多少混乱しています。どうすればいいですか?
このシナリオではリソースIDなどを使用できないため、上記の組み合わせを使用して正しいビューを識別する必要があることに注意してください。
replaceText
メソッドを使用できます。
onView(allOf(withClassName(endsWith("EditText")), withText(is("Test"))))
.perform(replaceText("Another test"));
試すべき3つのこと:
1。連続して実行を実行できます。
onView(...)
.perform(clearText(), typeText("Some Text"));
2。Espressoページに記録された問題 があり、これは無効とマークされました(しかし、それでも非常にバグです)。これを回避するには、実行中のテストを一時停止します。
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に「Test」というテキストが含まれていると確信していますか?
私は同様の問題を抱えていて、containsStringマッチャーとClass.getSimpleName()を使用してそれを解決しました。このような:
onView(withClassName(containsString(PDFViewPagerIVZoom.class.getSimpleName()))).check(matches(isDisplayed()));
完全なコードを見ることができます こちら
2つのことを試すことができます。最初に私は使用しようとします
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");