前期准備
微信小程序作為現在流行的一種應用載體,很多小伙伴都有對其做自動化測試的需求,由於騰訊系 QQ、微信等是基於騰訊自研 X5 內核,不是谷歌原生 webview,所以調試會有些許差異(現在很多 app 產品也開始流行采用 X5 內核作為其內嵌 Web 瀏覽服務)。
genymotion、夜神等模擬器是intel的X86架構,很多app安裝不了,比如微信、qq等(雖然說可以通過安裝arm解釋器來解決該問題,但是進行X5內核調試的話也會出現問題),建議最好是一台真實的手機來做。
需要注意的是 X5 內核只支持手機,模擬器是不支持的。調試和抓取小程序webview這些都需要真機完成
鏈接:http://testingpai.com/article/1615452452052
https://www.cnblogs.com/yyoba/p/9455519.html
1、 打開手機微信調試模式
微信基於騰訊自研X5內核,所以需要對手機開啟X5調試模式,設置允許抓取小程序的Inspect,方便對頁面元素進行定位,這些工作的前提都需要開啟調試模式
打開webview微信小程序的開關
1、 往文件助手或微信好友發送http://debugx5.qq.com,這個頁面可正常打開,X5內核的設置頁面
2、 如果點擊這個http://debugx5.qq.com,進到的頁面提示當前非X5內核,按照給出的提示操作,聊天框輸入http://debugtbs.qq.com並點擊,提示要在聊天輸入框輸入debugmm.qq.com/?forcex5=true
3、 根據提示,在聊天輸入框輸入debugmm.qq.com/?forcex5=true,並點擊,彈出如下
4、 成功切換之后,再點擊http://debugx5.qq.com,就可以進到X5調試內核頁面
5、 首次打開,要安裝線上內核,點擊【安裝線上內核】,會自動開始下載,下載完成后,提示重啟,點擊重啟;最好將微信也一起結束進程重啟一下。
6、 點擊DebugX5,進可以進到第一步的頁面,設置抓取小程序webview的開關了
7、 如果第六步報“debugx5頁面僅在x5內核時有效,由於當前沒有使用X5內核,無法打開Debugx5”,這個時候微信重啟,重新打開吧
2、 驗證是否能抓到微信小程序的webview
前提條件:手機通過數據線連接到電腦端,電腦端打開chrome,輸入chrome://inspect/#devices,即可在這里看到連接的設備和抓取到信息。
Chrome 自帶的 inspect 工具識別小程序/內嵌 Web 頁面需要訪問外網
建議使用:uc-devtools進行抓取inspect,國內有些限制,抓取到的inspect為空白。下載地址:https://dev.ucweb.com/(注:不能在谷歌瀏覽器下載,彈不出下載提示框)
打開微信,調起小程序,就可以查看抓到的webview了
3、 !!!微信最新版本不能抓取到webview
安裝了微信最新版本,操作小程序,怎么都抓不到小程序的webview
解決方案:降低微信版本到7.0.22
操作方法:
1、有些應用商場是有歷史版本可以下載的,可先下載應用商城,搜索微信,選擇歷史版本,選擇7.0.22進行安裝(7.0.10版本太低,登錄提示要用新版本)
豌豆莢可用
2、卸載最新版本前,先將手機的聊天記錄備份到電腦端,使用完之后,可以將電腦端的聊天記錄恢復到手機
3、重裝了7.0.22版本的微信后,打開微信小程序的webview的方法同第一大點的步驟,抓不到,重啟再試試!
參考文章:https://blog.csdn.net/weixin_46003972/article/details/120670598
實際操作
1、配置chromeDriver
和app自動化類似,依靠appium做自動化,小程序本質上還是 Web 頁面,我們可以通過 chromeDriver 驅動小程序頁面執行,小程序因為使用的 X5 內核是經過騰訊二次開發過之后的,所以 chromeDriver 驅動與 webview 版本匹配並不嚴格按照官方 Appium 說明的匹配規則,這里試驗了幾個版本的 chromeDriver,發現 V2.40 版本
下載地址:https://npm.taobao.org/mirrors/chromedriver
下載完畢后解壓,將 chromeDriver 替換到 Appium 的自帶 chromeDriver 所在路徑:
Appium.exe所在路徑\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
下載完成后,到appium配置驅動的執行路徑,設置前置,使用這個前置啟動
2、獲取小程序的對應進程名
在獲取小程序進程名前,要先獲取微信的包名
com.tencent.mm
獲取小程序的進程名
adb shell dumpsys activity top | findstr ACTIVITY
3、uc-devtools進行元素的定位,編寫定位元素的定位
3、代碼實現
1、 和app自動化一樣,要先打開app,打開app的配置信息
2、啟動微信進入到主頁-> 下滑展開小程序列表-> 點擊對應小程序
3、進入到小程序,實際上是webview,需要切換到webview進行操作,這個時候就需要用到切換上下文,switch_to.context()
4、切換到小程序之后,實際上是操作chrome頁面,定位元素要用回要用webdiriver的定位元素的BY
參考:https://www.cnblogs.com/lizhe860/p/14486432.html(詳細講解了小程序)