Hybrid Mobile App

萝らか妹 提交于 2020-03-03 11:39:30

定义

可以理解为通过 Web 网络技术(如 HTML,CSS 和 JavaScript)与 Native 相结合的混合移动应用程序。H5主要用于界面的编写,比如按钮、单选框以及下拉框等; CSS3用于对界面细节化的修饰,设置不同的样式;JS实现数据交互。Native与HTML相比,性能稳定、交互流畅,可以调用本地硬件和访问本地资源,但是开发和维护成本高,发布周期长。而HTML有着跨平台,开发成本第,更新快等有点。

现在很多app都是由原生页面(native)和webview页面(H5)组成,在自动化测试中需要判断页面是native还是webview。

Hybrid 测试流程

  1. 进入的页面具有webview
  2. 使用uiautomatorviewer工具或contexts方法进行判断存在webview
  3. 使用context方法切换进webview
  4. 定位,操作
  5. 再次使用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

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!