Espresso-web检查网页元素不存在

时间:2016-07-29 11:29:53

标签: java android webview android-espresso

我正在使用espresso-web在我的Android应用中测试webview。我想测试一个元素不存在。怎么办呢?

背景:我们有一个网页服务,可以将网页发送到我们的移动网站以及Android应用中的webview。由于Android应用程序拥有自己的actionbar,因此我们不希望在移动设备上的浏览器中打开时显示页面中显示的标题。

对于其他非webviews,我已经能够使用以下代码来测试未显示原生元素。

ViewInteraction logoutView = onView(
            allOf(withId(R.id.account_logout), withText("logout"), isDisplayed()));

logoutView.check(doesNotExist());

我希望以下类似的东西能够起作用

Web.WebInteraction<Void> mobileWebHeader =  onWebView().   
    withElement(findElement(Locator.TAG_NAME, "header"));
mobileWebHeader.check(doesNotExist());

不幸的是它没有,我也没有找到任何替代方案。

提前致谢!

2 个答案:

答案 0 :(得分:1)

在这种情况下,我找不到比使用try / catch更好的解决方案:

try {
    onWebView().withElement(findElement(Locator.TAG_NAME, "header"));
} catch (RuntimeException notExist) {
    //good!
}

答案 1 :(得分:0)

您可以为此使用UIAutomator。假设您要等到显示一个复选框,然后查看其是否已选中。您可以这样做:

    // Get the UIAutomator device object
    UiDevice uiDevice =
            UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    // Get your specific element 
    UiObject checkbox = uiDevice.findObject(new UiSelector()
            .instance(0)
            .className(CheckBox.class));
    // Wait till it exists with whatever time you want
    if(checkbox.waitForExists(1000)) {
       // Do whatever you want with it 
        try {

            if(!checkbox.isChecked())
                onWebView().forceJavascriptEnabled()
                        .withElement(findElement(Locator.ID, "checkboxTOS")) 
                        .perform(webClick()); // Similar to perform(click())

        } catch (UiObjectNotFoundException e) {}

    }

您可以替换

  

CheckBox.class

随心所欲。只需对要使用的页面进行UIAutomator截屏,然后查看其所要显示的内容的类型。

来源:https://medium.com/azimolabs/android-webview-automation-testing-6311df8fe42e