定义
可以理解为通过 Web 网络技术(如 HTML,CSS 和 JavaScript)与 Native 相结合的混合移动应用程序。H5主要用于界面的编写,比如按钮、单选框以及下拉框等; CSS3用于对界面细节化的修饰,设置不同的样式;JS实现数据交互。Native与HTML相比,性能稳定、交互流畅,可以调用本地硬件和访问本地资源,但是开发和维护成本高,发布周期长。而HTML有着跨平台,开发成本第,更新快等有点。
现在很多app都是由原生页面(native)和webview页面(H5)组成,在自动化测试中需要判断页面是native还是webview。
Hybrid 测试流程
- 进入的页面具有webview
- 使用uiautomatorviewer工具或contexts方法进行判断存在webview
- 使用context方法切换进webview
- 定位,操作
- 再次使用context方法返回native
webview与native的判断
1、uiautomatorviewer中判断
在UI Automator Viewer中,查看结构,如果节点的class 是android.webkit.WebView 则可判断为 H5页面
2、通过contexts方法判断
driver.contexts
# ['NATIVE_APP', 'WEBVIEW_com.tencent.xxx']
contexts打印结果为:['NATIVE_APP', 'WEBVIEW_com.tencent.xxx']
NATIVE_APP则表示为app原生页面。
webview_com.XXXX 表示为 webview 页面
webview 操作
由于 native 和 webview 是两种不同页面,所以要在native中操作webview需要先切换到webview页面,切换方法:
由于driver.contexts返回的是一个列表,当然可以使用index获取webview
driver.switch_to.context(driver.contexts[1])
在webview中操作完成后,需要切换到NATIVE_APP继续操作。可以使用driver.contexts返回值的index=0操作,或者直接使用NATIVE_APP进行操作
driver.switch_to.context(driver.contexts[0]) 或 driver.switch_to.context(“NATIVE_APP”)
错误一解决:
出现:Original error: No Chromedriver found that can automate Chrome ‘80.0.3987.122’表示浏览器版本与驱动版本不匹配
解决方法:下载匹配的chrome浏览器版本与驱动,手机与PC端chrome的版本最后一致
chrome driver 下载地址:https://npm.taobao.org/mirrors/chromedriver
chrome driver下载后存放在 ~\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win 下
或者:在脚本的caps中添加driver:
caps["chromedriverExecutable"] = r"xxxxxxxxxx\projectAutoTest\chromedriver.exe"
或者:
caps["chromedriverExecutableDir"] = r"xxxxxxxxxx\projectAutoTest\"
错误二解决:
使用contexts无法获取webview
1、android4.4以上需要开启webView的远程调试开关
2、测试中开启debug