appium测试中,APP中有时候有H5页面,如何对其中的WebView进行测试;这里以模拟器中APIDemo中的例子做演示,在APIDemo->Views->WebView中选择点击WebView元素
第一种方法:如果有AccessibilityId就可以直接根据其来获取
driver.findElementByAccessibilityId("Hello World! - 1").click();
第二种方法:利用chromedriver和chrome的DevTool来定位元素
-
1、下载手机chrome对应版本的Chromedriver并设置capabilitiy-chromedriverExecutableDir的chromedriver的绝对路径,否则可能会报错
An unknown server-side error occurred while processing the command. Original error: unknown error: Chrome version must be >= 55.0.2883.0
版本对应下载地址:https://github.com/appium/appium/blob/4fd9758c3fefdb83be3ec0cc96128739dce8092d/docs/en/writing-running-appium/web/chromedriver.md
capabilitiy设置:
capabilities.setCapability("chromedriverExecutableDir","D:\\QinZhen\\TestDev\\chromedrivers\\");
- 2、在浏览器中输入chrome://inspect,页面将显示设备上已启用调试的 WebView 列表。
- 3、点击inspect开始调试想要调试的 WebView
注:真机测试的话必须从你的APP中启用 WebView 调试。要启用 WebView 调试,请在 WebView 类上调用静态方法 setWebContentsDebuggingEnabled。(很多小伙伴可能会问具体到底要怎么启用?这个需要找研发配合,让研发在代码中打开调试功能才行)。而模拟器中是默认开启的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
- 4、切换至WebView需要context信息,可以用getContextHandles循环打印的方式,在执行过程中获取
for (Object c : driver.getContextHandles()){
System.out.println(c.toString());
}
Thread.sleep(3000);
for (Object c : driver.getContextHandles()){
System.out.println(c.toString());
}
- 5、通过driver.context()完成WebView 的切换,再通过CSS进行页面元素的定位操作
//开始往webview里面进行切换
driver.context("WEBVIEW_com.example.android.apis");
//切换完成后可以用css进行定位
driver.findElementByCssSelector("body > a").click();