【问题标题】:Espresso test back button while AsyncTask is runningAsyncTask 运行时 Espresso 测试返回按钮
【发布时间】:2016-07-14 14:35:54
【问题描述】:

我正在使用 Espresso 为我的应用程序编写 UI 测试。我想测试一下,如果我在服务器请求正在进行时单击后退按钮,则应用程序必须保持在原处。

这似乎是不可能的,因为 espresso 的架构会在触发某些后台操作(如 AsyncTask)时使测试执行等待。

那么,我该如何测试以下场景:

  • 单击触发 AsyncTask 的按钮
  • 测试当任务运行时我按下返回按钮时,应用程序会停留在那里吗?

有可能吗?

谢谢

【问题讨论】:

    标签: android android-espresso ui-testing


    【解决方案1】:

    这很棘手。使用AsyncTasks,您无法在任务运行时使用 Espresso。 如果您要使用其他东西进行后台工作,Espresso 不会等待,并且测试会在后台工作之前完成。

    一个简单的解决方法是在任务运行时在不使用 Espresso 的情况下“按下”返回按钮。所以,启动任务,调用Activity.onBackPressed(),任务完成后使用Espresso检查Activity是否仍然可见:

    // Start the async task    
    onView(withId(R.id.start_task_button)).perform(click());
    
    // Then "press" the back button (in the ui thread of the app under test)
    mActivityTestRule.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mActivityTestRule.getActivity().onBackPressed();
        }
    });
    
    // Then check that the Activity is still visible
    // (will be performed when the async task has finished)
    onView(withId(R.id.any_view_on_activity)).check(matches(isDisplayed()));
    

    【讨论】:

    • 您好,我正在自动执行此测试,因此它们不会手动运行,因此我无法手动单击按钮。启动任务后调用 Activity.onBackPressed() 将导致不同的行为因为它会在任务之后执行,而当任务完成后返回按钮的行为是不同的
    • 我知道测试是自动化的,你不能自己点击它。当您使用我的答案中的代码时,onBackPressed() 将在 AsyncTask 运行时执行。但如果任务立即完成或在启动后不久完成,则可能会在任务之后调用onBackPressed()。你试过我的解决方案了吗?什么确切不起作用?
    • 我没试过jet,但是因为我在想当你的例子的第一条指令被执行时,测试执行会停在那里,只有在任务完成时才会继续。无论如何,我会试一试
    • 没有测试继续,点击后直接执行runOnUiThread。点击后 Espresso 不会等待。 Espresso 在执行操作之前等待,而不是之后。但是我的示例的最后一条指令将被阻止,直到任务完成(这是预期的)。
    • mActivityTestRule.runOnUiThread 对我不起作用,无论如何它在perform(click()) 之后执行
    【解决方案2】:

    您可以阻止应用程序在按下返回按钮时触发finish()。为此,只需覆盖public void onBackPressed() 而无需调用super.onBackPressed()。就像:

    @Override
    public void onBackPressed() {
      // super.onBackPressed();
    }
    

    另外,如果你在执行任务时显示一个对话框,你可以使用

    myDialog.setCancelable(false);
    myDialog.setCanceledOnTouchOutside(false);
    

    防止按钮被按下。

    问候,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多