XCUIApplication 替换 UIATarget captureScreenWithName()

Posted

技术标签:

【中文标题】XCUIApplication 替换 UIATarget captureScreenWithName()【英文标题】:XCUIApplication replacements for UIATarget captureScreenWithName() 【发布时间】:2016-09-02 21:29:39 【问题描述】:

我们正在尝试从 UIAutomation 迁移到 XCUITests,并且确实使用 captureScreenWithName() API 以编程方式生成屏幕截图。 XCUITests 中的替代品是什么? (我知道如果出现错误,会自动截取屏幕截图,但我们有一个特殊的测试,它永远在循环中运行,并通过类似于 appium-xcuitest-driver https://github.com/appium/appium-xcuitest-driver 的网络评估 QA click,tap 命令) 我是否需要像 appium 的家伙那样撕掉私有标头 (XCAXClient_ios.h) 以获得屏幕截图 API?

编辑 我将实际代码行用于接受的解决方案 https://github.com/fastlane/fastlane/blob/master/snapshot/lib/assets/SnapshotHelper.swift IOS 就是这个

 XCUIDevice.sharedDevice().orientation = .Unknown

或在 objC 中

[XCUIDevice sharedDevice].orientation =UIInterfaceOrientationUnknown;

我使用主机上的一个进程在调用之前在“Logs/Test/Attachments”目录中查找所有 Screenshot_*.png 文件,然后在调用之后找到新截图作为添加到此目录中的新文件。

【问题讨论】:

【参考方案1】:

手势(点击、滑动、滚动...)会导致屏幕截图,而且屏幕截图也经常在定位元素或评估预期时拍摄。

Fastlane 的快照工具使用旋转到未知方向来触发屏幕截图事件(对应用没有影响):https://github.com/fastlane/fastlane/tree/master/snapshot - 如果您想控制某些屏幕截图,可以使用它。

【讨论】:

以上是关于XCUIApplication 替换 UIATarget captureScreenWithName()的主要内容,如果未能解决你的问题,请参考以下文章

无法从 XCTest 中的 XCUIApplication 访问 TextEditor

XCUIApplication 的通用点击函数

可以在调用 `XCUIApplication().terminate()` 后阻止 XCode 调用调试器

如何在 swift UITests 中的 XCUIApplication 中设置暗模式?

如何从 XCUIApplication 对象访问当前的 SceneDelegate?

XCUIApplication 仅适用于 iOS 9.0 或更新版本,swift3