UITests-如何在 UITests 中获取当前语言
Posted
技术标签:
【中文标题】UITests-如何在 UITests 中获取当前语言【英文标题】:UITests-How to get current language in UITests 【发布时间】:2018-12-05 08:18:35 【问题描述】: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;
【问题讨论】:
您是否正在尝试测试应用是否正确本地化?您是否正在尝试测试功能而不考虑语言? 【参考方案1】:将用户的语言存储在您应用的UserDefaults
中,然后从您的 UITest 中访问该语言是行不通的。您的应用和 UITest 作为单独的进程运行,这意味着您的 UITest 无法访问您的应用的UserDefaults
有一个简单的解决方案:要独立于用户语言,您可以在UIButton
上设置accessibilityIdentifier
,然后通过accessibilityIdentifier
访问按钮:
在您的应用中:
button.accessibilityIdentifier = @"login";
在您的 UITest 中:
[app.buttons[@"login"] tap];
accessibilityIdentifier 永远不会显示,VoiceOver
也不会读取它,因此不必对其进行本地化。只要确保您使用的是accessibilityIdentifier
和不 accessibilityLabel
。因为accessibilityLabel
将被VoiceOver
读取给残障用户,并且应该本地化。
替代
如果您无法使用 accessibilityIdentifier
查询您的 UI 元素,您可以在您的 UITests 中使用您应用的 LocalizableStrings
文件来获取本地化的按钮标题(在这种情况下):
首先将您的Localizable.strings
文件添加到您的 UITest 目标,然后通过 UITest 包访问该文件以获取本地化字符串(为此我使用了一个小助手方法):
func localized(_ key: String) -> String
let uiTestBundle = Bundle(for: AClassFromYourUITests.self)
return NSLocalizedString(key, bundle: uiTestBundle, comment: "")
不久前,我写了一点blog post 并提供了更多细节。
【讨论】:
谢谢joern,但是在原始代码中有很多地方应该设置accessibilityIdentifier。有没有其他不用改原码的方法。 如果你真的需要,你可以在你的 UITests 中使用 LocalizableStrings 文件来获得本地化的按钮标题。我会将其添加到答案中。 感谢您的详细解答!但问题是我不使用 Localizable.strings 文件。我只是创建两个 plist 语言文件,然后按如下键获取文本: [CMMultiLanguage stringMultiLanguageWithIdentity:@"key"]; 那么 `accessibilityIdentifier' 是要走的路。以上是关于UITests-如何在 UITests 中获取当前语言的主要内容,如果未能解决你的问题,请参考以下文章