APP混合原生和H5页面中,appium 与X5内核那些事

新版本提测,开发说这个版本新增了一个研发需求“APP浏览器内核改成X5”,what?好吧,你们说了算。

照常对新版本跑起自动化,放那里静静的跑吧。

一段时间后看看报告,what's up,webview相关的用例怎么都失败了。难道是因为改了内核元素定位都变了。

重新使用uiautomatorviewer定位一次,元素定位不到,使用appium inspecto定位不到。。。一脸懵

换成weditor试试,定位到了,但元素定位和原来的一样啊,啥情况?

于是找到了万能的google粑粑,出现了一堆回答,果然是X5内核的问题。

----------------------------华丽分割线----------------------------

解决办法,自己总结了一下

因为是APP使用的内核是X5,所以下面的第一步我直接忽略了(如果是微信小程序的话,还是有用的)

前提:需要开发童鞋开启APP的webview功能

开启方式

在app中配置如下代码(在WebView类中调用静态方法setWebContentsDebuggingEnabled):

1
2
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {  
WebView.setWebContentsDebuggingEnabled(true);

步骤一:如何打开x5内核调试开关?

  • 在微信任意聊天窗口输入 debugx5.qq.com
  • 打开页面勾选打开TBS内核Inspector调试功能
  • 重启后自动生效

步骤二:查看当前webview页面元素的

  • 进入要定位的页面,用chrome浏览器访问chrome://inspect/#devices(如果没有出现,需要翻墙),可以看到包含该com.tencent.mm 的几个进程,括号中标记的数字则代表当前安卓系统的chrome版本号,找到对应的页面,点击inspect即可查看该页面的元素
  • 可以通过腾讯TBS调试工具,去下载安装,根据TBS工具提示操作即可(没有实际操作)

步骤三:元素定位

  • F12开发者工具,定位具体元素,右击copy-copy xpath ,就可以获得对应元素的xpath路径了。

步骤四:脚本修改

  (androidPackage和androidProcess对应APP的包名,一般情况下两者是一样的)    

"recreateChromeDriverSessions" = True
"chromeOptions"= {
            "androidPackage": "com.changyinshow", "androidProcess": "com.changyinshow"
        }
  • 在元素定位前加上

print(driver.contexts)获得上下文,一般返回一个list里面会包含webview。例如返回:['NATIVE_APP','WEBVIEW_com.changyinshow'],其中WEBVIEW_com.changyinshow就是你要切到的webview

driver._switch_to.context("WEBVIEW_com.changyinshow") 切换到对应的webview

  • 加上上面的代码后,继续后续元素操作即可

特别说明:

APP浏览器内核都是基于google的,所有的其他内核都是google的二次开发版本,所以需要对应你的appium的chromedriver和chrome的版本

appium运行日志可以看到APP内的chrome版本,用chrome浏览器访问chrome://inspect/#devices也能看到chrome的版本号

appium的chromedriver和chrome对应的版本关系可以在chromedriver.js文件中查看

 (不清楚appium的安装路径,可以通过 which appium查询路径,或者通过locate Chromedriver.js 查找响应文件路径)

chromedriver下载链接:

https://chromedriver.storage.googleapis.com/index.html

http://npm.taobao.org/mirrors/chromedriver/

下载后解压,放到appium安装路径的chromedriver路径下(我的mac安装路径)

/Users/a/.nvm/versions/node/v8.11.0/lib/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac

补漏:为什么要切换都webview

  • 可以理解与selenium里的iframe类似
  • 在右边定位里有明确的表示是 WebView
  • 点击一个链接后,有进度条加载后页面一般都是Webview.  也就是说,是一个H5页面了
  • UI Automator 不能定位到里面的元素

参考文档

https://zhuanlan.zhihu.com/p/81588023

https://www.cnblogs.com/longronglang/p/10276713.html

微信小程序的自动化问题可参考

https://www.cnblogs.com/longronglang/p/10276713.html

猜你喜欢

转载自www.cnblogs.com/wx2017/p/12170874.html