如何在快速的UITests中的XCUIApplication中设置黑暗模式?

时间:2019-12-22 20:58:57

标签: swift ios-simulator xcuitest

我想知道是否可以在快速的UITests项目中为XCUIApplication设置暗模式代码。

我需要在同一测试中以亮模式和暗模式启动该应用程序。在方案中将此值设置为硬编码值将不起作用,或者从外部入侵模拟器也将不起作用(出于性能和可维护性等原因)。

目前,我将启动参数设置如下:

    let app = XCUIApplication()
    var launchArguments: [AnyHashable] = []
    launchArguments.append("-AppleLanguages")
    launchArguments.append(langCode)
    launchArguments.append("-AppleLocale")
    launchArguments.append(localeCode)
    app.launchArguments = launchArguments
    app.launch()

效果很好。

如何为XCUIApplication实例设置暗模式?

我所做的:

  • 广泛搜索Apple开发文档。
  • StackOverflow仅显示了如何在Xcode中的方案中对此进行硬编码,或者如何通过杀死模拟器,擦除它并破解plist值来从外部对模拟器进行黑客攻击。

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

我对此问题也很感兴趣,因为我正在使用UI测试来使用Fastlane截屏。目的是能够针对同一目标的不同测试在明暗模式之间切换。

RobLabs提供的解决方案在Xcode 11.4 / iOS 13.4上似乎不适用于我。我不确定这是否符合您的要求,但我使用的是自定义启动参数,然后在SceneDelegate中设置界面样式,仅适用于调试版本:

在测试中:

override func testDarkMode() { // use setUp() to affect all test cases
    app = XCUIApplication()  
    app.launchArguments.append("UITestingDarkModeEnabled")
    app.launch()
}

在SceneDelegate.swift中:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    (...)

    #if DEBUG
    if CommandLine.arguments.contains("UITestingDarkModeEnabled") {
        window?.overrideUserInterfaceStyle = .dark
    }
    #endif

    (...)    
}

现在您的测试在黑暗模式下运行。

答案 1 :(得分:2)

在macOS中,可以从Terminal.app中发出此命令

defaults read NSGlobalDomain AppleInterfaceStyle

哪个回复

黑暗


在您的XCTestCase中,这应该有效

    func testAppleInterfaceStyleDark() {
        let app = XCUIApplication()
        var launchArguments: [AnyHashable] = []

        launchArguments.append("-AppleInterfaceStyle")
        launchArguments.append("Dark")
        app.launchArguments = launchArguments as! [String]
        app.launch()
    }

自Xcode 11.4 Beta起更新

您现在可以在模拟器中切换外观。这是测试地图和其他黑暗模式功能的好方法。

  • 从“模拟器”菜单项>“功能”>“切换外观”或 shift A

Simulator支持iOS模拟器(13.0及更高版本)的切换外观。在应用程序中,选择“调试”>“切换外观”。在命令行中使用simctl ui子命令,例如设置深色外观

xcrun simctl ui <device> appearance dark