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测试常用方法的更多相关文章

  1. 使用appium进行ios测试,启动inspector时遇到的问题(一)

    最近在公司,让做ios的自动化测试,因为以前做过android的自动化测试,用的也是appium,觉得没什么,结果一开始在搭建环境就遇到了很多的问题,现在将我遇到的问题,以及解决方法,给大家分享出来. ...

  2. 如何利用Pre.im分发iOS测试包

    大众创新万众创业,在移动互联网的风口,移动APP开发与测试发展方兴未艾,受到了越来越多的重视.相较 iOS,Android 的开发环境更加开放.Android 开发者要测试应用时,只需发个 APK 安 ...

  3. 【读书笔记】iOS-软件测试与iOS测试

    一,软件测试的类型. 1.软件测试按照测试类型,可以划分为:单元测试,集成测试和系统测试. 2.单元测试是指对软件系统中最小可测试单元进行的检查和验证. 3.集成测试,在iOS软件开发中,集成测试主要 ...

  4. iOS测试中发现一个textview控制,使用clear()无法清除文字

    iOS测试中发现一个textview控制,使用clear()无法清除

  5. iOS 测试在应用发布前后的痛点探索以及解决方案

    作者-芈 峮 前言 iOS 开发从 2010 年开始在国内不断地升温,开发和测试相关的问题不绝于耳.iOS 测试主要涉及哪些内容?又有哪些挑战呢?带着疑问我们开始第一个大问题的讨论. iOS 测试的范 ...

  6. 经典软件测试面试题目:Android 和 ios 测试区别?这样回答:稳!

    Android 和  ios 测试区别? App 测试中 ios 和 Android 有哪些区别呢?1.Android 长按 home 键呼出应用列表和切换应用,然后右滑则终止应用:2.多分辨率测试, ...

  7. 【iOS测试】【随笔】帧率FPS评测

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5943263.html   背景 我们的新版App对首页的列 ...

  8. iOS测试常见崩溃

    什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...

  9. 2015年iOS测试现状

    本文由 伯乐在线 - nathanw 翻译,dopcn 校稿.未经许可,禁止转载! 英文出处:www.mokacoding.com.欢迎加入翻译小组. 几周前,我决定将将我在 mokacoding 上 ...

随机推荐

  1. spring mvc带参数重定向

    http://blog.csdn.net/jackpk/article/details/19121777/ https://isudox.com/2017/02/16/spring-mvc-redir ...

  2. js运行机制及异步编程(一)

    相信大家在面试的过程中经常遇到查看执行顺序的问题,如setTimeout,promise,async await等等,各种组合,是不是感觉头都要晕掉了,其实这些问题最终还是考察大家对js的运行机制是否 ...

  3. YTU 2427: C语言习题 整数排序

    2427: C语言习题 整数排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 391  解决: 282 题目描述 用指向指针的指针的方法对n个整数排序并输出.要求将排序单独写成一个函数 ...

  4. codeforces 441C. Valera and Tubes 解题报告

    题目链接:http://codeforces.com/problemset/problem/441/C 题目意思:将n * m 的矩阵分成 k 堆.每堆是由一些坐标点(x, y)组成的.每堆里面至少由 ...

  5. 栏目抓取网站日kafka

    #!/usr/bin/python3#-*- coding:utf-8 -*-"""create 2018-02-27author zldesc: https://ind ...

  6. 中文用户名的js检验正则

    原文:http://www.jb51.net/article/20719.htm 好多网站需要用中文用户名注册,下面的代码就是客户端检测.强烈建议后台也要控制一下. username1: " ...

  7. [Selenium] 如何使用Chrome Options 定制测试Chrome 浏览器的特定属性 (类似FirefoxProfiles)

    Chrome Options 类似于FirefoxProfiles,用于定制待测试的Chrome 浏览器的特定属性 1)如果希望测试某个浏览器插件,可通过addExtensions方式提前加载以.cr ...

  8. Cocos2dx+lua合适还是Cocos2dx+js合适?

    问题: 开发cocos2dx手游Cocos2dx+lua合适还是Cocos2dx+js合适 百牛信息技术bainiu.ltd整理发布于博客园 回答: 作者:廖宇雷链接:https://www.zhih ...

  9. Centos6.5 6.6 (均可) 重置密码或强行破解root密码 简单操作

    centos忘记root密码怎么重置root密码? 使用Linux系统的时候root密码是十分关键的安全机制. 但是假设那天丢失了root密码的话问题就严重了. 百牛信息技术bainiu.ltd整理发 ...

  10. absolute属性与IE6/IE7之间的误会

    三.absolute属性与IE6/IE7之间的误会 absolute属性确实存在不少兼容性的问题,首先absolute属性定位相关(left/top)的些bug(例如IE6的奇偶bug)这里不予以讨论 ...