如何使用Espresso访问外部网站上的元素

时间:2017-07-28 17:18:53

标签: android android-espresso android-uiautomator chrome-custom-tabs android-espresso-recorder

使用espresso,我们点击一​​个登录按钮,启动外部网站(Chrome自定义标签),您可以登录,然后重定向回我们的Android应用程序。

Espresso有没有办法: 1)验证正在启动的URL是否正确 2)访问网站上的元素,以便我可以输入登录信息并继续登录

enter image description here

当我尝试在Espresso Launch Navigator中查看它时,页面上没有显示任何内容,如果我尝试录制,则不会在页面上输入任何内容。

这是我到目前为止(它在Kotlin(而不是Java)): enter image description here

以下是显示的错误: enter image description here

启动我的应用程序,选择登录按钮,打开网站但无法访问这些元素。

我也尝试过:

enter image description here

更新:这是使用Chrome自定义标签(不是网络视图),因此Espresso Web无法使用。

2 个答案:

答案 0 :(得分:2)

更新

您无法使用Espresso来测试Chrome自定义标签。 Espresso适用于测试您自己的应用程序。

要测试Chrome标签页,您可以使用UI Automator,但您可能不希望这样做。

  

1)验证是否正在启动正确的URL

单元测试就足够了。您只需确保传递给Chrome自定义标签库的网址是正确的。您确保您的代码正常工作。接下来发生的事情由库处理,测试属于那里。

  

2)访问网站上的元素,以便我可以输入登录信息   信息并继续登录

您正在测试一个简单的网页。为什么你想要启动模拟器的额外开销?也许Selenium或任何酷的网络都可以在这里工作(不是网络开发)?

您可以使用Espresso Web

以下是一个示例测试:

@Test
public void typeTextInInput_clickButton_SubmitsForm() {
    // Lazily launch the Activity with a custom start Intent per test.
    mActivityRule.launchActivity(withWebFormIntent());

    // Selects the WebView in your layout. If you have multiple WebView objects,
    // you can also use a matcher to select a given WebView,
    // onWebView(withId(R.id.web_view)).
    onWebView()
        // Find the input element by ID.
        .withElement(findElement(Locator.ID, "text_input"))
        // Clear previous input.
        .perform(clearElement())
        // Enter text into the input element.
        .perform(DriverAtoms.webKeys(MACCHIATO))
        // Find the submit button.
        .withElement(findElement(Locator.ID, "submitBtn"))
        // Simulate a click using JavaScript.
        .perform(webClick())
        // Find the response element by ID.
        .withElement(findElement(Locator.ID, "response"))
        // Verify that the response page contains the entered text.
        .check(webMatches(getText(), containsString(MACCHIATO)));
}

答案 1 :(得分:1)

我能够使用Espresso和UI Automator解决此问题。你可以将两者结合起来。选择我使用Espresso的登录按钮(以及应用程序的其余部分,我将使用Espresso)。要处理用于登录的Chrome自定义标签,我使用了UIAutomator:

enter image description here