WebDriverIO поддерживает международные возможности (i18n), позволяя разрабатывать автоматизированные тесты для веб-приложений с многоязычностью. Важно, чтобы тесты корректно обрабатывали различные языковые версии интерфейса, учитывая все локализационные особенности. В этой статье рассматривается, как можно работать с локализацией в WebDriverIO, а также какие методы и подходы можно использовать для тестирования многоязычных приложений.
WebDriverIO предоставляет возможности для тестирования приложений, которые используют i18n для поддержки множества языков. В основном это реализуется через:
В WebDriverIO можно настроить поддержку нескольких языков через параметры конфигурации. В большинстве случаев это включает в себя определение локали для каждого теста или шага. Для начала необходимо указать локаль в конфигурации WebDriverIO.
Пример настройки локали в конфиге:
exports.config = {
specs: [
'./test/specs/**/*.js'
],
capabilities: [{
browserName: 'chrome',
'goog:chromeOptions': {
args: ['--lang=ru'] // Устанавливаем русский язык для Chrome
}
}],
baseUrl: 'https://example.com',
waitforTimeout: 5000
};
В данном примере в настройках браузера через --lang=ru
указывается использование русского языка для всех тестов, запускаемых в
этом браузере.
В процессе тестирования необходимо переключать языки в пользовательском интерфейсе, чтобы проверять локализованные версии страниц. Это можно делать как через изменение параметров URL, так и через интерфейс самой страницы, например, с помощью выпадающих меню или кнопок выбора языка.
Пример переключения языка на веб-странице через элемент интерфейса:
it('переключение языка интерфейса', () => {
// Открываем главную страницу
browser.url('https://example.com');
// Кликаем на элемент выбора языка
const languageDropdown = $('#language-dropdown');
languageDropdown.click();
// Выбираем русский язык
const russianOption = $('#language-ru');
russianOption.click();
// Проверяем, что текст изменился на русском языке
const header = $('h1');
expect(header.getText()).toBe('Добро пожаловать');
});
В этом примере тест проверяет, что после выбора русского языка на странице заголовок изменился на русский вариант текста.
Важно, чтобы автоматизированные тесты корректно проверяли локализованные данные на странице. Это может включать проверку текста на различных языках, а также других аспектов, таких как изображения или форматы дат.
Для работы с локализованными текстами можно использовать стандартные локаторы и методы WebDriverIO. Однако часто для улучшения читаемости и повторного использования логики, разработчики применяют подход с хранением всех текстов в отдельных JSON-файлах или базах данных, где хранятся строки на разных языках.
Пример структуры локализационного JSON-файла:
{
"en": {
"welcome": "Welcome",
"login_button": "Log In"
},
"ru": {
"welcome": "Добро пожаловать",
"login_button": "Войти"
}
}
В тестах можно загружать эти данные в зависимости от выбранной локали:
const translations = require('./locales.json');
const currentLocale = 'ru'; // Пример, локаль может быть динамической
it('проверка текста на русском', () => {
browser.url('https://example.com');
const header = $('h1');
expect(header.getText()).toBe(translations[currentLocale].welcome);
const loginButton = $('#login-button');
expect(loginButton.getText()).toBe(translations[currentLocale].login_button);
});
Для более гибкой работы с локализацией можно использовать сторонние библиотеки, такие как i18next или polyglot.js, которые помогают удобно управлять строками и поддерживать множество языков в рамках одного приложения. Эти библиотеки могут интегрироваться с WebDriverIO, предоставляя дополнительную функциональность для тестирования многоязычных интерфейсов.
Пример использования i18next для управления переводами:
const i18next = require('i18next');
// Инициализация i18next с локалями
i18next.init({
lng: 'ru', // Текущая локаль
resources: {
en: {
translation: {
"welcome": "Welcome"
}
},
ru: {
translation: {
"welcome": "Добро пожаловать"
}
}
}
});
it('проверка текста с использованием i18next', () => {
browser.url('https://example.com');
const header = $('h1');
expect(header.getText()).toBe(i18next.t('welcome'));
});
Этот подход позволяет централизованно управлять строками и динамически обновлять локали в зависимости от настроек теста.
Международные приложения могут также требовать тестирования форматов дат, валют и чисел, которые могут различаться в зависимости от локали. В WebDriverIO можно использовать JavaScript-библиотеки, такие как Intl.DateTimeFormat для проверки форматов дат или Intl.NumberFormat для валют.
Пример проверки формата даты:
it('проверка формата даты', () => {
browser.url('https://example.com');
const dateElement = $('#date');
const formattedDate = new Date(dateElement.getText());
// Проверка формата даты для русской локали
const expectedDate = new Intl.DateTimeFormat('ru-RU').format(formattedDate);
expect(dateElement.getText()).toBe(expectedDate);
});
Когда тестирование многоязычного интерфейса завершено, важно убедиться, что приложение корректно поддерживает все локали. Это включает не только проверку текстов, но и взаимодействие с элементами интерфейса, форматами данных и даже изображениями, которые могут изменяться в зависимости от языка. WebDriverIO предоставляет все необходимые инструменты для эффективной работы с такими приложениями, позволяя тестировщикам создавать стабильные и многократные сценарии для проверки i18n.