Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在swift UITests的XUIApplication中设置暗模式?_Swift_Ios Simulator_Xcuitest - Fatal编程技术网

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

如何在swift UITests的XUIApplication中设置暗模式?,swift,ios-simulator,xcuitest,Swift,Ios Simulator,Xcuitest,我想知道是否有办法在swift UITests项目中为XUIApplication的代码设置暗模式 我需要在同一测试中以亮模式和暗模式启动应用程序。在方案中将其设置为硬编码值将不起作用,或者从外部入侵模拟器也不起作用(出于性能和可维护性等原因) 目前,我设置了如下启动参数: let app = XCUIApplication() var launchArguments: [AnyHashable] = [] launchArguments.append("-AppleLa

我想知道是否有办法在swift UITests项目中为XUIApplication的代码设置暗模式

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

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

    let app = XCUIApplication()
    var launchArguments: [AnyHashable] = []
    launchArguments.append("-AppleLanguages")
    launchArguments.append(langCode)
    launchArguments.append("-AppleLocale")
    launchArguments.append(localeCode)
    app.launchArguments = launchArguments
    app.launch()
而且效果很好

如何为XUIApplication实例设置暗模式

我所做的:

  • 广泛搜索苹果开发文档
  • StackOverflow只展示了如何在Xcode中的scheme中硬编码,或者如何通过杀死模拟器、擦除模拟器和破解plist值从外部破解模拟器

谢谢你的帮助

在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
模拟器支持为iOS模拟器(13.0及更高版本)切换外观。在应用程序内选择调试>切换外观。从命令行使用
simctl ui
子命令,例如设置深色外观

xcrun simctl用户界面外观暗

我也对这个问题感兴趣,因为我正在使用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

    (...)    
}

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

也许这有帮助:不,不,不太可能。我更新了这个问题,以明确通过关闭、擦除和插入plist值从外部入侵模拟器并不是指示XUIApplication在暗模式下启动的解决方案,这是问题的前提。还提到在XCode UI中的方案中设置此选项也不是一个选项。可以尝试的潜在参数:
-AppleInterfaceStyle Dark
。我发现
默认值中的参数为nsglobaldomainappleinterfacestyle
。但是它需要测试来验证你就是那个人!(或者我不知道是哪个女人)。无论如何,这是有效的。如果你在回答中加上这个,我会接受的。另外,当你说你在哪里找到它时,我有点困惑——这是命令吗?或者它是xcode中的什么东西?感谢您提供更多信息:)@TheJeff,我个人需要更多了解如何在XUIApplication中使用launchArguments,但这应该是可行的:
launchArguments.append(“-AppleInterfaceStyle Dark”)
。根据我几天前的原始评论向@TheJeff大声呼喊,以便进行测试。谢谢Rob,非常有帮助-在任何地方都找不到。不幸的是,在我的测试中,它不起作用。该应用程序仍在模拟器中以灯光模式启动。该代码是否适用于XCUITest?是的。您是否正在使用Xcode 11(当前版本为11.3.1)以及运行iOS 13的更新/当前模拟器?您是否使用当前的swift 5代码编译?您是否尝试过重置正在运行的模拟器?模拟器在“设置”下是否将暗模式作为开发人员选项?这种使用启动参数设置暗模式的方法不适用于我-Xcode 11.3.1在iOS 13.3模拟器上的测试。如果使用fastlane,更简单的方法是在配置中使用内置暗模式标志。在这里搜索黑暗模式:@TheJeff虽然快速车道更容易,但据我所知,没有办法让一张截图使用黑暗模式。如果您想要一个“支持暗模式”的屏幕截图,Peter的解决方案工作得更好,因为它可以针对一个测试用例进行配置。它似乎也比依赖模拟器的参数要简单得多,这些参数没有文档记录,而且似乎经常变化。是的,问题是为所有内容设置它,而不是为一个屏幕设置,但是我同意你的观点,这似乎是在一个屏幕上轻松实现这一点的唯一方法。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    (...)

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

    (...)    
}