前言
每隔幾天,小編都會收到同學們對於小程序測試的靈魂追問:Airtest支持小程序測試嗎?用Poco不能很好地對小程序進行UI識別怎么辦?公眾號菜單里面的H5頁面能用Poco測嗎?
在此,小編統一回復:
- Airtest是支持小程序測試的;
- 小程序是基於騰訊的X5內核開發的,默認情況下,Poco對小程序的元素不能很好地識別,需要進入TBS調試頁面設置才能更好識別小程序的控件;
- 進行TBS設置之后,公眾號菜單的H5頁面也能夠用Poco框架進行測試。
所以,在下文中,小編會詳細介紹如何用Airtest和Poco來對小程序進行測試。
用Airtest測試小程序
Airtest是基於圖像識別來進行UI測試的,所以只要借助IDE提供的各種便捷功能,我們就可以很好地對小程序進行測試,如下是一個測試的小例子:

# -*- encoding=utf8 -*- __author__ = "19617" from airtest.core.api import * auto_setup(__file__) # 點擊微信圖標 touch(Template(r"tpl1584336781668.png", record_pos=(0.353, -0.526), resolution=(1080, 2244))) # 下拉滑動進入小程序頁面 swipe(Template(r"tpl1584336820818.png", record_pos=(0.004, -0.75), resolution=(1080, 2244)), vector=[0.0044, 0.5737]) sleep(1.0) # 點擊目標小程序 touch(Template(r"tpl1584336839508.png", record_pos=(-0.344, -0.427), resolution=(1080, 2244))) sleep(1.0) # 等到頁面上某個元素出現 wait(Template(r"tpl1584336861709.png", record_pos=(0.007, -0.689), resolution=(1080, 2244))) sleep(1.0) touch(Template(r"tpl1584336875201.png", record_pos=(-0.014, -0.454), resolution=(1080, 2244))) sleep(1.0) # 在搜索框輸入文字並執行搜索 text("蛋糕",search=True) assert_exists(Template(r"tpl1584352235391.png", record_pos=(0.002, -0.453), resolution=(1080, 2244)), "找到目標") print("運行成功")
盡管上述的例子非常簡單,但利用Airtest來對小程序進行測試的時候,我們仍需要注意以下幾點:
- 並不是所有小程序都適合用Airtest來進行測試,如果小程序的頁面樣式經常發生變化,那么圖像腳本也經常要根據樣式變化而進行更新維護;
- 如果腳本中存在多個連續的圖像識別操作,特別是操作會發生頁面加載、頁面切換等情況,最好在連續操作之間加入sleep(1.0),給一定的緩沖時間讓頁面穩定,可以大大減少因為頁面未加載完全而導致的圖像識別失敗;
- 對於無法用Airtest完成的測試操作,我們可以考慮結合Poco來完成
用Pcoco測試小程序
開篇我們就提到過,微信和QQ內置的瀏覽器內核不是Android原生的WebView,而是他們自家的 X5 WebView 內核。我們需要切換到系統WebView內核,這樣Poco才能更好地識別出小程序的各種UI控件。
很多同學未進行設置,就直接用Poco去獲取控件,很可能會遇到下圖中的情況:

小程序頁面內的很多元素都不能獲取到。
如何進行設置
① 打開微信中任意一個聊天框,輸入 debugtbs.qq.com,點擊進入TBS調試頁面,再點擊頁面內的“安裝線上內核”:
② 安裝成功后,我們需要重啟微信才可以生效;
③ 再次進去剛才的TBS調試頁面,檢查我們的設置是否生效,點擊“查看版本信息”,版本信息為 0(null) 則設置成功:
設置成功以后即可用Poco對小程序進行測試。
Poco測試小程序實操
依舊以上述的小程序為例,來看看用poco框架如何測試小程序:
# -*- encoding=utf8 -*- __author__ = "19617" from airtest.core.api import * from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) auto_setup(__file__) # 傳入微信的包名啟動微信app start_app("com.tencent.mm") # 下滑進去小程序頁面 swipe((550,250),(550,1200)) sleep(2.0) # 點擊下廚房小程序 poco("com.tencent.mm:id/cud").offspring("com.tencent.mm:id/dai").child("android.widget.RelativeLayout").offspring("com.tencent.mm:id/le").offspring("com.tencent.mm:id/lh").child("android.widget.LinearLayout")[2].offspring("com.tencent.mm:id/eko").child("android.widget.RelativeLayout")[0].offspring("com.tencent.mm:id/cik").click() sleep(2.0) # 點擊搜索框 poco(text="今天想吃點什么?").click() sleep(1.0) # 再次點擊搜索框 poco("android.widget.EditText").click() sleep(1.0) # 輸入搜索詞“蛋糕” poco("android.widget.EditText").set_text("蛋糕") # 點擊搜索 poco(text="搜索").click() # 打印找到第一個配方的標題 print(poco(text="超容易上手的古早蛋糕").get_text())
例子中有以下幾點需要注意:
- start_app()需要傳入的參數是APP的包名,關於如何獲取APP包名大家可以自行百度,方法很多;
- 連續操作之間仍需要適當使用一些sleep(1.0),防止頁面切換時UI樹沒來得及刷新導致下一步操作的控件查找失敗。
測試公眾號菜單的H5頁面
如上,通過設置切換到系統WebView內核之后,Poco也能夠獲取微信公眾號菜單的H5頁面元素:

小結
① TBS調試只適用於Android系統,iOS暫不支持;
② 在小程序測試的實操中,我們可以靈活地交替使用Airtest和Poco腳本,比如:有些編輯框無法使用Poco的set_text接口,我們可以先使用poco進行點擊操作,再用Airtest的text接口。
③上文使用設備詳情:IDE版本1.2.3;手機型號MI 8 SE,安卓9;微信版本7.0.12。
以上就是本期教程的所有內容,如有疑問可以在我們的官方公眾號內留言,或者加入我們的開發者交流Q群(1017250147),然后在群內提問即可。(PS:提問時請描述詳細情況最好附上截圖方便定位問題哦~)
AirtestProject開發者交流Q群:1017250147
文章來源於公眾號:AirtestProject
Airtest官網: http://airtest.netease.com/