使用Appium从本机Android应用程序切换到浏览器

时间:2016-08-31 07:44:15

标签: selenium selenium-webdriver webview appium selenium-chromedriver

我试图从原生应用程序处理打开的浏览器。

我有一个原生的Android应用程序。当我点击它上面的链接时,它会打开一个浏览器。我试图切换到该浏览器但无法执行此操作。我的代码块是:

Set<String> contextNames = ((AppiumDriver) webDriver).getContextHandles();
    for (String contextName : contextNames) {
        if (contextName.contains("android.browser")) {
            ((AppiumDriver) webDriver).context(contextName);
        }
    }

我调试了一些(进一步的问题) 我的应用程序包含所有页面的vebview。这是我在任何页面上检查getContextHandles()时得到的结果:

0 = "NATIVE_APP"
1 = "WEBVIEW_com.dmall.app"

如果我将上下文切换到webview和getPageSource(),我看到有一个空视图。     html xmlns =&#34; http://www.w3.org/1999/xhtml"&gt; head&gt; / head&gt; body&gt; iframe name =&#34; chromedriver dummy frame&#34; SRC =&#34;关于:空白&#34;&GT; / iframe中&GT; /体&GT;

(由于此页面接受了html,我删除了一些字符)

我再次启动测试,点击打开浏览器的链接并检查getContextHandles()后,我看到了

0 = "NATIVE_APP"
1 = "WEBVIEW_com.dmall.app"
2 = "WEBVIEW_com.android.browser"

一切看起来应该是,对吗?

然后我做:      ((AppiumDriver)webDriver)。content(WEBVIEW_com.android.browser);

当我检查页面源时,我看到相同的空webview html xmlns =&#34; http://www.w3.org/1999/xhtml"&gt;

顺便说一句,在此之后我无法切换到其他网页视图,它说: &#34;处理命令时发生未知的服务器端错误。原始错误:我们已经运行了一个chromedriver实例(警告:服务器没有提供任何堆栈跟踪信息) 命令持续时间或超时:134毫秒&#34; 我想这是正常的

那么,我怎样才能切换到浏览器,任何想法,解决方案,问题,头脑风暴,任何事情都有用。

我的能力在这里:

    DesiredCapabilities capability = DesiredCapabilities.android();
    capability.setCapability(MobileCapabilityType.APP, "http://172.20.0.196:8088/android/mfandroid-debug.apk");
    capability.setCapability(MobileCapabilityType.DEVICE_NAME, "AndroidEmulator" + RandomStringUtils.randomNumeric(3));
    capability.setCapability(MobileCapabilityType.PLATFORM, "Android");
    capability.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.1");
    capability.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 3000);
    capability.setCapability("autoAcceptAlerts", "true");
    capability.setCapability("sendKeyStrategy", "setValue");

由于

1 个答案:

答案 0 :(得分:0)

我之前遇到过这个问题所以我认为我是回答这个问题的合适人选。

您只能切换到测试[AUT]下的应用的webView,而不能切换到任何其他应用的webView 。这意味着您正在测试的应用 app1 ,并且您想要切换到 app2 的webView。

要切换到app2的webView,您需要在 app1 上执行某些操作后,在运行时更改应用功能。我建议你这样做:

  1. 点击第一个原生应用中的链接后关闭驱动程序(我希望点击链接后会在app2中打开)。
  2. 使用app2的新应用功能重新初始化驱动程序。
  3. 现在,您应该可以切换到app2(浏览器)的webView。