做者|肖恆android
轉轉歡樂送是轉轉孵化的處理閒置小程序,閒置直接送給更須要的人,一口價,24小時送出,無需溝通,快遞上門取件。送出閒置得星星,星星領取好物。領取人還能夠發出感謝。有愛,簡單,歡樂。ios
本文主要介紹轉轉歡樂送分享到微信羣場景的自動化實踐。git
小程序自動化準備工做
一、 打開微信上小程序的調試功能(爲了拿到小程序的context)github
在私信聊天頁,輸入http://debugx5.qq.com,點擊後跳轉到x5調試頁面,點擊信息,而後勾選【打開TBS內核Inspector調試功能】。web
二、小程序的進程(appium的配置參數chromeOptions中要用到)chrome
沒有啓動微信,沒有啓動小程序時在adbshell下的進程清單以下:shell
剛啓動微信,沒有進入到小程序頁面時在adbshell下的進程清單以下:小程序
啓動歡樂送小程序後的進程清單以下,會發現和剛啓動微信的進程清單一致,說明剛進入微信會加載小程序相關內容(只是此時的top進程是com.tencent.mm):微信
進入小程序頁面後的進程清單以下,由進程號得知當前的top進程爲com.tencent.mm:tools(可簡寫爲tools);app
從上圖發現appbrand0、tools是進入到小程序後新增的進程,且在進入小程序頁面後當前正在運行的進程是tools,對應chromeOptions中的值。
三、webview調試利器---chrome-inspector(較好的查看webview頁面元素)
其URL:chrome://inspect/#devices。能識別手機上打開的webview頁面。是否每一個入口的小程序都能在chrome_inspector上查看對應的界面呢?遇到過兩種情形:
(1)(2018.6.22~至今)只能查看搜一搜入口的小程序(從chrome-inspector上顯示的搜一搜url試出來的)
(2)(2018.6.22以前)全部入口均能顯示小程序頁面的url(下拉小程序;搜一搜;微信錢包)
建議:從執行case的穩定性考慮,推薦使用從搜一搜進入到小程序頁面
基於APPIUM的小程序上下文切換
一、 切換到webview模式下的優勢與缺點
看同一個安卓頁面上的顯示,分別用chrome_inspector和uiautomator顯示
對比能夠看出在chrome-inspector下頁面元素顯示的優點:
可以覆蓋更多的業務場景(好比上邊右圖能夠輕鬆定位發佈有獎,要用左圖的話須要圖像識別)
維護量更小(圖像識別須要對每一個不一樣的設備的此頁面都須要單獨截一張圖片,以保證能準確識別對應元素)
二、如何切換到對應元素所在的小程序頁面
切換到小程序頁面:先切換到元素所在的context,而後切換到元素所在的handle中。元素所在的context對應前面獲取到的當前頁面的top進程名;handle的話須要你本身去遍歷全部的handle,當此handle下的page_source包含你想要的元素,就是你所須要的handle(此處每一個頁面挑一個只能表明當前頁面的元素,防止多個頁面有相同元素)
多個小程序頁面之間來回切換:再次遍歷全部的handle,切換到元素所在的handle中
而後有的人會說,我照着你這篇教程作了,可是仍然沒有切換成功。
三、不是全部的設備都能切換成功的(可能appium框架裏有bug)
Chromedriver與webview版本對應關係(這個很重要)的連接:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
第一種情形:設備自身的android system webview版本比微信裏的webview版本高。
安卓設備自帶的android system webview版本(59)高於57(微信裏的webview版本與tbs版本號有關,目前咱們的微信基本都是最新的):
只存放chromedriver2.28和2.29時(chromedriver的存放位置在「小程序自動化的搭建---小程序中chromedriver的存放」中能夠清晰看到),切換成功。
只存放2.2八、2.2九、2.30時,切換會報錯。
第二種情形:設備自身的webview版本比微信裏的低。
安卓設備自帶的webview版本(47)低於57(微信裏的webview版本):
只存放2.28和2.29時,切換會報錯。
只存放2.2八、2.2九、2.21時,切換會報錯。
因此設備低的可能須要本身嘗試去改源碼。
第三種情形:設備自身的webview版本與微信裏的一致。
小夥伴們,快拿起你的androidsystem webview57版本的手機跑個小程序自動化吧(應該成功)。
小程序自動化的搭建
原則:與端內native、webview保持一致,易維護,易編寫case。
一、Case的存放
存放在一個單獨的小程序的testsuit裏
二、 element的編寫
小程序中的元素添加1個key(mini_program),與端內保持一致。
三、小程序中chromedriver的存放
與端內webview保持一致(放在框架裏能在不一樣執行機上更方便地同時執行不一樣的設備)。
四、appium配置參數
這裏值得一提的是chromedriverExecutableDir參數(須要appium版本在1.8及以上才能使用),那麼在1.8如下版本呢?(也不須要你作處理,在初始化過程當中我會去拿你執行機上的appium版本,系統的webview版本,而後配置對應的參數)
五、執行機環境的兼容
Uiautomator2及appium輸入法的兼容(目前執行機上安裝了不一樣版本的Uiautomator二、appium輸入法的包)。
六、執行
支持命令行參數執行,參數用-w或--wechat。
七、小程序初始化
爲了使用上的方便和節省沒必要要的操做,在執行小程序case時會自動關閉調用端內混淆包的文件和執行端內的預操做。
八、小程序頁面基本操做
元素是否存在、點擊、滑動、中英文輸入、小程序頁面來回切換。
將來
一、對於ios端的小程序的自動化,能有一個可行的方案。(目前能夠反編譯微信的包來作,但易封號)。
二、你們都能更方便的編寫、調試、執行case,查看執行結果。
推薦兩篇文章
一、關於咱們作自動化的目的、前期端內搭建的Ui自動化框架、原理、支持的功能可參考轉轉 App UI自動化進化史
二、小程序的介紹和測試可參考1分鐘瞭解轉轉小程序測試體系
本文由博客一文多發平臺 OpenWrite 發佈!