一、前言
现在大部分APP是混合式的native+webview,对于 native部分可以用inspector抓取定位元素,但是webview元素就无法识别。
Webview 是一个基于webkit的引擎,可以解析DOM 元素,展示html页面的控件,它和浏览器展示页面的原理是相同的,所以可以把它当做浏览器看待。
webview使用的是手机自带的浏览器内核,对于安卓系统4.4.以下使用的Webkit内核,4.4以上用的chrome内核。x5内核统一基于chrome内核
二、环境准备
webview自动化测试前需要app开启webview debug模式,微信可以通过输入:debugx5.qq.com开启debug模式
注意:appium里的chromedriver的版本需要和手机内核版本号一致
浏览器访问:chrome://inspect/#devices可以查询到手机微信使用的内核版本号: appium里的chromedriver路径一般在:C:\Users\Administrator\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver
ChromeDriver版本下载:chromedriver.storage.googleapis.com/index.html
三、定位webview里网页元素
1.被测应用webview不依赖app
1)复制url,浏览器打开
2)f12进入开发模式
3)选择手机模式
2.被测应用webview与原生APP有交互,依赖app
1)chrome浏览器远程调试(手机与电脑连接,电脑能翻墙)
2)打开app,停留在需要测试的webview页面
3)浏览器中输入chrome://inspect/#devices
4)点击对应app的inspect
四、webview自动化测试
1.跳转到webview的context(即当前对应在程序中所处的一个环境、类似selenium定位网页中的iframe,native中页面的activity)
# 查看当前所有的contexts
driver.contexts //一般结果是 ['NATIVE_APP', 'WEBVIEW_xx.xx.xxx']
# 切换到webview
driver.switch_to.context('WEBVIEW_xx.xx.xxx')
# 切换回Navtive
driver.switch_to.context('NATIVE_APP')
# 查看当前context
print(driver.current_context)
2.webview的context的获取方法,拿微信公众号里的H5页面举例,com.tencent.mm:toolsmp就是当前H5页面的context,注意微信的webview跟一般的不同,启动参数中需要设置
desired_caps['chromeOptions'] = {'androidProcess': 'com.tencent.mm:toolsmp'}