前言
很多 app 都会存在 webview 控件,我们使用 appium 在测试 app 难免会遇到 webview,我们可以直接使用 uiautomatorviewer 去硬抓取,当然我们推荐使用 pc 的 chrome 去抓,因为这样更稳定一些
代码进入 webview
getContextHandles 这个方法我们可以发现一般有如下的 context
- NATIVE_APP
- WEBVIEW_com.example.testap
我们需要进入的是第二个
driver.getContextHandles().forEach((context) -> {
if (context.toString().contains("WEBVIEW")) {
driver.context(context.toString());
}
});
在 webview 中找到指定窗口
在 webview 中往往会有多窗口,我们需要切换到指定的窗口我们才能点击按钮,这个切换窗口实际就和 selenium 很类似了,如下代码所示我们可以通过输出窗口中的信息才检查那个窗口才是我们需要的,最后我们发现我们需要的就是第一个窗口
// 用来调试定位所需要点击的控件在 webview 的哪一个窗口中
driver.getWindowHandles().forEach((window) -> {
driver.switchTo().window(window);
System.out.println("==标题==");
System.out.println(driver.getTitle());
System.out.println("==全文==");
System.out.println(driver.getPageSource());
});
// 切换窗口(经测试发现在第一个窗口中)
Set<String> set = driver.getWindowHandles();
Object[] arr = set.toArray();
driver.switchTo().window(arr[0].toString());
退出 webview
退出 webview 实际就是进入 NATIVE_APP,所以和进入 webview 操作一致
driver.getContextHandles().forEach((context) -> {
if (context.toString().contains("NATIVE_APP")) {
driver.context(context.toString());
}
});