网站用什么布局,怎样修改静态公司网站页面电话,做动画的网站,网站建设与管理主要学什么APP UI Automation Framework一个基于 Appium 1.8.1、TestNG#xff0c;Page Object 模式开发的 UI 自动化测试框架介绍文档结构图基本功能每秒生成一次截图通过 xml 配置待执行的测试用例通过 yml 指定待执行测试的设备及 Appium 端口用例执行失败自动重试#xff0c;且重试…APP UI Automation Framework一个基于 Appium 1.8.1、TestNGPage 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 Pagereturn 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.ymlMAIN_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/depMY_POST_PAGE_MOMENT_ARTICLE_ID: com.tencent.mm:id/yk IOSRES.ymlMAIN_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 : 设备ID3. wdaPort : iOS设备运行的时的WDA port4. class : 待运行的测试类测试执行时输入的xml样例如何运行 demodemo 实现的功能打开微信 (若未登录微信请先手动登录)然后打开朋友圈查看第一个朋友圈 (带图片的)启动 Appium然后运行以下命令方式一 将工程打成 Jar 包然后运行命令 java -jar UIAutomation-1.0-fat-tests ./task/demo.xml方式 2 IDEA 中 右键单击 demo.xml ,选择运行。见下图参考文档