微信小程序做爲如今流行的一種應用載體,不少小夥伴都有對其作自動化測試的需求,因爲騰訊系 QQ、微信等是基於騰訊自研 X5 內核,不是谷歌原生 webview,因此調試會有些許差別(如今不少 app 產品也開始流行採用 X5 內核做爲其內嵌 Web 瀏覽服務)。java
須要注意的是 X5 內核只支持手機,模擬器是不支持的。node
咱們的教程以最主流的 Appium 自動化技術爲例講解如何對微信小程序作自動化測試。android
聊天窗口輸入以下兩個 URL:web
http://debugmm.qq.com/?forcex5=truechrome
X5內核調試專用頁npm
Chrome 自帶的 inspect 工具識別小程序/內嵌 Web 頁面須要訪問外網,不少小夥伴不具體這樣的條件,因此推薦你們安裝 UC 開發者調試工具,這樣不用 FQ 也可識別到小程序的頁面元素信息小程序
下載地址:https://dev.ucweb.com/微信小程序
進入微信主頁面-> 向下滑動展開小程序列表-> 點擊對應小程序(這裏以檸檬班軟件測試爲例)瀏覽器
step3:確認微信小程序對應的進程名
微信
微信有不少的進程,咱們要肯定當前小程序是位於哪一個進程中(當前查詢到的是 com.tencent.mm:appbrand0):
這裏須要注意:進行該操做的時候最好重啓微信(在後臺清理應用從新點擊啓動),目的是爲了保證被測小程序在微信後臺只有一個,跟代碼執行過程保持同步。
小程序本質上仍是 Web 頁面,咱們能夠經過 chromeDriver 驅動小程序頁面執行,小程序由於使用的 X5 內核是通過騰訊二次開發過以後的,因此 chromeDriver 驅動與 webview 版本匹配並不嚴格按照官方 Appium 說明的匹配規則,這裏試驗了幾個版本的 chromeDriver,發現 V2.40 版本的 chromeDriver 是比較合適的:
下載地址:https://npm.taobao.org/mirrors/chromedriver
下載完畢後解壓,將 chromeDriver 替換到 Appium 的自帶 chromeDriver 所在路徑:
Appium.exe所在路徑\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
這裏以 Java 語言爲例,咱們使用 Maven 項目管理工具在項目中引入 Appium 的客戶端庫
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.0.0</version></dependency>
Appium 啓動 App 的常規代碼就再也不贅述了,這裏須要注意的是 Appium 啓動微信作小程序自動化測試除了常規的配置如:deviceName、platformName、appPackage、appActivity 以外,還需添加以下配置參數:
// 支持X5內核應用自動化配置desiredCapabilities.setCapability("recreateChromeDriverSessions", true);ChromeOptions options = new ChromeOptions();//com.tencent.mm:appbrand0爲前面經過adb命令查詢到的小程序進程名,同以前保持一致options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options);// 初始化會默認將chrome瀏覽器打開,須要將Browser置爲空desiredCapabilities.setBrowserName("");
進入到小程序能夠經過常規方式:
啓動微信進入到主頁-> 下滑展開小程序列表-> 點擊對應小程序
進入到小程序以後咱們須要切換 context:
driver.context("WEBVIEW_com.tencent.mm:appbrand0");
劃重點!!!切換 context 以後若是直接定位元素會發現元素是定位不到了,這是由於小程序打開以後會存在三個 Web 窗口:
728 x 309828 x 352
因此咱們這裏必定要記得切換(經過 handle 句柄)
//須要找到正確的web窗口--騰訊課堂檸檬班軟件測試(切換句柄)//獲取全部的窗口句柄Set<String> allHandles = driver.getWindowHandles();for (String handle:allHandles){
//經過窗口的標題來判斷 if(driver.getTitle().equals("騰訊課堂檸檬班軟件測試")){
break;
}else {
//切換句柄 driver.switchTo().window(handle);
}}
以後咱們就能夠經過常規的方式去定位/操做元素了:
driver.findElement(By.xpath("//a[contains(text(),\"課程\")]")).click();
微信小程序與普通的 Hybrid 應用作自動化測試存在不少的區別,不論是 webview 調試開關的開啓方式,仍是小程序須要的特殊啓動參數配置,以及 chromeDriver 與小程序 webview 的版本匹配,種種因素致使微信小程序執行並非很穩定,並且切換 webview 速度也比較慢。隨着微信版本的迭代更新,可能一些配置會失效。
目前微信本身有發佈了支持小程序自動化測試的框架 Minium,但坑比較多。第三方的一些圖像識別框架也能夠支持小程序的自動化測試,好比網易的 Airtest,上手簡單,但準確性和穩定性不高。總的來講目前市面上並無一款足夠好用、足夠穩定的微信小程序自動化測試的框架/工具。固然,隨着後續技術的升級,應該會有不少的優秀工具涌現出來。
PS:想要完整代碼的小夥伴能夠私信哦