UI Tests有什么用?

它可以通过编写代码、或者是记录开发者的操作过程并代码化,来实现自动点击某个按钮、视图,或者自动输入文字等功能。

1. 添加UI Tests

  • 如果是新项目,则创建工程的时候可以直接勾选选项,如下图

  • 如果是已有的项目,可以通过添加target的方式添加一个UI Tests,点击xcode的菜单,找到target栏并点击,在Test选项中选择iOS UI Testing Bundle

添加成功

默认的UITests方法都是以test开头的。这里的testExample是系统自动生成的方法。

2. 添加测试代码

有两种方式

  • 手动添加

新手不推荐自己写,很麻烦,坑也很多。我也是用的自动添加,然后再自己调整。

  • 自动添加

这里有个操作技巧。就是开始录制了以后(也就是app启动了以后),可以再次点击这个按钮来暂停,某些不需要记录的操作完成以后,可以再次点击启动。这样在同一个逻辑需要多次调整的时候,就可以避免一些重复代码了。

3. 再次运行写好的Test

自动添加的代码,你再次运行这个测试用例的时候,不一定能正常运行,会有一些bug,需要再次调整。

注意事项:

  • 如果你下一步需要点击的控件被某个视图挡住了,你需要先隐藏遮盖视图,再进行点击,否则会报错。比如在显示Hud的时候和键盘弹出的时候,收键盘需用最直观的方式,类似点击键盘上面的returnDone,而不是点击空白区域那种。
  • textField.typeText("") 方法是直接在当前内容的后面进行添加,这里我是把清空的按钮在输入期间显示了出来,如果需要完全的更改textFieldtext,就先点击清空按钮。
  • 获取到的控件数据,基本都是数组的形式,然后根据一个值来筛选,自动生成的一般是根据text或者title来筛选,某些界面可能存在两个按钮的title一样,或者两个textFieldtext一样,所以需要通过一个额外的属性来筛选,也就是accessibilityIdentifier,这个属性需要手动设置。至于筛选的方法就是类似app.buttons.element(matching: .button, identifier: T_LoginBtn)
  • 部分控件获取不到可能是因为isAccessibilityElement属性被设置成了NO,不过这个属性的默认值是YES,我也不太清楚什么情况下他会变成NO,下面是Apple的注释。
 Return YES if the receiver should be exposed as an accessibility element. default == NOdefault on UIKit controls == YES Setting the property to YES will cause the receiver to be visible to assistive applications.
复制代码
  • tableView中获取cell上面的控件,系统自动生成的代码会获取cell的集合,然后根据title或者text之类的属性来筛选类似下面这段代码,明显这不是一个好的方式。这种情况我们可以获取cell的集合,然后根据index来选择指定的cell。具体的代码可以参考下面购物车的测试代码。
tablesQuery.cells.containing(.staticText, identifier:"澳洲直邮Devondale德运奶粉高钙全脂奶粉成人奶粉1kg ")
复制代码
  • 当代码重复进行多次点击的时候,比如写个for循环点击50次,你并不需要考虑点击太快会不会出现什么问题,因为每次点击的中间,系统都会有个等待响应的时间,只有当进程空闲的时候,才会进行点击。不过,具体运行方式可能不是我说的这样,不过确实有个类似的等待时间。上面的这种说法只是我自己的理解。
  • UITests可以配合断言来使用,我个人对断言用的并不是很好,这两段Demo里面并没有用到断言,如果需要请自行添加。类似下面的代码,就是判断textField是否存在。 XCTAssertEqual(textField.exists, true)

4. 下面是两个我写好的测试代码

1. 登录的模拟测试,这个要复杂一些,涉及了界面跳转和一些重复点击。

2. 购物车的模拟测试,这个主要是给大家看看tableView这类集合视图的操作。

