Appium webview元素定位

640 阅读2分钟

一、前言

现在大部分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模式

image.png

注意:appium里的chromedriver的版本需要和手机内核版本号一致

浏览器访问:chrome://inspect/#devices可以查询到手机微信使用的内核版本号: image.png 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'}

image.png