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

APP UI Automation Framework

一个基于 Appium 1.8.1、TestNG,Page Object 模式开发的 UI 自动化测试框架

介绍文档

结构图

83fd69823c3a2790c924a76995135e29.png

基本功能

每秒生成一次截图

通过 xml 配置待执行的测试用例

通过 yml 指定待执行测试的设备及 Appium 端口

用例执行失败自动重试,且重试次数可配置

用例执行失败时自动截图

生成测试报告 (NGReport)

支持自定义配置项

Config.png

37d5a5c03ccc11ff952028c96c50ed8e.png

设计目标

用一套代码执行 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 ,选择运行。见下图

Run-By-IDEA.png

72ca39d65fbe265e31b48a3e2392fc9f.png

参考文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长虹android电视安装apk,长虹电视通过安卓手机安装沙发管家教程

‍本文教程适用于长虹电视LED39(48/50/55)C 2080i等相类似型号;【安装步骤简介】安卓手机安装沙发管家手机版--手机和智能电视/盒子用同一个路由器连接--沙发管家手机版推送安装【操作方法详情】1、使用您的安卓手机下载并安装沙发管家手机版:http://pub…

1使用技巧_新版PubMed使用技巧1

以下分享适合小白,高手请绕路。PubMed是许多医学生以及科研人员必备的检索系统,高效的利用PubMed可以节省很多时间。本文从以下几个方面简单讲解新版PubMed的使用技巧1:1、PubMed基本介绍;2、PubMed的高级检索。后期分享使用技巧2…

android 调用系统下载apk,如何在自己的App中调用Android系统自带的安装/卸载程序...

AppUtils里面写了如何安装和卸载apk(这段代码出自这里:点击打开链接~),这里的安装和卸载调用的是Android本身的一个安装卸载,所以可能页面不会太优雅,并不符合商业App的期望,如果要做到更优雅的实现,就要用…

switch matlab c语言,matlab switch语句使用

switch 块有条件地执行一组语句从几个选择。每个选项所涵盖的一个 case 语句。计算 switch_expression 是一个标量或字符串。计算case_expression是标量,标量或字符串的字符串或单元阵列。switch 块测试每个 case ,直到其中一个 case 是 true 。case 是 …

HTML列表内容自动排序,JS实现HTML表格排序功能

本文实例为大家分享了JavaScript实现HTML表格排序功能,供大家参考,具体内容如下HTML代码:click meclick meclick meclick me15.437001.220阿7.0543,000炳30.62302,558,800和22.3056瞎26.310.65-63.1674子JavaScirpt代码:var table…

html复选框打钩行变颜色,Excel 单元格打勾会变颜色,开发工具的复选框这样玩...

Excel中的复选框除了打钩,打叉之外还有什么其他功能吗?其实,这里面的学问可多了,可造之物也非常之多。今天,我就利用复选框来教大家制作一个特别的表格,在复选框中打钩的后,单元格的颜色就会随着…

js怎么图表在html中显示不出来的,基于Echarts图表在div动态切换时不显示的解决方式...

