有没有办法用 Espresso 测试 Chrome 自定义标签?

Posted

技术标签:

【中文标题】有没有办法用 Espresso 测试 Chrome 自定义标签?【英文标题】:Is there a way to test Chrome Custom Tabs with Espresso? 【发布时间】:2017-06-03 11:02:50 【问题描述】:

这是代码的存根。

点击ListView 上的数据项。按设计工作并打开 Chrome 自定义标签

onData(anything()).inAdapterView(withId(R.id.listView))
                                       .atPosition(0).perform(click());

Pause(5000);
Espresso.pressBack();

似乎无法评估选项卡中的任何内容,甚至无法点击设备后退按钮。 收到此错误

Error : android.support.test.espresso.NoActivityResumedException: No 
activities  in stage RESUMED.

您是否忘记启动活动。 (test.getActivity() 或类似的)?

【问题讨论】:

请编辑您的帖子,以便无需猜测即可理解。并考虑发布minimal reproducible example - 这有助于了解您的问题! 我也遇到了同样的问题 这里也是同样的问题。 【参考方案1】:

您可以使用 UIAutomator (https://developer.android.com/training/testing/ui-automator.html)。您实际上可以同时使用 Espresso 和 UIAutomator。有关更多信息,请参阅以下帖子中接受的答案: How to access elements on external website using Espresso

【讨论】:

【参考方案2】:

您可以阻止打开自定义选项卡,然后断言您启动的意图是否正确:

fun stubWebView(uri: String) 
    Intents.intending(allOf(IntentMatchers.hasAction(Intent.ACTION_VIEW), IntentMatchers.hasData(uri)))
        .respondWith(Instrumentation.ActivityResult(Activity.RESULT_OK, null))


fun isNavigatedToWebView(uri: String) 
    Intents.intended(allOf(IntentMatchers.hasAction(Intent.ACTION_VIEW), IntentMatchers.hasData(uri)))

这样你就可以在你的测试中避免Espresso.pressBack()

请注意,由于这些使用 Espresso Intent,您需要使用 IntentsTestRule 或使用 Intents.init 包装它们并像这样发布

fun intents(func: () -> Unit) 
    Intents.init()

    try 
        func()
     finally 
        Intents.release()
    


intents 
    stubWebView(uri = "https://www.example.com")
    doSomethingSuchAsClickingAButton()
    isNavigatedToWebView(uri = "https://www.example.com")

【讨论】:

【参考方案3】:

在 Mustafa answer 之后提高可读性的建议:

intents
    Intents.intended(
        CoreMatchers.allOf(
            IntentMatchers.hasAction(Intent.ACTION_VIEW),
            IntentMatchers.hasPackage("com.android.chrome")
        )

    )

【讨论】:

以上是关于有没有办法用 Espresso 测试 Chrome 自定义标签?的主要内容,如果未能解决你的问题,请参考以下文章

Espresso - 点击对话框的按钮

从 Maps Intent espresso 回到活动 - UI 测试

在 Android Espresso UI 测试中从 Facebook 注销

Espresso UI 测试截图 - 没有写入外部存储权限的应用程序

用 Espresso 检查 TextView 的 CompundDrawable

如何使用 Espresso 测试片段是不是可见