每隔幾天,小編都會收到同學(xué)們對于小程序測試的靈魂追問:Airtest支持小程序測試嗎?用Poco不能很好地對小程序進(jìn)行UI識別怎么辦?公眾號菜單里面的H5頁面能用Poco測嗎?
在此,小編統(tǒng)一回復(fù):
所以,在下文中,小編會詳細(xì)介紹如何用Airtest和Poco來對小程序進(jìn)行測試。
Airtest是基于圖像識別來進(jìn)行UI測試的,所以只要借助IDE提供的各種便捷功能,我們就可以很好地對小程序進(jìn)行測試,如下是一個測試的小例子:
# -*- encoding=utf8 -*-
__author__ = "19617"
from airtest.core.api import *
auto_setup(__file__)
# 點擊微信圖標(biāo)
touch(Template(r"tpl1584336781668.png", record_pos=(0.353, -0.526), resolution=(1080, 2244)))
# 下拉滑動進(jìn)入小程序頁面
swipe(Template(r"tpl1584336820818.png", record_pos=(0.004, -0.75), resolution=(1080, 2244)), vector=[0.0044, 0.5737])
sleep(1.0)
# 點擊目標(biāo)小程序
touch(Template(r"tpl1584336839508.png", record_pos=(-0.344, -0.427), resolution=(1080, 2244)))
sleep(1.0)
# 等到頁面上某個元素出現(xiàn)
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)
# 在搜索框輸入文字并執(zhí)行搜索
text("蛋糕",search=True)
assert_exists(Template(r"tpl1584352235391.png", record_pos=(0.002, -0.453), resolution=(1080, 2244)), "找到目標(biāo)")
print("運行成功")
復(fù)制代碼
盡管上述的例子非常簡單,但利用Airtest來對小程序進(jìn)行測試的時候,我們?nèi)孕枰⒁庖韵聨c:
開篇我們就提到過,微信和QQ內(nèi)置的瀏覽器內(nèi)核不是Android原生的WebView,而是他們自家的 X5 WebView 內(nèi)核。我們需要切換到系統(tǒng)WebView內(nèi)核,這樣Poco才能更好地識別出小程序的各種UI控件。
很多同學(xué)未進(jìn)行設(shè)置,就直接用Poco去獲取控件,很可能會遇到下圖中的情況:
① 打開微信中任意一個聊天框,輸入 debugtbs.qq.com,點擊進(jìn)入TBS調(diào)試頁面,再點擊頁面內(nèi)的“安裝線上內(nèi)核”:
② 安裝成功后,我們需要重啟微信才可以生效;
③ 再次進(jìn)去剛才的TBS調(diào)試頁面,檢查我們的設(shè)置是否生效,點擊“查看版本信息”,版本信息為 0(null) 則設(shè)置成功:
設(shè)置成功以后即可用Poco對小程序進(jìn)行測試。
依舊以上述的小程序為例,來看看用poco框架如何測試小程序:
__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")
# 下滑進(jìn)去小程序頁面
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()
# 打印找到第一個配方的標(biāo)題
print(poco(text="超容易上手的古早蛋糕").get_text())
復(fù)制代碼
例子中有以下幾點需要注意:
如上,通過設(shè)置切換到系統(tǒng)WebView內(nèi)核之后,Poco也能夠獲取微信公眾號菜單的H5頁面元素:
① TBS調(diào)試只適用于Android系統(tǒng),iOS暫不支持;
② 在小程序測試的實操中,我們可以靈活地交替使用Airtest和Poco腳本,比如:有些編輯框無法使用Poco的set_text接口,我們可以先使用poco進(jìn)行點擊操作,再用Airtest的text接口。
③上文使用設(shè)備詳情:IDE版本1.2.3;手機型號MI 8 SE,安卓9;微信版本7.0.12。
工作日 8:30-12:00 14:30-18:00
周六及部分節(jié)假日提供值班服務(wù)