定義
可以了解為通過 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