UITests-Как получить текущий язык в UITests - PullRequest
0 голосов
/ 05 декабря 2018
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 Ответ

0 голосов
/ 05 декабря 2018

Сохранение языка пользователя в UserDefaults вашего приложения и последующий доступ к нему из вашего UITest не будет работать.Ваше приложение и UITest работают как отдельные процессы, а это значит, что ваш UITest не может получить доступ к UserDefaults

* 1004 вашего приложения. Существует простое решение: чтобы стать независимым от языка пользователя, вы можете установить accessibilityIdentifier наВаш UIButton, а затем получить доступ к кнопке через accessibilityIdentifier:

В вашем приложении:

button.accessibilityIdentifier = @"login";

В вашем UITest:

[app.buttons[@"login"] tap];

AccessibilityIdentifier никогда не отображается, и VoiceOver также не читает его, поэтому его не нужно локализовать.Просто убедитесь, что вы используете accessibilityIdentifier и , а не accessibilityLabel.Потому что accessibilityLabel будет прочитано VoiceOver для пользователей с ограниченными возможностями и должно быть локализовано.

ALTERNATIVE

Если вы не можете использовать accessibilityIdentifier для запроса элементов UIвы можете использовать файл LocalizableStrings вашего приложения в ваших UITests, чтобы получить локализованный заголовок кнопки (в данном случае):

Сначала добавьте ваш Localizable.strings файл к вашей цели UITest, а затем получите доступ к файлу через комплект UITest.чтобы получить локализованные строки (я использую небольшой вспомогательный метод для этого):

func localized(_ key: String) -> String {
    let uiTestBundle = Bundle(for: AClassFromYourUITests.self)
    return NSLocalizedString(key, bundle: uiTestBundle, comment: "")
}

Я написал небольшое сообщение в блоге об этом некоторое время назад с некоторыми подробностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...