如何在 swift UITests 的 XCUIApplication 中设置暗模式?
How to set Dark Mode in XCUIApplication in swift UITests?
我想知道是否有办法在 swift 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 开发文档。
- Whosebug 只展示了如何在 Xcode 的方案中对此进行硬编码,或者如何通过杀死模拟器、擦除它和破解 plist 值从外部破解模拟器。
感谢您的帮助!
在 macOS 中,您可以从 Terminal.app 发出此命令
defaults read NSGlobalDomain AppleInterfaceStyle
响应为
Dark
在您的 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 supports toggling appearance for iOS simulators (13.0 and later). From within the app select Debug > Toggle Appearance. From the command line use the simctl ui
subcommand, e.g. to set dark appearance
xcrun simctl ui <device> appearance dark
我对这个问题也很感兴趣,因为我正在使用 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
(...)
}
现在您的测试在黑暗模式下运行。
我想知道是否有办法在 swift 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 开发文档。
- Whosebug 只展示了如何在 Xcode 的方案中对此进行硬编码,或者如何通过杀死模拟器、擦除它和破解 plist 值从外部破解模拟器。
感谢您的帮助!
在 macOS 中,您可以从 Terminal.app 发出此命令
defaults read NSGlobalDomain AppleInterfaceStyle
响应为
Dark
在您的 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 supports toggling appearance for iOS simulators (13.0 and later). From within the app select Debug > Toggle Appearance. From the command line use the
simctl ui
subcommand, e.g. to set dark appearance
xcrun simctl ui <device> appearance dark
我对这个问题也很感兴趣,因为我正在使用 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
(...)
}
现在您的测试在黑暗模式下运行。