1 背 景
微信小程序作為現在流行的一種應用載體,很多小伙伴都有對其做自動化測試的需求,由於騰訊系 QQ、微信等是基於騰訊自研 X5 內核,不是谷歌原生 webview,所以調試會有些許差異(現在很多 app 產品也開始流行采用 X5 內核作為其內嵌 Web 瀏覽服務)。
需要注意的是 X5 內核只支持手機,模擬器是不支持的。
我們的教程以最主流的 Appium 自動化技術為例講解如何對微信小程序做自動化測試。
2 准 備 工 作
>>> step1:打開微信小程序 webview 調試開關
聊天窗口輸入如下兩個 URL:
http://debugmm.qq.com/?forcex5=true
http://debugx5.qq.com
在第二個 URL 打開的頁面中勾選:
>>> step2:安裝 UC 開發者工具並識別小程序頁面元素信息
Chrome 自帶的 inspect 工具識別小程序/內嵌 Web 頁面需要訪問外網,很多小伙伴不具體這樣的條件,所以推薦大家安裝 UC 開發者調試工具,這樣不用 FQ 也可識別到小程序的頁面元素信息。
下載地址:https://dev.ucweb.com/
安裝完之后如果有小伙伴發現識別不了可進行如下設置:
進入微信主頁面-> 向下滑動展開小程序列表-> 點擊對應小程序(這里以檸檬班軟件測試為例)
這里我們即可使用工具獲取元素的信息並寫出定位表達式了,比如定位到【課程】這個元素://a[contains(text(),"課程")]
>>> step3:確認微信小程序對應的進程名
微信有很多的進程,我們要確定當前小程序是位於哪個進程中(當前查詢到的是 com.tencent.mm:appbrand0):
這里需要注意:進行該操作的時候最好重啟微信(在后台清理應用重新點擊啟動),目的是為了保證被測小程序在微信后台只有一個,跟代碼執行過程保持同步。
>>> step4:chromeDriver 驅動匹配
小程序本質上還是 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
3 編 寫 腳 本
這里以 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 窗口:
所以我們這里一定要記得切換(通過 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();
4 總 結
微信小程序與普通的 Hybrid 應用做自動化測試存在很多的區別,不管是 webview 調試開關的開啟方式,還是小程序需要的特殊啟動參數配置,以及 chromeDriver 與小程序 webview 的版本匹配,種種因素導致微信小程序執行並不是很穩定,而且切換 webview 速度也比較慢。隨着微信版本的迭代更新,可能一些配置會失效。
目前微信自己有發布了支持小程序自動化測試的框架 Minium,但坑比較多。第三方的一些圖像識別框架也可以支持小程序的自動化測試,比如網易的 Airtest,上手簡單,但准確性和穩定性不高。總的來說目前市面上並沒有一款足夠好用、足夠穩定的微信小程序自動化測試的框架/工具。當然,隨着后續技術的升級,應該會有很多的優秀工具涌現出來。
轉:https://mp.weixin.qq.com/s/P8U9CedpJn2cZqsX_E6xRw