FAutoTest-微信小程式 / 公眾號H5 自動化利器
X5核心H5自動化背景
近來有很多童靴諮詢如何做微信小程式/公眾號等H5頁面來做自動化,之前寫了一篇文章微信小程式自動化測試實踐
https://www.cnblogs.com/yyoba/p/9455519.html/
其中的工具是用appium來做。但是微信小程式/公眾號這種H5頁面是用微信自家X5核心來渲染的,appium對其支援的並不是非常理想,通過ChromeOption定製X5核心的程序執行時其穩定性不盡如人意,最近有關注到騰訊自家開源了專門做微信小程式/公眾號H5頁面自動化的框架,所以給各位小夥伴們嘮叨嘮叨。
FAutoTest
FAutoTest是騰訊自家開發來做微信H5頁面的自動測試框架,既然企鵝能將其開源,說明這個框架應該是經過其內部驗證實踐的。我們可以從GitHub上找到這個開源專案地址
框架的介紹和使用需要的環境官方網址已經介紹的非常詳細了(對於英文犯暈的同學友好度max),這裡就不多做介紹。
還要再重點強調一遍,必須要開啟微信的核心debug模式,怎麼開啟可以參考我之前的微信小程式自動化測試實踐這篇blog。
之前是寫的微信小程式實踐,那這篇就拿公眾號來試下水。
FAutoTest實踐
工具選型
官方有對其介紹:框架內打包了 Python 版本的 UIAutomator,方便在安卓 Native 頁面進行操作。所以在工具選型上面直接拋棄了appium,一來appium執行速度慢,需要進行大量的初始化操作,二來本身appium就是基於UIAutomator,何不就用python版的UIAutomator呢(感謝國內前輩賀曉聰大神的的框架,對python版封裝的很優秀),有興趣的同學可以去觀摩下:
頁面元素定位
- 開啟微信,通過uiautomatorview.bat工具定位到元素資訊
- 開啟微信公眾號,通過chrome:inspect探測web頁面的元素
以檸檬班軟體測試公眾號舉例:測試流程經過的元素資訊
- 通訊錄 text定位
- 公眾號 text定位
- 檸檬班軟體測試 需要先滑動至檸檬班軟體測試,再去點選
- 粉絲福利 text定位
- java自動化 text定位
- 諮詢按鈕 xpath定位://*[@id="js-bottom"]/div[2]/div[1]/button
- 諮詢輸入框 xpath定位://*[@id="js-input"]
- 傳送按鈕 xpath定位://*[@id="js-btn-send"]
自動化指令碼編寫
先手動開啟對應的H5頁面,來看下FAutoTest是否能完成H5頁面的自動化測試,程式碼如下:
#初始化driver
h5Driver = H5Driver()
h5Driver.initDriver()
#點選諮詢按鈕
h5Driver.clickElementByXpath('//*[@id="js-bottom"]/div[2]/div[1]/button')
#點選輸入框
h5Driver.clickElementByXpath('//*[@id="js-input"]')
h5Driver.textElementByXpath('//*[@id="js-input"]','how much')
#點擊發送
h5Driver.clickElementByXpath('//*[@id="js-btn-send"]')
h5Driver.close()
嗯,一切正常,接下來上native原生頁面程式碼,以及unitest用例管理
# coding=utf-8
from fastAutoTest.core.h5.h5Engine import H5Driver
import unittest
import os
from uiautomator import Device
from time import sleep
class wechatPublicTest(unittest.TestCase):
@classmethod
def setUpClass(self):
#使用adb命令調起微信
cmd = 'adb shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI'
os.system(cmd)
#對應裝置的deviceName
androidDriver = Device('ZX1G225X2G')
print androidDriver.info
self.driver=androidDriver
#休眠一下,等待微信主頁面載入完畢
sleep(5)
#微信原生介面流程測試,用uiautomator框架
def test_public_native(self):
#找到微信主頁面的“通訊錄” 並點選
self.driver(text='通訊錄').click()
#點選公眾號
self.driver(text='公眾號').click()
#上下滑動去找檸檬班軟體測試公眾號
self.driver(scrollable=True).scroll.to(text="檸檬班軟體測試")
self.driver(text='檸檬班軟體測試').click()
self.driver(text='粉絲福利').click()
#選擇java自動化
self.driver(text='java自動化').click()
sleep(5)
#微信公眾號H5部分測試,用到FAutoTest框架
def test_public_we_h5(self):
#初始化driver
h5Driver = H5Driver()
h5Driver.initDriver()
#點選諮詢按鈕
h5Driver.clickElementByXpath('//*[@id="js-bottom"]/div[2]/div[1]/button')
#點選輸入框
h5Driver.clickElementByXpath('//*[@id="js-input"]')
h5Driver.textElementByXpath('//*[@id="js-input"]','how much')
#點擊發送
h5Driver.clickElementByXpath('//*[@id="js-btn-send"]')
h5Driver.close()
@classmethod
def tearDownClass(self):
#測試用例執行結束關閉應用
cmd = 'adb shell am force-stop com.tencent.mm'
os.system(cmd)
if __name__ == '__main__':
unittest.main()