日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)

發(fā)布時(shí)間:2024/7/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android ui自动化框架选型,Appium UI 自动化框架之我见 (开源) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

APP UI Automation Framework

一個(gè)基于 Appium 1.8.1、TestNG,Page Object 模式開(kāi)發(fā)的 UI 自動(dòng)化測(cè)試框架

介紹文檔

結(jié)構(gòu)圖

基本功能

每秒生成一次截圖

通過(guò) xml 配置待執(zhí)行的測(cè)試用例

通過(guò) yml 指定待執(zhí)行測(cè)試的設(shè)備及 Appium 端口

用例執(zhí)行失敗自動(dòng)重試,且重試次數(shù)可配置

用例執(zhí)行失敗時(shí)自動(dòng)截圖

生成測(cè)試報(bào)告 (NGReport)

支持自定義配置項(xiàng)

設(shè)計(jì)目標(biāo)

用一套代碼執(zhí)行 Android/iOS 測(cè)試用例

Test case 層的代碼高度利用,只需要考慮業(yè)務(wù)邏輯,無(wú)需關(guān)心系統(tǒng)平臺(tái)及如何查找元素

以下代碼在iOS和Android上均可運(yùn)行

//打開(kāi)我的朋友圈

public void showMyMoment(){

//打開(kāi)微信主頁(yè)面,點(diǎn)擊"我"

WeiXinMainPage.verify()

.clickMeButton();

//校驗(yàn)"我"頁(yè)面,打開(kāi)"朋友圈"

WeiXinMePage.verify()

.clickMoment();

//校驗(yàn)"朋友圈頁(yè)面",下劃一段距離,然后打開(kāi)帶圖片的朋友圈

WeiXinMomentPage.verify()

.scroll()

.clickMyMoment();

Driver.sleep(10);

}

設(shè)計(jì)理念

應(yīng)用 Page Object 模式提高 UI 頁(yè)面操作代碼的復(fù)用度

用 Driver 類(lèi)封裝所有用到的 Appium API, 框架中其它類(lèi)只通過(guò) Driver 調(diào)用 Appium 的方法,這種作法會(huì)有以下兩點(diǎn)好處:

一、屏蔽對(duì) Appium API 的依賴(lài),如果 Appium 的某個(gè) API 官方廢棄了,只需修改 Driver 類(lèi)封裝的相應(yīng)方法即可

二、如果將 Appium 換成 Macaca 或其它框架,除了改動(dòng) Driver 類(lèi) 其它類(lèi)無(wú)需改動(dòng)

在 Driver 中用 findElementById 等封裝對(duì) iOS 和 Android 的元素查找,提高代碼的復(fù)用,盡可能的避免 iOS 與 Android 因查找元素方式不同而寫(xiě)相似的代碼

該框架適用于同一個(gè) APP, Android 和 iOS UI 結(jié)構(gòu)基本一致的情況

一些原則

Page 類(lèi)的構(gòu)造函數(shù)用 Verify 代替

Page 類(lèi)的構(gòu)造函數(shù)用過(guò) findElementByID 等來(lái) 檢查當(dāng)前頁(yè)面是不否為期望的 Page

依照 SRP 原則,Page 類(lèi)內(nèi)的函數(shù) 只返回當(dāng)前類(lèi)實(shí)例(this) 或 void, 不返回其它頁(yè)面的對(duì)象,確保每個(gè) Page 與依賴(lài)于任何其它 Page,提高 Page 類(lèi)的復(fù)用度

//朋友圈的Page類(lèi)

public class WeiXinMomentPage extends BasePage {

//能過(guò)靜態(tài)方法返回頁(yè)面實(shí)例

public static WeiXinMomentPage verify(){

if( !Util.isAndroid() ) {

//默認(rèn)情況下寫(xiě)的Page類(lèi)是Android的UI

//若Android與iOS UI上有差異,需繼承Android的Page類(lèi)再寫(xiě)個(gè)iOS Page

return new WeiXinMomentPageiOS();

}

return new WeiXinMomentPage();

}

//不允許調(diào)用構(gòu)造函數(shù)

protected WeiXinMomentPage(){

Driver.findElementByText(getRes("MOMENT_PAGE_ME_TEXT"));

}

//所有成員函數(shù)只返回this或void,確保每個(gè)Page類(lèi)的獨(dú)立性,不依賴(lài)于任何其它Page類(lèi)

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;

}

}

