The*_*eff 5 ios-simulator swift xcuitest
我想知道是否有办法在 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()
Run Code Online (Sandbox Code Playgroud)
而且效果很好。
如何为 XCUIApplication 实例设置暗模式?
我所做的:
谢谢你的帮助!
小智 9
我也对这个问题感兴趣,因为我正在使用 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()
}
Run Code Online (Sandbox Code Playgroud)
在 SceneDelegate.swift 中:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
(...)
#if DEBUG
if CommandLine.arguments.contains("UITestingDarkModeEnabled") {
window?.overrideUserInterfaceStyle = .dark
}
#endif
(...)
}
Run Code Online (Sandbox Code Playgroud)
现在您的测试在黑暗模式下运行。
在 macOS 中,您可以从 Terminal.app 发出此命令
\ndefaults read NSGlobalDomain AppleInterfaceStyle\nRun Code Online (Sandbox Code Playgroud)\n其响应为
\n\n\n黑暗的
\n
在你的XCTestCase,这应该有效
func testAppleInterfaceStyleDark() {\n let app = XCUIApplication()\n var launchArguments: [AnyHashable] = []\n\n launchArguments.append("-AppleInterfaceStyle")\n launchArguments.append("Dark")\n app.launchArguments = launchArguments as! [String]\n app.launch()\n }\nRun Code Online (Sandbox Code Playgroud)\n您现在可以在模拟器中切换外观。这是测试地图和其他深色模式功能的好方法。
\n\n\n模拟器支持切换 iOS 模拟器(13.0 及更高版本)的外观。从应用程序内选择“调试”>“切换外观”。从命令行使用子命令
\nsimctl ui,例如设置深色外观
xcrun simctl ui <device> appearance dark\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1881 次 |
| 最近记录: |