Espresso Testing call view button click waiting after call api response data progressDialog dimission

前端 未结 2 700
感动是毒
感动是毒 2021-01-28 16:40

I develop automation testing using via espresso library. Sometime I ever got error message \"Could not launch intent Intent\" when running test is make long time I call view b

相关标签:
2条回答
  • 2021-01-28 16:57

    view button click Waiting for progressdialog dimission using Thread.sleep(4000) sometime is going correct but sometime is still show like the question error "Could not launch intent Intent". I would like to know which ideas better than my answer.

    ProgressDialog Utils Class the method
    
    public void showProgressDialog() {
        if (mProgressDialog == null) {
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setCancelable(false);
            mProgressDialog.setMessage("Loading...");
        }
    
        mProgressDialog.show();
    }
    
    public void hideProgressDialog() {
        if (mProgressDialog != null && mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
        }
    }
    

    Testing

    @Test
      public void test1() throws InterruptedException {
        //onView(withText("Loading")).check(matches(isDisplayed()));
        //    onView(allOf(isAssignableFrom(ProgressBar.class),withText("Loading..."))).check(matches(isDisplayed()));
    
        //onView(withId(R.id.btnWorkingDate)).perform(click());
      //  Intents.init();
    
        // override progress bar infinite animation with a simple image
    
        //onView(withText("Loading...")).check(matches(isDisplayed()));
    
    
      //  onView(withText("Loading...")).check(matches(not((isDisplayed()))));
    
        //onView(withText("Loading...")).check(matches(isDisplayed()));
       // onView(withText("Loading...")).check(matches(not(isDisplayed())));
       // assertTrue(progressBar().exists());
    
        try {
            onView(allOf(withId(R.id.btnWorkingDate), withText("OPEN DAY"))).check(matches(isDisplayed())).perform(click(),closeSoftKeyboard());
        }catch (NoMatchingViewException e) {
            // View is not in hierarchy
        }
        Thread.sleep(4000);
     /*   onView(allOf(withId(R.id.btnWorkingTime),withText("START SHIFT"), isDisplayed())).perform(click(),closeSoftKeyboard());
    
        onView(allOf(withId(R.id.btnWorkingTime),withText("END SHIFT"), isDisplayed())).perform(click(),closeSoftKeyboard());*/
     //   Intents.release();
       // intended(hasComponent(DashboardActivity.class.getName()));
        //assertNotNull(view);
        //onView(withId(R.id.btnWorkingDate)).perform(click());
    }
    
    
    @Test
    public void test2() throws InterruptedException {
    
       // onView(allOf(withId(R.id.btnWorkingTime),withText("START SHIFT"), isDisplayed())).perform(click(),closeSoftKeyboard());
    
      //  assertTrue(progressBar().exists());
    
        try {
            onView(allOf(withId(R.id.btnWorkingTime), withText("START SHIFT"))).check(matches(isDisplayed())).perform(click(),closeSoftKeyboard());
        }catch (NoMatchingViewException e) {
            // View is not in hierarchy
        }
    
        Thread.sleep(4000);
    }
    
    @Test
    public void test3() throws InterruptedException {
    
        try {
            onView(allOf(withId(R.id.btnWorkingTime), withText("END SHIFT"))).check(matches(isDisplayed())).perform(click(),closeSoftKeyboard());
        }catch (NoMatchingViewException e) {
            // View is not in hierarchy
        }
        Thread.sleep(5000);
    }
    
    0 讨论(0)
  • 2021-01-28 17:18

    This probably happens when there is a progress dialog after test finishes. So your next test can't launch itself when progress dialog is active. You can prevent this by waiting progress dialog to end.

    onView(allOf(withId(R.id.btnWorkingDate), withText("OPEN DAY"))).check(matches(isDisplayed())).perform(click(),closeSoftKeyboard());
    long timeout = 0L;
    while(timeout < YOUR_DESIRED_TIMEOUT) {
    try {
        onView(withId(anIdInNextScreenAfterProgressDialog)).check(matches(isDisplayed));
        break;
    } catch (Exception e) {
       Thread.sleep(1000L);
       timeout += 1000L
    }
    

    This will wait until your progress bar disappears since it waits for something in the next page

    0 讨论(0)
提交回复
热议问题