Для выполнения автоматических тестов на веб-приложениях, которые поддерживают несколько языков интерфейса, необходимо настроить смену языка на нужный в процессе тестирования. В WebdriverIO это можно сделать несколькими способами, в зависимости от особенностей проекта, структуры тестов и используемых библиотек.
Смена языка в тестах может быть реализована несколькими способами:
Каждый из этих методов имеет свои особенности и может быть использован в зависимости от типа веб-приложения.
Многие веб-приложения предоставляют пользователю возможность смены языка через меню выбора языка. Чтобы автоматизировать такой процесс в WebdriverIO, необходимо взаимодействовать с элементами UI, которые отвечают за смену языка.
Пример использования WebdriverIO для смены языка через меню:
describe('Смена языка через интерфейс', () => {
it('должен изменить язык на французский', async () => {
// Открыть сайт
await browser.url('https://example.com');
// Найти элемент меню выбора языка
const languageMenu = await $('button.language-menu');
await languageMenu.click();
// Выбрать язык
const frenchOption = await $('li[data-language="fr"]');
await frenchOption.click();
// Подтвердить, что язык изменился
const pageTitle = await $('h1');
expect(await pageTitle.getText()).toBe('Bienvenue');
});
});
В этом примере сначала открывается веб-страница, затем ищется кнопка меню выбора языка, после чего выбирается французский язык. В конце проверяется, что текст на странице изменился на французский, что подтверждает смену языка.
Этот способ удобен в случае, если в приложении есть интерфейсный элемент для выбора языка, и его можно легко автоматизировать.
В случае, если приложение использует автоматическую локализацию на основе настроек браузера, можно изменить язык браузера для симуляции работы с веб-приложением на нужном языке.
Для этого можно использовать WebdriverIO с библиотекой
@wdio/browserstack-service или напрямую работать с
возможностями браузера.
Пример настройки языка в браузере с использованием WebdriverIO:
describe('Смена языка через настройки браузера', () => {
it('должен открыть сайт с английским языком', async () => {
// Запуск браузера с параметрами для английского языка
const options = {
capabilities: {
browserName: 'chrome',
'goog:chromeOptions': {
args: ['--lang=en']
}
}
};
await browser.url('https://example.com');
const pageTitle = await $('h1');
expect(await pageTitle.getText()).toBe('Welcome');
});
it('должен открыть сайт с французским языком', async () => {
// Запуск браузера с параметрами для французского языка
const options = {
capabilities: {
browserName: 'chrome',
'goog:chromeOptions': {
args: ['--lang=fr']
}
}
};
await browser.url('https://example.com');
const pageTitle = await $('h1');
expect(await pageTitle.getText()).toBe('Bienvenue');
});
});
В этом примере используется аргумент --lang для указания
языка браузера. Важно, чтобы приложение поддерживало автодетекцию языка
браузера, иначе этот метод может не сработать.
Некоторые веб-приложения используют языковой параметр в URL для
выбора языка интерфейса. Например, URL может быть вида
https://example.com/?lang=en или
https://example.com/fr.
Пример использования WebdriverIO для смены языка через URL:
describe('Смена языка через URL', () => {
it('должен открыть сайт на французском языке', async () => {
// Открыть страницу с параметром языка в URL
await browser.url('https://example.com?lang=fr');
const pageTitle = await $('h1');
expect(await pageTitle.getText()).toBe('Bienvenue');
});
it('должен открыть сайт на английском языке', async () => {
// Открыть страницу с параметром языка в URL
await browser.url('https://example.com?lang=en');
const pageTitle = await $('h1');
expect(await pageTitle.getText()).toBe('Welcome');
});
});
Этот способ используется в том случае, если приложение позволяет менять язык через параметры URL. Это может быть полезно, если необходимо быстро переключаться между языками без взаимодействия с интерфейсными элементами.
Если приложение поддерживает многоязычность на уровне настроек сессии, можно устанавливать язык через глобальные переменные или API. Например, при тестировании можно задать переменную с нужным языком, и приложение будет автоматически подстраиваться под нее.
Пример использования глобальных настроек для смены языка:
describe('Смена языка через глобальные настройки', () => {
it('должен использовать французский язык', async () => {
// Установить глобальную переменную с языковыми настройками
browser.execute(() => {
window.localStorage.setItem('language', 'fr');
});
await browser.url('https://example.com');
const pageTitle = await $('h1');
expect(await pageTitle.getText()).toBe('Bienvenue');
});
it('должен использовать английский язык', async () => {
// Установить глобальную переменную с языковыми настройками
browser.execute(() => {
window.localStorage.setItem('language', 'en');
});
await browser.url('https://example.com');
const pageTitle = await $('h1');
expect(await pageTitle.getText()).toBe('Welcome');
});
});
В данном примере используется localStorage для
сохранения и изменения языка, что позволяет не только тестировать смену
языка, но и автоматизировать процесс для конкретной сессии.
В тестировании WebdriverIO смена языка может быть реализована разными способами в зависимости от структуры веб-приложения. Использование интерфейсных элементов, настроек браузера, параметров URL или глобальных переменных — все эти методы помогают эффективно работать с многоязычными интерфейсами в автоматизированных тестах. Выбор конкретного метода зависит от требований тестируемого приложения и того, как реализована локализация на стороне сервера и клиента.