【问题标题】:Switching to browser from a native android app with Appium使用 Appium 从原生 android 应用程序切换到浏览器
【发布时间】:2017-01-07 16:33:03
【问题描述】:

我正在尝试从本机应用程序处理打开的浏览器。

我有一个原生安卓应用。当我点击它上面的链接时,它会打开一个浏览器。我正在尝试切换到该浏览器,但无法做到。我的代码块是:

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="http://www.w3.org/1999/xhtml">head>/head>body>iframe name="chromedriver dummy frame" src="about:blank">/iframe>/body>

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

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

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

一切看起来都应该是这样,对吧?

然后我在做: ((AppiumDriver) webDriver).context(WEBVIEW_com.android.browser);

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

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

那么,我该如何切换到浏览器,任何想法、解决方案、问题、头脑风暴,任何东西都可能有用。

我的能力在这里:

    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");

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答,我会在星期一试试这个。
    猜你喜欢
    • 2018-09-06
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2012-04-10
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多