一、Appium Hybrid混合应用中Native和WebView之间进行切换
1、由原生切换至WEBVIEW操作
Set contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
// 用于返回被测app是NATIVE_APP还是WEBVIEW,如果两者都有就是混合型App
System.out.println(contextName);
if (contextName.contains("WEBVIEW")) {
driver.context("WEBVIEW");
}
}
2、切换至NATIVE_APP操作
driver.context("NATIVE_APP");
二、问题记录:无法切换Webview的原因及处理方法
问题1、 contexts只能获取NATIVE_APP,无法获取WEBVIEW
【解决方案】
需要开启webview远程调试功能, Android 4.4以上,需要在应用代码中增加一下代码段开启该功能 (可由开发人员增加后重新打包给测试):
修改Activity extends CordovaActivity,设置setWebContentsDebuggingEnabled(true);
问题2、已经能够获取到WEBVIEW,但是无法切换到WEBVIEW
用appium切换webview的时候报chrome和chromedriver版本的问题:session not created exception: Chrome version must be >= 58.0.3029.0
(Driver info: chromedriver=2.30.477700 )
【解决方案】
1.找到webview的chrome版本号了,接下来下载对应的chromedriver驱动包就可以了,57的webview对应2.28驱动
下载地址:chromedriver版本下载
2.chromedriver下载后应该放哪呢?首先找到报错里面的chromedriver=2.30.477700 版本是从哪里来的,替换掉就可以了。查找路径:\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
找到后双击就能显示版本号,chromedriver=2.30.477700也就是报错里面看到的
备注:版本不一样,路径可能不太一样,自己搜索:appium-chromedriver
3.把刚才下载2.28版本的chromedriver.exe替换掉这个2.30版本就可以了
问题3、假如我们在webview1中通过“openLinkNewWindow”在新的activity中打开了webview2,然后通过driver处理webview2的元素时,始终只有原来的webview1做出了响应,那么有可能是driver指向的窗口还是原来的webview1所属的activity,所以我们可能需要重新定位driver指向到新的webview2窗口中
//将driver指向切换到最新的window窗口
String windowName = (String) driver.getWindowHandles().toArray()[driver.getWindowHandles().size() - 1];
driver.switchTo().window(windowName);