UI测试:加载其他应用

打开其他应用

我们可以通过 XCUIApplication 类来初始化自己应用和其他应用(通过包名)

其他系统应用 bundleid 参考iOS 删除自带应用

XCUIDevice

XCUIDevice 可以模拟设备的具体操作,比如点击 home 键、音量键等

返回 Home

/// 点击 Home 键
func toHome() {XCUIDevice.shared.press(XCUIDevice.Button.home);
}

springboard 使用

可以通过com.apple.springboard来加载系统页面。从而进行模拟主界面操作。

let springboard = XCUIApplication.init(bundleIdentifier: "com.apple.springboard")
springboard.launch()

下拉打开通知

在页面中选取两个点,然后通过拖动模拟滑动显示通知(Objective-c 可以,而 Swift 不能操作)。

- (void)openNotification{XCUIApplication *app = self.springboard;XCUICoordinate *coord1 = [app coordinateWithNormalizedOffset:CGVectorMake(0.1, 0.01)];XCUICoordinate *coord2 = [app coordinateWithNormalizedOffset:CGVectorMake(0.1, 0.8)];[coord1 pressForDuration:0.1 thenDragToCoordinate:coord2];
}

Safari 浏览器使用

可以通过com.apple.mobilesafari来加载浏览器,可以测试加载网页、通用链接唤醒应用、深链接唤醒应用等。

网页加载测试

定义加载方法

    /// 打开浏览器 访问地址/// - Parameter url: 访问地址 url/// - Returns: 浏览器实例,以便获取后续元素和延迟处理/// - Important: go 按钮点击后,进入异步操作,可能会耗时较久,建议后续元素操作设置较大(50-60)超时时间,以免超时崩溃func openSafariInput(url:String) -> XCUIApplication {let safari = XCUIApplication.init(bundleIdentifier: "com.apple.mobilesafari")safari.launch()// 确保唤醒应用XCTAssert(safari.wait(for: .runningForeground, timeout: 5), "应该唤起浏览器")// 开新 tab,防止其他影响safari.buttons["TabOverviewButton"].tap()safari.buttons["Close"].tap()// 输入地址let textfield = safari.textFields["Address"]textfield.tap()print("输入地址:\(url)")textfield.typeText(url)let goButton = safari.buttons["Go"]goButton.tap()sleep(1)return safari}

打开百度官网测试

    func testOpenBaidu() {let safari = openSafariInput(url: "https://www.baidu.com")let baidu = safari.otherElements["百度一下"] // 可以通过 safari.debugDescription 来查看元素进行验证XCTAssert(baidu.waitForExistence(timeout: 60), "应该加载百度主页") // 设置超长超时,避免没加载出页面导致测试异常//safari.terminate() // 关闭}

运行效果图如下:

注意事项

  • 输入完地址后,请求是异步操作,可能会耗费较长时间,所以下一步操作应该将超时设置大一点。

  • 不同iOS版本浏览器样式可能不一样,搜索流程也可能不一样,所以需要根据打印元素层(xxx.debugDescription)来具体操作。

如何定位全局搜索?

我们可以通过滑动点到点触发搜索页面,但是通过打印 debugDescription 方法却没有 textfield 元素。

iOS UITest之加载其他应用相关推荐

  1. iOS原生如何加载HTML中img标签的图片

    原文出自:iOS原生如何加载HTML中img标签的图片 前言 最近iOS App项目中使用Webview加载H5页面比较多,也有不少朋友经常问到这个问题,在这里我也学习学习如何通过iOS原生的方式来加 ...

  2. CGContextRef绘图-iOS球形波浪加载进度控件-HcdProcessView详解

    简书也有发布:http://www.jianshu.com/p/20d7... <iOS球形波浪加载进度控件-HcdProcessView>这篇文章已经展示了我在项目中编写的一个球形进度加 ...

  3. ios加载本地html懒加载图片方案,IOS开发中加载大量网络图片优化方法

    IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着 ...

  4. 【iOS】—— 懒加载

    懒加载 首先,要明白懒加载的概念,懒加载的实质就是延迟加载,iOS设备在加载时有限度,如果我们的数据很大,一次性将其全部加载出来可能对内存的损耗比较大,懒加载的作用就是将其在需要的时候再加载出来. 懒 ...

  5. android隐私违规获取问题处理 及 Hook拦截处理记录 (VirtualXposted/epic等)及 android/iOS 多bundle加载方式修复方案

    文章目录 1.如何检测/复现 android_id/Mac地址等权限被超前获取 ```但是,检测机构是如何检测我们的APP?``` 关于hooklogin插件 太极 ---- 以上基础工作完成---- ...

  6. veImageX 演进之路:iOS 高性能图片加载 SDK

    动手点关注 干货不迷路 1.  SDK简介 图片在业务应用场景是一个常见的元素,veImageX(简称ImageX)为业务提供了灵活.高效的一站式图片处理解决方案,包括了服务端 SDK.上传 SDK ...

  7. ios应用程序加载分析(一)

    app启动分析+猜测 首先通过入口函数main断点查看 nothing ... 通过load入口断点查看 得到大致的堆栈关键信息 (反向调用信息如下) dyld - _dyld_start dyld ...

  8. ios应用程序加载分析(二)

    为了不至于分析链条发生断层,请参阅ios应用程序加载分析(一) _dyld_objc_notify_register ---- sNotifyObjcInit 是如何关联上的 sNotifyObjcI ...

  9. UTF8文件带BOM引起的问题——iOS端竟然加载出了html代码

    起因是公司iOS端竟然加载出来了HTML代码,百思不得其解,查文献,原来如此... UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM. 所以不含 BOM 的 U ...

最新文章

  1. amazeui页面分析5
  2. 上海理工大学第二届“联想杯”全国程序设计邀请赛 Identical Day 思维 + 暴力
  3. c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...
  4. Python操作mySql数据库封装类
  5. 拓端tecdat|R语言ggsurvplot绘制生存曲线报错 : object of type ‘symbol‘ is not subsettable
  6. caffe测试单张图片
  7. hexo添加_hexo 添加标签和分类
  8. 虚拟机以及Linux CentOS 7安装
  9. VS2015社区版、企业版、专业版下载官网地址
  10. 【js】自爆脚本,我抢了124盒月饼,马云看了也很惊讶
  11. ubuntu+网易云安装
  12. Visual SourceSafe Explorer界面出现乱码+字体翻转
  13. 一种 Python 获取时间序列数据集的方式
  14. 小技巧(1):Ububtu18.04中.z01 .z02 .z03此类拆分后压缩文件解压缩办法(以及常用解分卷压缩方法)
  15. vue.js 动态合并单元格问题
  16. Eternity 《天长地久》
  17. 一文带你看透 Chrome 浏览器架构
  18. python 如何调试uc浏览器_如何使用 UC浏览器开发者版 进行移动端调试
  19. 自动驾驶(三十四)---------可行驶区域检测
  20. 基于STM32的高精度温度测控系统-原理图设计

热门文章

  1. 基于Kafka实现分布式事件驱动
  2. SpringMVC图片上传
  3. Linux下的格式化字符串漏洞利用姿势
  4. MongoDB使用小结:一些常用操作分享
  5. 生成从A到Z这个一个字符序列
  6. 【转】C#对象的深拷贝与浅拷贝
  7. GARFIELD@07-12-2005 DILBERT
  8. C#学习笔记:多态与隐藏,覆盖
  9. 2.MyBatis 动态SQL
  10. Gluster 常用命令