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中获取当前语言的主要内容,如果未能解决你的问题,请参考以下文章

在 UITests 中获取 UISwitch 状态/值

UITests:如何测试标签是不是在更改后包含一些文本?

如何在 Xamarin UITests 获取列表视图项的计数

如何从 UITests 中访问 UITabBarItem?

UITests(快照)中的本地化字符串始终为英文

如何在 UITests 中选择 UITableView 的一部分?