这是我项目的tabbar,两段测试代码最开头都有app.tabBars.buttons["我的"].tap()这种代码,就是tabbar的切换。代码的前面会附上购物车和登录界面的设计图。

    /**这里分三步:1. 国家地区为中国时,判断手机号是否正确2. 国家地区不是中国时,判断手机号是否正确3. 正确的账号密码,登录功能*/func testLogin() {let app = XCUIApplication()let window = app.windows.element(boundBy: 0)app.tabBars.buttons["我的"].tap()window.press(forDuration: 1)//---------------------1//找到手机号的输入框let textField = app.textFields["请输入手机号"]XCTAssertEqual(textField.exists, true)//点击textField.tap()//修改输入框的输入textField.typeText("187027813111")//获取清空手机号的按钮let clearTextButton = app.textFields["请输入手机号"].buttons["Clear text"]//收键盘app.buttons["确定"].tap()//找到登录按钮let button = app.buttons.element(matching: .button, identifier: T_LoginBtn)//点击登录button.tap()//暂停2秒window.press(forDuration: 2)//---------------------2//跳到选择国家界面let selectCountry = app.buttons["login arrow"]selectCountry.tap()let tablesQuery = app.tables//选中一个国家并返回tablesQuery.staticTexts["爱沙尼亚"].tap()//点击登录button.tap()//暂停2秒window.press(forDuration: 2)textField.tap()//清空账号信息clearTextButton.tap()textField.typeText("18702781315")//收键盘app.buttons["确定"].tap()//再次选中国家selectCountry.tap()tablesQuery.staticTexts["中国"].tap()//点击登录button.tap()//暂停2秒window.press(forDuration: 2)//---------------------3let pwdTextField = app.secureTextFields.element(matching: .secureTextField, identifier: T_PWDLoginKey)pwdTextField.tap()pwdTextField.typeText("123456")//输入完成点击确认按钮let doneButton = app.buttons["Done"]doneButton.tap()button.tap()}
复制代码
    /**购物车的测试模型*/func testShopCart() {let app = XCUIApplication()app.tabBars.buttons["tab shopcart"].tap()//获取tableView的所有celllet tablesCells = app.tables.cells//遍历cell(0..<tablesCells.count).forEach { (index) inlet cell = tablesCells.element(boundBy: index)cell.buttons["shopCart add"].tap()cell.buttons["shopCart add"].tap()cell.buttons["shopCart add"].tap()cell.buttons["shopCart reduce"].tap()cell.buttons["shopCart reduce"].tap()cell.buttons["shopcart unselect"].tap()cell.buttons["shopcart unselect"].tap()}}
复制代码

参考链接:

Xcode7 UI自动化测试详解 带demo UITests

UITests操作指南相关推荐

  1. 叛乱联机服务器未响应,叛乱沙漠风暴怎么开服 叛乱沙漠风暴开服操作指南详解 安装准备-游侠网...

    叛乱沙漠风暴怎么开服?游戏一款多人联机操作游戏,在开服前期要做好相应的准备工作,也就是设置一些选项,这里给大家带来了"xudong162"分享的叛乱沙漠风暴开服操作指南详解,详情一 ...

  2. oracle读书笔记之Oracle 11g R2 DBA操作指南(前三章)

    Oracle 11g R2 DBA操作指南是我学习的第一本讲述oracle数据库知识的书籍,在此记录下自己的学习笔记,对于书中的知识点本人通过实际操作进行验证. 1.Oracle数据库基础 1.1.关 ...

  3. tcp转串口_PROFIBUS DP与Modbus/TCP网络转换操作指南

    >>PROFIBUS DP转Modbus/TCP网关操作指南 摘要: 本文以NT100-RE-DP网关为例,实现Modbus/TCP Client与PROFIBUS DP设备间的通讯,从而 ...

  4. GitHub使用教程详解——官网操作指南(翻译)

    GitHub使用教程详解--官网操作指南(翻译) GitHub使用指南 原文地址:GitHub官网 示例项目:Hello World 十分钟轻松教学 在学习计算机语言编程的过程中创建Hello Wor ...

  5. 拨号到公司网络操作指南

    拨号到公司网络操作指南 转载于:https://blog.51cto.com/itlingm/399066

  6. 最快捷的Linux命令查询工具来了:「我该怎么做XX」,一句话自动返回操作指南...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 无论你是Linux萌新用户还是老司机,使用命令行总会遇到不懂的问题. 遇到问题要么去论坛询问.谷歌搜索,要么查自带命令手册(RTFM),过 ...

  7. 开放应用模型操作指南(一)| 云服务一键接入 OAM 体系

    作者 | 邓洪超  阿里云容器平台软件工程师 导读:Open Application Model(OAM)是阿里云联合微软等国际顶级技术团队联合发布的开放应用模型技术.旨在通过全新的应用定义.运维.分 ...

  8. 计算机文化基础操作考试,(计算机文化基础上机考试操作指南.doc

    (计算机文化基础上机考试操作指南 <计算机文化基础>上机考试操作指南 一.考试说明: 本考试为无纸化考试,考生按照监考老师的指引进入考场,在指定的座位参加考试. 二.登录系统 1.用鼠标双 ...

  9. kubernetest master 节点恢复灾备恢复操作指南

    kubernetest master 节点恢复灾备恢复操作指南 本文基本转载别人文章,文末会标明出处. 1. 基本说明 ​ 本文档简述了Kubernetes主节点灾备恢复的相关步骤,供在发生k8s m ...

最新文章

  1. 第三章:创建用户界面组件--可视化组件(一)
  2. PHP put提交和获取数据
  3. JavaScript学习笔记04【高级——DOM和事件的简单学习、BOM对象】
  4. python利用特征进行可视化样本显示_利用Python进行机器学习之特征选择
  5. 操作可能会破坏运行时稳定性的解决办法
  6. vue点击按钮打开下拉菜单_vue 点击弹出下拉菜单 点击其他页面收回菜单
  7. python openoffice_使用Python创建openoffice .odt文档
  8. 计算机组装检测与数据恢复,计算机检测维修与数据恢复.doc
  9. java 社招 简历_招聘java简历模板
  10. pta C语言选择题
  11. 使用python创建数组的方法
  12. extjs 中时间控件中 时分秒
  13. Linux上使用腾讯QQ与TIM
  14. 基于vueJs框架的翻页组件
  15. iOS App 常用的分类
  16. 淘宝运营 钻展、智钻的定义 优势所在
  17. Tableau-盒须图
  18. 英语SouthRedAgate南红玛瑙southredagate单词
  19. 教育行业如何做好数据治理?
  20. 向量组相关定理及其推论

热门文章

  1. How Tomcat Works(十一)
  2. android平台自动化编译环境搭建一hudson安装
  3. Jquery 常用方法经典总结
  4. Xenapp安装后手动更改XML Service端口,以便使用不同于 IIS 的端口
  5. android在控制台签名apk
  6. 趣味理解:三层架构与养猪—《.NET深入体验与实战精要》
  7. [转] 微软SQL Server 2008故障转移集群概述(Windows Server Failover Clustering (WSFC))
  8. china-pub计算机图书最新一周排行榜
  9. SUCEFUL:将ATM变得“惟命是从”的新型恶意程序
  10. AbstractBeanDefinition:lenientConstructorResolution属性源码分析