在位于 XCTestCase 的单独文件中的函数中捕获屏幕截图

Posted

技术标签:

【中文标题】在位于 XCTestCase 的单独文件中的函数中捕获屏幕截图【英文标题】:Capturing screenshot within a function located in a separate file from your XCTestCase 【发布时间】:2018-08-23 21:33:14 【问题描述】:

我目前正在使用 XCUITest 编写自动化 ios 测试。我有一个实际调用测试的主 .swift 文件,然后我有一个单独的 .swift 文件,其中包含一些我创建的扩展 XCUIElement 类的函数。

有没有办法在这些扩展功能中附上截图,可以包含在测试结果中?我似乎无法弄清楚。谢谢!

【问题讨论】:

【参考方案1】:

Here is a post I made 解释如何截取屏幕截图并将其附加到测试中的活动中。附件和活动 API 可以在您的测试中的任何地方使用,而不仅仅是在您的测试类中。

要仅截取XCUIElement 扩展中的当前元素,您只需调用screenshot() 而不是element.screenshot(),就像在其他地方需要的那样。要截取整个屏幕,初始化一个新的XCUIApplication 并调用screenshot()

extension XCUIElement 
     func tapTwice() 
        takeScreenshot()
        tap()
        tap()
    
    func takeScreenshot() 
        XCTContext.runActivity(named: "Take screenshot")  activity in
            let screenshot = XCTAttachment(screenshot: screenshot())
            screenshot.lifetime = .keepAlways
            activity.add(screenshot)
        
    

【讨论】:

谢谢!我不确定初始化一个新的 XCUIApplication 是否会重新启动被测应用程序。 不,初始化一个新的XCUIApplication 只是创建一个带有应用链接的新对象。 :)

以上是关于在位于 XCTestCase 的单独文件中的函数中捕获屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

XCTestCase 不提供项目类

c ++:OOP:如何在单独的头文件中更新数组?

如何将实例变量或属性添加到 XCTestCase?

如何通过 url 将数据从 python 文件发送到位于单独项目中的 html 文件(没有 html 作为模板)

如何将状态值从一个组件访问到位于单独文件中的其他功能(不是组件)?反应js

Laravel 将数据从 ajax 传递到位于单独文件中的模态视图,导致模态视图无法呈现