Android:Espresso不会等到片段或活动显示,因此每次测试都失败

Tho*_*ena 9 testing android automated-tests android-espresso android-uiautomator

我知道围绕这个有很多问题,但我找不到任何可以帮助我的东西:(

我尝试使用Espresso为Android应用程序生成UI-Test.在击败依赖性问题之后(因为某些库在不同版本中被包含两次作为来自其他库的依赖)我仍然无法创建工作测试...

我知道IdlingResource,但正如我所读到的,espresso等待开箱即用,直到主线程和AsyncTaskPool空闲,然后再运行任何测试.

为了与它取得联系,我创建了一个包含两个活动的简单应用程序,一个启动画面和一个主要活动.在启动mainActivity之前,splashscreen包含等待三秒钟的内容

 new Handler().postDelayed(new Runnable() {
   @Override
   public void run() {
     finish();
     Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
     startActivity(intent);
   }
 }, 3000);
Run Code Online (Sandbox Code Playgroud)

我也尝试使用AsyncTask,但似乎没有任何工作正常,因为每个测试都失败了.

该测试仅检查视图上是否显示包含已定义文本的TextView:

onView(withText("DummyText")).check(matches(notNullValue()));
Run Code Online (Sandbox Code Playgroud)

我认为创建一个简单的测试并不困难......

因为我要测试api> = 16我需要浓缩咖啡.仅仅对我来说,我使用uiAutomator检查它(我知道这是为了api> = 18)但是有一些智能逻辑可以等待某些东西显示.....并且完美地工作......

sun*_*er3 6

你的activityRule是什么?因为如果它是SplashScreenActivity,测试将立即启动,如果视图不在启动屏幕上,则onView将失败.尝试直接打开MainActivity,以便测试该视图.我正在使用Espresso一段时间,我知道@Test方法在定义为ActivityTestRule的活动完成加载时启动.

希望这有帮助.

祝好运!

  • 谢谢你的建议!在我将规则的第三个参数声明为'false'后,我得到了它的工作:`@Rule public ActivityTestRule <MainActivity> mMainActivity = new ActivityTestRule <>(SplascreenActivity.class,true,false);`这样做,我可以定义行为例如`doNothing().when(mDeviceService).getDevices();`然后使用`mSplashscreenActivity.launchActivity(null);`手动启动活动.我还用_AsyncTask_改变了_Handler_并且知道测试工作如预期的包含等待,检查等等..... (3认同)
  • @grumpyshoe我也面临同样的问题,在我的应用程序中,我们有一个启动画面,可以自动导航用户登录屏幕,但我的测试不等待导航到登录并开始搜索用户名输入编辑文本.你能帮我么. (2认同)