UITests-如何在 UITests 中获取当前语言
UITests-How to get current language in UITests
XCUIApplication *app = [[XCUIApplication alloc] init];
[app.buttons[@"login"] tap];
如上所示,在 tests.m 文件中,我想通过字符串 "login" 获取登录按钮,但是,我的应用程序支持多国语言。如何获取我的应用程序的当前语言。
下面的方法是我获取当前语言的方法。用户在我的应用程序的设置视图中设置语言。我将当前语言存储在 NSUserDefaults 中。
+ (NSString*)currentLanguage
{
NSUserDefaults *lanUser = [NSUserDefaults standardUserDefaults];
NSString *currentLanguage = [lanUser valueForKey:kCNOGASingularLanguage];
if([currentLanguage length]==0)
currentLanguage = kApplicationLanguageEnglish;
return currentLanguage;
}
将用户的语言存储在您应用的 UserDefaults
中,然后从您的 UI 测试中访问它是行不通的。您的应用和 UITest 运行 作为单独的进程,这意味着您的 UITest 无法访问您应用的 UserDefaults
有一个简单的解决方案:要独立于用户语言,您可以在 UIButton
上设置 accessibilityIdentifier
,然后通过 accessibilityIdentifier
:[=27 访问按钮=]
在您的应用中:
button.accessibilityIdentifier = @"login";
在你的UI测试中:
[app.buttons[@"login"] tap];
从不显示 accessibilityIdentifier,VoiceOver
也不会读取它,因此不必对其进行本地化。只需确保您使用的是 accessibilityIdentifier
而不是 而不是 accessibilityLabel
。因为 accessibilityLabel
将由 VoiceOver
供残障用户阅读,因此应进行本地化。
备选方案
如果您不能使用 accessibilityIdentifier
来查询您的 UI 元素,您可以在 UI 测试中使用应用的 LocalizableStrings
文件来获取本地化的按钮标题(在这种情况):
首先将您的 Localizable.strings
文件添加到您的 UI 测试目标,然后通过 UI 测试包访问该文件以获取本地化字符串(我使用了一些辅助方法那个):
func localized(_ key: String) -> String {
let uiTestBundle = Bundle(for: AClassFromYourUITests.self)
return NSLocalizedString(key, bundle: uiTestBundle, comment: "")
}
前段时间我写了一些关于此的 blog post 内容,其中包含更多详细信息。
XCUIApplication *app = [[XCUIApplication alloc] init];
[app.buttons[@"login"] tap];
如上所示,在 tests.m 文件中,我想通过字符串 "login" 获取登录按钮,但是,我的应用程序支持多国语言。如何获取我的应用程序的当前语言。
下面的方法是我获取当前语言的方法。用户在我的应用程序的设置视图中设置语言。我将当前语言存储在 NSUserDefaults 中。
+ (NSString*)currentLanguage
{
NSUserDefaults *lanUser = [NSUserDefaults standardUserDefaults];
NSString *currentLanguage = [lanUser valueForKey:kCNOGASingularLanguage];
if([currentLanguage length]==0)
currentLanguage = kApplicationLanguageEnglish;
return currentLanguage;
}
将用户的语言存储在您应用的 UserDefaults
中,然后从您的 UI 测试中访问它是行不通的。您的应用和 UITest 运行 作为单独的进程,这意味着您的 UITest 无法访问您应用的 UserDefaults
有一个简单的解决方案:要独立于用户语言,您可以在 UIButton
上设置 accessibilityIdentifier
,然后通过 accessibilityIdentifier
:[=27 访问按钮=]
在您的应用中:
button.accessibilityIdentifier = @"login";
在你的UI测试中:
[app.buttons[@"login"] tap];
从不显示 accessibilityIdentifier,VoiceOver
也不会读取它,因此不必对其进行本地化。只需确保您使用的是 accessibilityIdentifier
而不是 而不是 accessibilityLabel
。因为 accessibilityLabel
将由 VoiceOver
供残障用户阅读,因此应进行本地化。
备选方案
如果您不能使用 accessibilityIdentifier
来查询您的 UI 元素,您可以在 UI 测试中使用应用的 LocalizableStrings
文件来获取本地化的按钮标题(在这种情况):
首先将您的 Localizable.strings
文件添加到您的 UI 测试目标,然后通过 UI 测试包访问该文件以获取本地化字符串(我使用了一些辅助方法那个):
func localized(_ key: String) -> String {
let uiTestBundle = Bundle(for: AClassFromYourUITests.self)
return NSLocalizedString(key, bundle: uiTestBundle, comment: "")
}
前段时间我写了一些关于此的 blog post 内容,其中包含更多详细信息。