什么是WebView
1、混合(Hybrid)应用
一部分是原生界面和代码,而另外一部分是内嵌网页,比如微信、支付宝。内嵌了一个浏览器内核,由浏览器内核实现的。
2、安卓应用中的内嵌的展示网页内容的模块,我们称为WebView
3、需要开发人员修改代码。APP修改编译
黄色高亮部分,意思是打开调试,支持自动化调试,生产环境都是关闭的。
appium自动化webView
切换到webView,类似于selenium中嵌套iframe的切换:
(1)appium中把所有的界面环境称为context
(2)native部分类似于iframe,native的context名字一般为NATIVE_APP
(3)webview部分的context则为WEBVIEW_XXXX[应用app package]
(4)我们怎么查看当前有哪些context呢?
driver.contexts
(5)而显示当前context的则是
driver.current_context
或
context = driver.current_context
(6)先要进入到native里面在进行元素操作。
此时已经从app中进入了百度链接的web页面,接下来的定位xpath都是在web页面上进行的,所以需要转换到web页面,使用语句
self.driver.switch_to.context(‘WEBVIEW_XXXX’)
如果是从App转到web的话()填"WEBVIEW_XXXX",
如果web转到App的话填"NATIVE_APP"
示例代码
time.sleep(3)
#获取所有可以自动化的context,运行结果:['NATIVE_APP','WEBVIEW_com.duodujisaunqi.jcy.wvtest']
print(driver.contexts)
#显示当前的context,运行结果[NATIVE_APP']
print(driver.current_context)
#从APP进入到web页面
driver.switch_to.context("WEBVIEW_com.duodujisaunqi.jcy.wvtest")
#d对元素进行操作
driver.find_element_by_id("index-kw").send_keys("zhongguo")
driver.find_element_by_id("index-bn").click()
#从web页面到app
driver.switch_to.context("NATIVE_APP")
#回到app,才能操作app上的元素
driver.find_element_by_id("com.duodujisaunqi.jcy.wvtest:id/navigation_dashboard").click()
如果运行报以下错:
当前手机浏览器的版本是64.0.3282与webview版本不匹配
前往 https://www.apkmirror.com/apk/google-inc/android-system-webview/ (需要科学上网)
选择最新版本,点击下载,进入下载页面,armeabi版本,点击进去,下载apk,下载之后记录路径,并且修改新的名字,我这里命名为com.google.android.webview_78.apk。
下载完成之后,使用adb安装到手机
在cmd命令下输入adb -r com.google.android.webview_78.apk
webView的内容不依赖所在app
开发人员打开调试开关之后,就可以开始测试。
(1)获取URL
(2)直接使用Chrome浏览器打开对应的网页,使用手机模式。
webView的内容依赖所在app
1、通过chrome的远程调试功能
2、打开Chrome浏览器,地址输入Chrome://inspect(需要科学上网)
可以看到我的app的包名,下面就会显示我内嵌打开的地址,点击inspect,就会进入到查看元素的页面,就可以用之前的方法查看元素了。