如何让浓缩咖啡等待Splash Screen完成然后开始测试

时间:2017-02-07 12:32:46

标签: android android-espresso

您好我必须为我的活动编写一个测试但在此之前Activity SplashActivity必须首先运行2500毫秒。

我的测试班:

@RunWith(AndroidJUnit4.class)
public class GuestActivityTest{

    @Rule
    public ActivityTestRule<GuestActivity> mActivityTestRule = new ActivityTestRule<GuestActivity>(GuestActivity.class, true, false){
        @Override
        protected void afterActivityLaunched() {
            super.afterActivityLaunched();
        }
    };



    @Test
    public void goToMenuActivity() {
        onView(withId(R.id.button_log_in)).perform(typeText("Works"));
        onView(withId(R.id.menu_btn)).perform(click());
    }
}

测试每次都崩溃,因为SplashActivity中的初始化尚未执行。如何让espresso知道Activity已经加载或等待SplashActivity先完成?

5 个答案:

答案 0 :(得分:1)

在测试用例开始时可能会有延迟动作

D:\Programme\Python\Python37
D:\Programme\Python\Python37\Scripts

waitFor函数:

onView(isRoot()).perform(waitFor(5000));

经过测试(是)

答案 1 :(得分:1)

正如Shurov所建议的那样,我认为方法是使用Espresso闲置资源。为此,请先添加依赖项

object EspressoIdlingResource {

    private val CLASS_NAME = "EspressoIdlingResource"

    private const val RESOURCE = "GLOBAL"

   @JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE)

   fun increment() {
        countingIdlingResource.increment()
   }

   fun decrement() {
      if (!countingIdlingResource.isIdleNow) {
         countingIdlingResource.decrement()
      }
   }
}

然后将此类添加到您的项目中

@Before
fun setUp() {
    IdlingRegistry.getInstance().register(EspressoIdlingResource.countingIdlingResource)
}

@After
fun tearDown() {
    IdlingRegistry.getInstance().unregister(EspressoIdlingResource.countingIdlingResource)
}

完成此操作后,在启动启动活动时添加EspressoIdlingResource.increment(),并从其离开时添加EspressoIdlingResource.decreasment()。

然后将其添加到测试类中。

istream&

此后,您的测试应自动等待您的SplashActivity完成。

这是关于主题https://developer.android.com/training/testing/espresso/idling-resource的Google页面。

答案 2 :(得分:0)

我还不擅长,因此不能建议使用现成的代码,但请尝试寻找Idling Resource,等待启动画面结束

答案 3 :(得分:0)

创建一个可以将splashScreen的角色和该活动的角色相结合的活动

答案 4 :(得分:-1)

试试这个:

休眠线程以匹配应用程序的执行延迟。

@Test
public void goToMenuActivity() {
    try {
    Thread.sleep(60000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    onView(withId(R.id.button_log_in)).perform(typeText("Works"));
    onView(withId(R.id.menu_btn)).perform(click());
}