APP H5 混合自動(dòng)化使用說(shuō)明 [基于 Appium+Python 系列]
背景
前幾天接到H5開(kāi)發(fā)人員那邊的業(yè)務(wù)開(kāi)發(fā)需求單,說(shuō)想將H5接入到自動(dòng)化系列中,特此記錄分享一下。
也可參考testerhome發(fā)表的文章鏈接:https://testerhome.com/topics/7866
環(huán)境前置準(zhǔn)備
- 手機(jī)與電腦USB連接,開(kāi)啟USB調(diào)試模式,通過(guò)adb devices可查看到此設(shè)備。
- 電腦端、移動(dòng)端安裝chrome瀏覽器。(盡量保證移動(dòng)端chrome版本低于電腦端)
- App webview開(kāi)啟debug模式
- 在電腦端Chrome瀏覽器地址欄輸入chrome://inspect/#devices,進(jìn)入調(diào)試模式:
- 此時(shí)頁(yè)面顯示了手機(jī)型號(hào)、驅(qū)動(dòng)名稱、APP要調(diào)試的WebView名稱
- 點(diǎn)擊inspect,若成功加載與APP端相同界面的調(diào)試頁(yè)面,則配置成功
- 若獲取不到WebView或者調(diào)試頁(yè)面預(yù)覽框顯示空白,則需要進(jìn)行VPN破解–安裝FQ軟件(由于默認(rèn)的DevTools使用的是appspot服務(wù)器,這在國(guó)內(nèi)是需要翻越GWF)
嘗試解決方法:
1、在windows host文件中增加:
61.91.161.217 chrome-devtools-frontend.appspot.com
61.91.161.217 chrometophone.appspot.com
2、使用FQ軟件,如Lantern藍(lán)燈
環(huán)境檢查
App webview 調(diào)試模式檢查與開(kāi)啟
-
基礎(chǔ)檢查方式
- 打開(kāi)app對(duì)應(yīng)的h5頁(yè)面,在chrome://inspect/#devices地址中,檢查是否顯示對(duì)應(yīng)的webview,如沒(méi)有,則當(dāng)前未開(kāi)啟調(diào)試模式。
- 在自動(dòng)化代碼中,進(jìn)入到對(duì)應(yīng)的H5頁(yè)面,輸出當(dāng)前context,如果一直顯示為Natvie,則webview未開(kāi)啟。
-
開(kāi)啟方式
在app中配置如下代碼(在WebView類中調(diào)用靜態(tài)方法setWebContentsDebuggingEnabled):if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); }
注:此步驟,一般需要App前端開(kāi)發(fā)人員協(xié)助增加
瀏覽效果
chrome://inspect/#devices地址效果圖類似如下:
點(diǎn)擊inspect,正常則顯示為如下:
代碼實(shí)現(xiàn)
下述演示demo,均以微信App中的H5為例:
微信默認(rèn)H5調(diào)試模式處于關(guān)閉,可用微信打開(kāi)聊天窗口,輸入debugx5.qq.com, 在彈出內(nèi)核調(diào)試【信息】頁(yè)面中 勾選"是否打開(kāi)TBS內(nèi)核Inspector調(diào)試功能" 來(lái)打開(kāi)調(diào)試功能。
Python+Appium+WebDriver
__author__ = 'mikezhou' #coding=utf-8 #appium 微信h5自動(dòng)化示例 from appium import webdriver import time packageName='com.tencent.mm' appActivity='.ui.LauncherUI' desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '5.1.1' desired_caps['deviceName'] = 'K31GLMA660800338' desired_caps['appPackage'] = packageName desired_caps['appActivity'] = appActivity desired_caps['fullReset'] = 'false' desired_caps['unicodeKeyboard'] = 'True' desired_caps['resetKeyboard'] = 'True' desired_caps['fastReset'] = 'false' desired_caps['chromeOptions']={'androidProcess': 'com.tencent.mm:tools'} #驅(qū)動(dòng)H5自動(dòng)化關(guān)鍵之一 driver = webdriver.Remote('http://127.0.1.1:4723/wd/hub', desired_caps) driver.implicitly_wait(30) driver.find_element_by_name('我').click() print driver.contexts driver.find_element_by_name('相冊(cè)').click() driver.find_element_by_xpath("//*[contains(@text,'正在繁星直播')]").click() print driver.current_context driver.find_element_by_xpath("//*[contains(@text,'正在繁星直播')]").click() print driver.current_context driver.switch_to.context('WEBVIEW_com.tencent.mm:tools') print driver.current_context print driver.page_source driver.find_element_by_xpath('//*[@id="btnRecommend"]/div[1]').click() driver.switch_to_default_content() time.sleep(2) driver.quit()
Python+AppiumLibrary+RobotFramework
注:RF關(guān)鍵字與用例部分,只提供關(guān)鍵代碼,一些前置需要導(dǎo)入的library,自行添加:
App啟動(dòng)關(guān)鍵字
Open MobileFx Android App_H5 [Arguments] ${remote_url} ${deviceName} ${appActivity} ${appPackage} ${platformVersion} ${Process} ... ${app}=${Empty} [Documentation] *啟動(dòng)手機(jī)繁星app_H5[Android]* ... ... 入?yún)㈨樞颍? ... ... Arguments: 遠(yuǎn)程服務(wù)地址|設(shè)備名稱|待測(cè)應(yīng)用appActivity| 待測(cè)應(yīng)用package包名|平臺(tái)版本號(hào)|webveiw進(jìn)程名 ... ... Examples: ... ... | Open MobileFx Android App H5 | http://localhost:4723/wd/hub | Android Emulator | .ui.LauncherUI | 'com.tencent.mm | 4.4.2 | com.tencent.mm:tools | ${androidProcess}= Create Dictionary androidProcess=${Process} Open Application ${remote_url} alias=fanxingappForAndroid platformName=Android deviceName=${deviceName} automationName=appium appActivity=${appActivity} ... appPackage=${appPackage} platformVersion=${platformVersion} unicodeKeyboard=True resetKeyboard=True app=${app} chromeOptions=${androidProcess}
套件用例區(qū)
*** Settings *** Suite Setup 啟動(dòng)app Suite Teardown Close All Applications Library AppiumLibrary *** Variables *** ${appActivity} .ui.LauncherUI ${appPackage} com.tencent.mm ${deviceName} ${get_deviceName} ${platformVersion} ${get_platform_version} ${remote_url} ${android_remote_url} ${androidProcess} com.tencent.mm:tools *** Test Cases *** 微信分享驗(yàn)證 [Documentation] 檢查首頁(yè)搜索 [Tags] mikezhou main online [Setup] [Timeout] Click Element Wait name=我 ${contexts} get_contexts ${current_context} get_current_context log ${contexts} log ${current_context} Click Element Wait name=相冊(cè) ${current_context} get_current_context log ${current_context} Click Element Wait xpath=//*[contains(@text,'助力鹿晗')] ${current_context} get_current_context log ${current_context} Click Element Wait xpath=//*[contains(@text,'助力鹿晗')] ${current_context} get_current_context log ${current_context} Switch To Context WEBVIEW_com.tencent.mm:tools ${current_context} get_current_context log ${current_context} ${page} Log Source log ${page} Page Should Contain Text 鹿晗 timeout=15 Page Should Contain Text 概念詮釋冒險(xiǎn)精神 Click Element Wait xpath=/html/body/div[1]/div sleep 3 [Teardown] *** Keywords *** 啟動(dòng)app Open MobileFx Android App_H5 ${remote_url} ${deviceName} ${appActivity} ${appPackage} ${platformVersion} ${androidProcess}
結(jié)束語(yǔ)
感慨最近事事不利,感昌近十幾天了都未好轉(zhuǎn)。
福利
最近TesterHome社區(qū)創(chuàng)始人思寒在極客時(shí)間出版了個(gè)人專欄,針對(duì)移動(dòng)端自動(dòng)化測(cè)試實(shí)戰(zhàn),推薦給大家,希望對(duì)大家有所幫助




浙公網(wǎng)安備 33010602011771號(hào)