我试图从原生应用程序处理打开的浏览器。
我有一个原生的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");
由于
答案 0 :(得分:0)
我之前遇到过这个问题所以我认为我是回答这个问题的合适人选。
您只能切换到测试[AUT]下的应用的webView,而不能切换到任何其他应用的webView 。这意味着您正在测试的应用 app1 ,并且您想要切换到 app2 的webView。
要切换到app2的webView,您需要在 app1 上执行某些操作后,在运行时更改应用功能。我建议你这样做: