android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)
APP UI Automation Framework
一個基于 Appium 1.8.1、TestNG,Page Object 模式開發的 UI 自動化測試框架
介紹文檔
結構圖
基本功能
每秒生成一次截圖
通過 xml 配置待執行的測試用例
通過 yml 指定待執行測試的設備及 Appium 端口
用例執行失敗自動重試,且重試次數可配置
用例執行失敗時自動截圖
生成測試報告 (NGReport)
支持自定義配置項
設計目標
用一套代碼執行 Android/iOS 測試用例
Test case 層的代碼高度利用,只需要考慮業務邏輯,無需關心系統平臺及如何查找元素
以下代碼在iOS和Android上均可運行
//打開我的朋友圈
public void showMyMoment(){
//打開微信主頁面,點擊"我"
WeiXinMainPage.verify()
.clickMeButton();
//校驗"我"頁面,打開"朋友圈"
WeiXinMePage.verify()
.clickMoment();
//校驗"朋友圈頁面",下劃一段距離,然后打開帶圖片的朋友圈
WeiXinMomentPage.verify()
.scroll()
.clickMyMoment();
Driver.sleep(10);
}
設計理念
應用 Page Object 模式提高 UI 頁面操作代碼的復用度
用 Driver 類封裝所有用到的 Appium API, 框架中其它類只通過 Driver 調用 Appium 的方法,這種作法會有以下兩點好處:
一、屏蔽對 Appium API 的依賴,如果 Appium 的某個 API 官方廢棄了,只需修改 Driver 類封裝的相應方法即可
二、如果將 Appium 換成 Macaca 或其它框架,除了改動 Driver 類 其它類無需改動
在 Driver 中用 findElementById 等封裝對 iOS 和 Android 的元素查找,提高代碼的復用,盡可能的避免 iOS 與 Android 因查找元素方式不同而寫相似的代碼
該框架適用于同一個 APP, Android 和 iOS UI 結構基本一致的情況
一些原則
Page 類的構造函數用 Verify 代替
Page 類的構造函數用過 findElementByID 等來 檢查當前頁面是不否為期望的 Page
依照 SRP 原則,Page 類內的函數 只返回當前類實例(this) 或 void, 不返回其它頁面的對象,確保每個 Page 與依賴于任何其它 Page,提高 Page 類的復用度
//朋友圈的Page類
public class WeiXinMomentPage extends BasePage {
//能過靜態方法返回頁面實例
public static WeiXinMomentPage verify(){
if( !Util.isAndroid() ) {
//默認情況下寫的Page類是Android的UI
//若Android與iOS UI上有差異,需繼承Android的Page類再寫個iOS Page
return new WeiXinMomentPageiOS();
}
return new WeiXinMomentPage();
}
//不允許調用構造函數
protected WeiXinMomentPage(){
Driver.findElementByText(getRes("MOMENT_PAGE_ME_TEXT"));
}
//所有成員函數只返回this或void,確保每個Page類的獨立性,不依賴于任何其它Page類
public WeiXinMomentPage scroll(){
Driver.scrollUp();
return this;
}
public WeiXinMomentPage clickMyMoment(){
MobileElement elem = Driver.findElemByIdWithoutException (getRes("MY_POST_PAGE_MOMENT_PIC_ID"));
if(elem == null){
elem = Driver.findElementById(getRes("MY_POST_PAGE_MOMENT_ARTICLE_ID"));
}
elem.click();
return this;
}
}
類
Driver : 封裝所有用到的 Appium 方法。作用屏幕對 Appium 的依賴、提供更方便的函數。
BasePage : 所有 Page 類的基類
BaseTest : 所有 Test 類的基類
ConfigUtil : 讀取工程配置文件
ResourceUtil : 讀取資源配置文件
Util : 工具類,提供一些能用方法
PageUtil : 封裝進入某個頁面的方法,方便復雜 test case 的編寫
TestListener : 監聽測試結果,用例執行失敗時截圖
配置文件
Config.yml 運行測試時的一些配置項 如包名,重試次數等等。 詳見 Config.ym 內的注釋
資源文件(具體使用方法見 demo)
為每個元素新建一個便于辨識的名字,用這個名字統一 Android/iOS 待查找元素, 然后將不同系統找中該名字的元素對應的值寫入相應的 RES.yml 中
AndroidRES.yml 寫入 Android 元素查找時需要用到的值
IOSRES.yml 寫入 iOS 元素查找時需要用到的值
AndroidRES.yml
MAIN_PAGE_WEIXIN_TEXT: '微信'
MAIN_PAGE_CONTACT_TEXT: '通訊錄'
MAIN_PAGE_DISCOVER_TEXT: '發現'
MAIN_PAGE_ME_TEXT: '我'
ME_PAGE_MY_POST_TEXT: '相冊'
MOMENT_PAGE_ME_TEXT: '我的相冊'
MY_POST_PAGE_MOMENT_PIC_ID: 'com.tencent.mm:id/dep'
MY_POST_PAGE_MOMENT_ARTICLE_ID: 'com.tencent.mm:id/yk' IOSRES.yml
MAIN_PAGE_WEIXIN_TEXT: '微信'
MAIN_PAGE_CONTACT_TEXT: '通訊錄'
MAIN_PAGE_DISCOVER_TEXT: '發現'
MAIN_PAGE_ME_TEXT: '我'
ME_PAGE_MY_POST_TEXT: '相冊'
MOMENT_PAGE_ME_TEXT: '我'
MY_POST_PAGE_MOMENT_PIC_ID: 'visible == true AND type == "XCUIElementTypeStaticText" AND name CONTAINS "月"'
測試用例集
框架通過讀取 task 目錄下的 xml 運行指定的測試用例
在任務的xml中有四個值需要配置
1. port : Appium 端口
2. udid : 設備ID
3. wdaPort : iOS設備運行的時的WDA port
4. class : 待運行的測試類
測試執行時輸入的xml樣例
如何運行 demo
demo 實現的功能:打開微信 (若未登錄微信,請先手動登錄),然后打開朋友圈,查看第一個朋友圈 (帶圖片的)
啟動 Appium,然后運行以下命令
方式一 : 將工程打成 Jar 包,然后運行命令 java -jar UIAutomation-1.0-fat-tests ./task/demo.xml
方式 2 : IDEA 中 右鍵單擊 demo.xml ,選擇運行。見下圖
參考文檔
總結
以上是生活随笔為你收集整理的android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 委托_java 能不能自己写一
- 下一篇: chrome控制台如何把vw显示成px_