UITests - 如何在UITests中获取当前语言

问题描述 投票:1回答:1
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;
}
ios objective-c xctest xcode-ui-testing
1个回答
2
投票

在您的应用程序的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的更多细节。

© www.soinside.com 2019 - 2024. All rights reserved.