質問

Android用のGoogle EspressoでUIテストを書いています。また、TextViewテキストのアサート方法に停止しています。そのコンテンツはWebサービスから非同期的にロードされます。私の現在のコードは:

です
public class MyTest extends BaseTestCase<MyActivity>{
    public void setUp() throws Exception {
        // (1) Tell the activity to load 'element-to-be-loaded' from webservice
        this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("data://data/element-to-be-loaded")));
        getActivity();

        super.setUp();
    }

    public void testClickOnReviews(){
        // (2) Check the element is loaded and its name is displayed
        Espresso
            .onView(ViewMatchers.withId(R.id.element_name))
            .check(ViewAssertions.matches(ViewMatchers.withText("My Name")));

        // (3) Click on the details box
        Espresso
            .onView(ViewMatchers.withId(R.id.details_box))
            .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
            .perform(ViewActions.click());

        // (4) Wait for the details screen to open
        Espresso
            .onView(ViewMatchers.withId(R.id.review_box));

        // Go back to element screen
        Espresso.pressBack();
    }
}
.

on(1)、私のアクティビティにWebサービスから要素をロードするように通知します。(2)、私はそのコンテンツを主張するビューを待っています。これは、WebServiceがアプリに回答する前に実行されるため、テストが失敗する部分です。

特定のデータが画面に表示されるのを待つようにEspressoに言うことができますか?それとも、そのようなテストを書くために別の方法で考えるべきですか?

役に立ちましたか?

解決

WebサービスのIDLingResourceをESPRESSOで登録することで、このケースを処理できます。この書き込み: https://developer.android.com /トレーニング/テスト/ espresso / idelling-resource.html

最も可能性の高い、あなたは countingIdlingResource (何かがアイドル状態のときに追跡するために単純なカウンタを使用します)。このサンプルテストこれがどのように行うことができるかを示しています。

他のヒント

あなたがESPRESSOでUiautomatorを使って悩まされていないのなら、あなたはあなたの手順4でこのようなことをすることができます。

UiObject object = mDevice.findObject(new UiSelector().resourceId(packageName + ":id/" + "review_box"));
object.waitForExists(5000);
.

https:// developer。android.com/reference/android/support/test/uiautomator/uiobject.html#waitforexists(Long)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top