appium hybrid app web view

hybrid 混合app,从原生页面切换到h5 web view。本文重点在末尾。

官方示例:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/hybrid.md

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// java
// assuming we have a set of capabilities
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

Set<String> contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
System.out.println(contextNames); //prints out something like NATIVE_APP \n WEBVIEW_1
}
driver.context(contextNames.toArray()[1]); // set context to WEBVIEW_1

//do some web testing
String myText = driver.findElement(By.cssSelector(".green_button")).click();

driver.context("NATIVE_APP");

// do more native testing if we want

driver.quit();

打印获取到的contextNames发现只有一个元素:[‘NATIVE_APP’],没有WEBVIEW_1,无法切换。查资料

For a real device you need to have “setWebContentsDebuggingEnabled” in the web view. Without it the web view is not exposed to automation tools


需要修改app源程序代码:

1
2
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);}

另外有说法是appium web view只支持chrome内核的解析器,非chrome内核的无法识别。

这里有别人的一份总结:https://testerhome.com/topics/10951


【但是】上面这些并没有什么卵用。

实际操作中发现,当页面是web view,driver.getContextHandles() 返回只有NATIVE_APP时,按原生app进行元素识别、操作可行,不用费劲切换。