類(lèi)

Driver : 封裝所有用到的 Appium 方法。作用屏幕對(duì) Appium 的依賴(lài)、提供更方便的函數(shù)。

BasePage : 所有 Page 類(lèi)的基類(lèi)

BaseTest : 所有 Test 類(lèi)的基類(lèi)

ConfigUtil : 讀取工程配置文件

ResourceUtil : 讀取資源配置文件

Util : 工具類(lèi),提供一些能用方法

PageUtil : 封裝進(jìn)入某個(gè)頁(yè)面的方法,方便復(fù)雜 test case 的編寫(xiě)

TestListener : 監(jiān)聽(tīng)測(cè)試結(jié)果,用例執(zhí)行失敗時(shí)截圖

配置文件

Config.yml 運(yùn)行測(cè)試時(shí)的一些配置項(xiàng) 如包名,重試次數(shù)等等。 詳見(jiàn) Config.ym 內(nèi)的注釋

資源文件(具體使用方法見(jiàn) demo)

為每個(gè)元素新建一個(gè)便于辨識(shí)的名字,用這個(gè)名字統(tǒng)一 Android/iOS 待查找元素, 然后將不同系統(tǒng)找中該名字的元素對(duì)應(yīng)的值寫(xiě)入相應(yīng)的 RES.yml 中

AndroidRES.yml 寫(xiě)入 Android 元素查找時(shí)需要用到的值

IOSRES.yml 寫(xiě)入 iOS 元素查找時(shí)需要用到的值

AndroidRES.yml

MAIN_PAGE_WEIXIN_TEXT: '微信'

MAIN_PAGE_CONTACT_TEXT: '通訊錄'

MAIN_PAGE_DISCOVER_TEXT: '發(fā)現(xiàn)'

MAIN_PAGE_ME_TEXT: '我'

ME_PAGE_MY_POST_TEXT: '相冊(cè)'

MOMENT_PAGE_ME_TEXT: '我的相冊(cè)'

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: '發(fā)現(xiàn)'

MAIN_PAGE_ME_TEXT: '我'

ME_PAGE_MY_POST_TEXT: '相冊(cè)'

MOMENT_PAGE_ME_TEXT: '我'

MY_POST_PAGE_MOMENT_PIC_ID: 'visible == true AND type == "XCUIElementTypeStaticText" AND name CONTAINS "月"'

測(cè)試用例集

框架通過(guò)讀取 task 目錄下的 xml 運(yùn)行指定的測(cè)試用例

在任務(wù)的xml中有四個(gè)值需要配置

1. port : Appium 端口

2. udid : 設(shè)備ID

3. wdaPort : iOS設(shè)備運(yùn)行的時(shí)的WDA port

4. class : 待運(yùn)行的測(cè)試類(lèi)

測(cè)試執(zhí)行時(shí)輸入的xml樣例

如何運(yùn)行 demo

demo 實(shí)現(xiàn)的功能:打開(kāi)微信 (若未登錄微信,請(qǐng)先手動(dòng)登錄),然后打開(kāi)朋友圈,查看第一個(gè)朋友圈 (帶圖片的)

啟動(dòng) Appium,然后運(yùn)行以下命令

方式一 : 將工程打成 Jar 包,然后運(yùn)行命令 java -jar UIAutomation-1.0-fat-tests ./task/demo.xml

方式 2 : IDEA 中 右鍵單擊 demo.xml ,選擇運(yùn)行。見(jiàn)下圖

參考文檔

總結(jié)

以上是生活随笔為你收集整理的android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。