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().terminate()` 后阻止 XCode 调用调试器
如何在 swift UITests 中的 XCUIApplication 中设置暗模式?