简单粗暴,先上图,大概长这样:在使用vue时有遇到像上图下拉框change事件切换div,change切完后大概会变成这个样子:上代码:{{ option.text }}{{selected}}export default{name:"test",data(){retur…

【UML】第13篇 序列图(2/2)——建模的方法

目录 三、序列图建模 3.1 概述 3.2 建模的步骤 3.3 举例说明步骤 1.确定主要场景和流程 2.确定参与的对象 3.绘制序列图 4.注意事项 3.4 特殊的情况 序列图是我个人认为,UML中最重要的图之一。 而且序列图,对于业务建模,也有非常好…

如何创建计算机的桌面快捷方式,怎么设置桌面快捷方式,怎么创建快捷方式到桌面...

很多win7系统用户反映说遇到这样一个问题,就是电脑上从文件服务器创建的快捷方式就会自动被删除,自己重新创建之后,过几天重新启动win7系统的时候,那些快捷方式又会自动被删除不见了,怎么办呢,下面以win7 3…

哥大计算机专业 世界排名,哥伦比亚大学计算机科学硕士排名第16(2020年TFE Times排名)...

哥伦比亚大学实力介绍哥伦比亚大学除去常青藤的榜首地位,研究生的金融工程 更是被人们称为是金工届的magic seven 并且商学院以及MBA项目是很多人垂涎已久的。更有远近闻名的国际公共关系事物学院,以及新闻专业。2020年TFE Times美国计算机科学硕士排名参…

福师计算机应用基础在线作业二及答,福师《计算机应用基础》在线作业二 下列软件中属于应用软件的是.docx...

福师《计算机应用基础》在线作业二 下列软件中属于应用软件的是.docx 计算机应用基础计算机应用基础1 1 单选题单选题1 下列软件中属于应用软件的是() D A 操作系统B 编译程序C 数据库管理系统D 财务管理系统2 以下域名中,表示商业网的是() C A eduB cnC comD org3 …

台式计算机没有usb3.0,新装的win7没有usb驱动完美解决方法(支持usb3.0/usb3.1)

最近有很多网友问,为什么我新装win7系统后usb驱动,相关的usb鼠标键盘都不能用了怎么办?大家都知道,win10系统虽然发布了几年,但是由于Win7的习惯留住了不少Win7忠实用户,因此Win7系统的使用用户还是比较多的…

为此计算机上的所有用户安装此加载项,activex 安装给所有计算机用户

我通过以下inf文件 创建了一个cab文件[version]signature"$CHICAGO$"AdvancedINF2.0[Add.Code]Test.dllTest.dll[Deployment]InstallScopemachine[Test.dll]file-win32-x86thiscabclsid{49C4436D-AA73-4324-807D-50C0D5B8AF5D}FileVersion1,0,0,0RegisterServeryesRe…

typora用Pandoc导出html,Typora安装 Pandoc实现导出功能

Typora安装 Pandoc实现导出功能问题引入在使用Typora的时候,如果想要把写好的MarkDown文件导出到其他地方的话,是比较方便的。但是Typora本身只支持PDF和HTML两种方式的导出,如下图所示,如果想导出下面的方式他就会提示安装Pandoc…

微型计算机惠普1hm20av,微型计算机原理及应用(答案).doc

微型计算机原理及应用(第3版)(修订本)答案习 题 1一、选择题1.A2.C3.B4.B5.A6.A7.B8.C9.C10.C11.C12.A13.D14.A15.D16.C在GB2312-80国家标准中,16~55区为一级汉字、56~87区为二级汉字。DBB5H-A0A0H 3B15H3BH 59DBB5H属于二级汉字。二、完成下列不同进制…

游戏教案 电子计算机,计算机模板电子教案.doc

教案,小学教案,全册教案,教案设计,教学设计,教案全集,全册教学设计,全本教案PAGEPAGE \* MERGEFORMAT 30六年级信息技术教学设计立岗小学电子教案模板教学内容1、网上论坛BBS课时1课时教学目标1、认识一个网上论坛BBS的界面,学习尝试在其中注册并浏览,发…

联想笔记本关闭锁定计算机,联想笔记本Win10怎样显示/隐藏大小写锁定及数字锁定图标...

近来,很多联想Win10笔记本用户都在抱怨自己的电脑桌面总会显示大小写锁定和数字小键盘锁定图标,看着很不习惯。那么,我们要怎样设置图标隐藏呢?下面,小编就向大家分享联想笔记本Win10设置显示/隐藏大小写锁定及数字锁定…

气象科学与计算机应用论文,面向气象数据的智能分析方法分析-计算机应用技术专业毕业论文.docx...

摘要摘要降水预测问题是一个非常复杂、重要的研究课题。一种事物从过去发展到现在再发展到未来,其发展总存在某些内在的规律,国内外的一些专家和学者们积极的进行探索, 掌握事物发展的固有规律,把预测问题置于科学的基础之上&…

mysql for update_mysql SELECT FOR UPDATE语句使用示例

以MySQL 的InnoDB 为例,预设的Tansaction isolation level 为REPEATABLE READ,在SELECT 的读取锁定主要分为两种方式:SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都…

html4基础,HTML 基础 4

有序列表、无序列表和自定义列表无序列表适合所有并列或没有上下级关系的条目的显示有序列表适合有明确排序的条目的显示自定义列表更突出自定义标题可以直接在 li 和 dd 中写新的列表来嵌套如何去除列表前的点或者数字li{list-style: none;}class和id的区别以及适用情况class可…