我想知道是否可以在快速的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实例设置暗模式?
我所做的:
感谢您的帮助!
答案 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()
}
您现在可以在模拟器中切换外观。这是测试地图和其他黑暗模式功能的好方法。
Simulator支持iOS模拟器(13.0及更高版本)的切换外观。在应用程序中,选择“调试”>“切换外观”。在命令行中使用
simctl ui
子命令,例如设置深色外观
xcrun simctl ui <device> appearance dark