4. iOS测试常用方法
1. [XCUIElement exists]方法只能确定这个View是否存在,即使不在当前屏幕上也返回True。如果要确定View是否在屏幕可见范围内,可以判断其Frame是否在Window的Frame内。
XCUIElement *window = [app.windows elementBoundByIndex:0];
if (CGRectContainsRect([window frame], [cell frame])) {
[cell tap];
}
2. 等待一个控件出现的方法(登录结果,是否已经跳转到另一个VC)
左边的VC点击确定会跳转到右边的VC
XCUIElement *alertView = app.alerts.collectionViews.buttons[@"确定"];
if ([alertView exists]) {
XCTAssertTrue([app.alerts.staticTexts[@"登录成功"] exists]);
XCUIElement *nextVC = app.staticTexts[@"B"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"exists == true"];
[self expectationForPredicate:predicate evaluatedWithObject:nextVC handler:nil];
[alertView tap];
[self waitForExpectationsWithTimeout:5 handler:nil]; //最多等待5秒直到B出现
XCTAssertTrue([app.staticTexts[@"B"] exists]);
}
3. 查看Query的过程
使用打印方法查看[XCUIElement(Query) debugDescription]。可以从DebugDescription中识别控件的Bounds属性识别控件,如下:
4. 获得TableView的自带控件
XCUIElement *prepareDelete = app.buttons[@"Delete 1"];
[prepareDelete tap]; //点击左侧编辑按钮
XCUIElement *delete = app.buttons[@"Delete"];
[delete tap]; //点击左滑出的Delete按钮(可能不叫Delete)
XCUIElement *reorder = app.buttons[@"Reorder 1"]; //第一个Cell的重排按钮(名称为Reorder和具体数据)
XCUIElement *reorder2 = app.buttons[@"Reorder 2"]; //第二个cell的重排按钮
[reorder pressForDuration:1 thenDragToElement:reorder2]; //将第一个Cell移动到第二个Cell
5. 如何滑动刷新
滑动刷新的就是实现足够距离的滑动操作。
实现方式主要是两种:
1.从屏幕上取两个点进行滑动
2.调用可滑动页面内的控件的[SwipeUp/Down]方法。
例子:
1. 取点滑动
XCUIElement *cell = [app.tables.cells elementBoundByIndex:0]; //最上方的Cell
XCUICoordinate *start = [cell coordinateWithNormalizedOffset:CGVectorMake(0, 0)];
XCUICoordinate *end = [cell coordinateWithNormalizedOffset:CGVectorMake(0, 6)]; //屏幕外一个点,dy=6据说是刷新要求的最小值
[start pressForDuration:0 thenDragToCoordinate:end];
2. Swipe
XCUIElement *table = [app.tables elementBoundByIndex:0];
[table swipeUp];
PS:对自身不可滑动控件进行Swipe滑动,若控件在可滑动控件内,会导致这个可滑动控件滑动。如上滑TableviewCell会使其Tableview上滑。
6. 按动硬件按钮的方法
XCUIDevice *device = [XCUIDevice sharedDevice];
[device pressButton:XCUIDeviceButtonHome]; //枚举只有三个值 Home键,音量Up,音量Down(模拟器只能按Home键)
7. 点击被遮挡控件的方法
XCUIElement *cell = [collectView.cells elementBoundByIndex:i];
if ([cell isHittable]) {
[cell tap];
} else {
XCUICoordinate *coo = [cell coordinateWithNormalizedOffset:CGVectorMake(0, 0)];
[coo tap];
}
PS:只能用点点击时,若点在屏幕外,目前只会出现滑动操作。
4. iOS测试常用方法的更多相关文章
- 使用appium进行ios测试,启动inspector时遇到的问题(一)
最近在公司,让做ios的自动化测试,因为以前做过android的自动化测试,用的也是appium,觉得没什么,结果一开始在搭建环境就遇到了很多的问题,现在将我遇到的问题,以及解决方法,给大家分享出来. ...
- 如何利用Pre.im分发iOS测试包
大众创新万众创业,在移动互联网的风口,移动APP开发与测试发展方兴未艾,受到了越来越多的重视.相较 iOS,Android 的开发环境更加开放.Android 开发者要测试应用时,只需发个 APK 安 ...
- 【读书笔记】iOS-软件测试与iOS测试
一,软件测试的类型. 1.软件测试按照测试类型,可以划分为:单元测试,集成测试和系统测试. 2.单元测试是指对软件系统中最小可测试单元进行的检查和验证. 3.集成测试,在iOS软件开发中,集成测试主要 ...
- iOS测试中发现一个textview控制,使用clear()无法清除文字
iOS测试中发现一个textview控制,使用clear()无法清除
- iOS 测试在应用发布前后的痛点探索以及解决方案
作者-芈 峮 前言 iOS 开发从 2010 年开始在国内不断地升温,开发和测试相关的问题不绝于耳.iOS 测试主要涉及哪些内容?又有哪些挑战呢?带着疑问我们开始第一个大问题的讨论. iOS 测试的范 ...
- 经典软件测试面试题目:Android 和 ios 测试区别?这样回答:稳!
Android 和 ios 测试区别? App 测试中 ios 和 Android 有哪些区别呢?1.Android 长按 home 键呼出应用列表和切换应用,然后右滑则终止应用:2.多分辨率测试, ...
- 【iOS测试】【随笔】帧率FPS评测
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5943263.html 背景 我们的新版App对首页的列 ...
- iOS测试常见崩溃
什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...
- 2015年iOS测试现状
本文由 伯乐在线 - nathanw 翻译,dopcn 校稿.未经许可,禁止转载! 英文出处:www.mokacoding.com.欢迎加入翻译小组. 几周前,我决定将将我在 mokacoding 上 ...
随机推荐
- redis05----Redis 中的事务
Redis支持简单的事务 Redis与 mysql事务的对比 Mysql Redis 开启 start transaction multi 语句 普通sql 普通命令 失败 rollback 回滚 d ...
- 进程调度函数schedule()分析
1.功能简述: 最主要作用就是 从就绪进程中选择一个优先级最高的进程来代替当前进程运行. 2.代码分析 schedule(); struct task_struct *tsk = cur ...
- POJ1077 Eight —— 反向BFS
主页面:http://www.cnblogs.com/DOLFAMINGO/p/7538588.html 代码一:以数组充当队列,利用结构体中的pre追溯上一个状态在数组(队列)中的下标: #incl ...
- DEDE内容页调用栏目的SEO标题、描述、关键字的方法
上篇写了<dedecms栏目页调用栏目关键词.描述的方法>,本章雨田SEOER讲述DEDE内容页调用栏目的SEO标题.描述.关键字的方法内容页调用SEO标题:在<title>& ...
- js程序开发-1
<h1>数组的常用操作</h1> push() 方法可向数组的末尾添加一个或多个元素,并返回新数组的长度. unshift() 方法可向数组的开头添加一个或更多元素,并返回新数 ...
- stl里面的空间适配器
一般而言,如果频繁地向system heap申请和释放空间很小的内存空间块(小于128B的),就会对系统内存资源产生很多内存碎片(fragment)的问题,而C++的::operator new() ...
- skynet源码阅读<7>--死循环检测
在使用skynet开发时,你也许会碰到类似这样的警告:A message from [ :0100000f ] to [ :0100000a ] maybe in an endless loop (v ...
- Python里的一些注释规范
写代码注释是一件很重要的事情,如果你写的一段函数给别人调用那么往往都需要配上一些基本的注释.写好代码可以让别人容易阅读你的代码.试想一 下:如果你在github上面找到一段你想要的代码,这段代码有20 ...
- [SoapUI] Common XPath expressions
选取节点 表达式 描述 nodename 选取此节点的所有子节点. / 从根节点选取. // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置. . 选取当前节点. .. 选取当前节点的父节点 ...
- asp.net core zipkin
微服务监控zipkin+asp.net core 0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一 ...