UITests - 如何在UITests中获取当前语言
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITests - 如何在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
中存储用户的语言,然后从您的UITest访问该语言将无法正常工作。您的应用和UITest作为单独的进程运行,这意味着您的UITest无法访问您的应用的UserDefaults
有一个简单的解决方案:要独立于用户语言,您可以在accessibilityIdentifier
上设置UIButton
,然后通过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的更多细节。
以上是关于UITests - 如何在UITests中获取当前语言的主要内容,如果未能解决你的问题,请参考以下文章