【发布时间】: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