Невозможно изменить язык селен-webdriver для Firefox - PullRequest
0 голосов
/ 12 сентября 2018

Я запускаю тесты e2e на основе selenium-webdriver (firefox). Некоторые из моих тестов основаны на сравнении сообщений о результатах. Проблема заключается в том, что когда я запускаю тесты на своем локальном компьютере (и на моем локальном браузере firefox), язык автоматически меняется на EN, что разрушает некоторые из моих тестовых случаев (которые сравнивают одни и те же сообщения, но на разных языках). Сначала я попытался изменить его в своем браузере. Я переупорядочил список предпочитаемых языков, чтобы EN находился на первой позиции. При каждом запуске теста все возвращается к первоначальному порядку (с EN на втором месте). Я также попытался удалить язык, который выбирается автоматически. Но после первого выполнения теста список языков возвращается к предыдущей форме (второй - EN).

Затем я попытался установить язык для моего веб-драйвера. Мой окончательный код:

let profile = new firefox.Profile().setPreference("intl.accept_languages", "en-US");
let options = new firefox.Options().setProfile(profile);

let driverBuilder = new selenium.Builder().forBrowser(webDriverConfig.browserName).setFirefoxOptions(options).build();

Но это никак не влияет. Во время тестов я по-прежнему получаю неправильную локаль, и после запуска тестов в настройках Firefox я все равно получаю неправильный язык в первую очередь (в списке языковых предпочтений). Как я могу выбрать английский язык, который будет моим принятым / предпочтительным языком во время моих тестов?

1 Ответ

0 голосов
/ 13 сентября 2018

ОК, я решил это. Проблема заключалась в том, что я смешал 2 подхода, оба из которых я нашел в комментариях в коде selenium-webdriver Первый, который я нашел на github (последняя ветка master), выглядит так:

let options = new firefox.Options()
    .addExtensions('/path/to/firebug.xpi')
    .setPreference('extensions.firebug.showChromeErrors', true);

Итак, здесь можно вызвать setPreference () для объекта Options. Этот фрагмент кода взят из последней ветки master. Проблема в том, что текущий мастер выпущен как нестабильный (4.0.0-alpha.sth ...). Последняя стабильная версия, которая была выпущена - 3.6.0, и есть много различий между API Поэтому я нашел похожий пример кода непосредственно в пакете selenium-webdriver, на который я ссылаюсь в своем проекте, и настройка параметров в этой версии выглядит следующим образом:

let profile = new firefox.Profile();
profile.addExtension('/path/to/firebug.xpi');
profile.setPreference('extensions.firebug.showChromeErrors', true);

let options = new firefox.Options().setProfile(profile);

В этой стабильной версии API метод setPreference () принадлежит классу Profile. Но помимо этого есть еще одна большая разница. В версии 4.0.0 api метод возвращает сам измененный объект, тогда как в стабильной версии метод только устанавливает состояние. Так что это не работает в стабильной версии:

let profile = new firefox.Profile().setPreference("intl.accept_languages", "en-US");

И это правильный код:

let profile = new firefox.Profile();
profile.setPreference("intl.accept_languages", "en,en-US");

Наконец, если вы хотите установить локаль для веб-драйвера Firefox, вот рабочие примеры кода для selenium-webdriver 3.6.0:

let profile = new firefox.Profile();
profile.setPreference("intl.accept_languages", "en,en-US");

let options = new firefox.Options().setProfile(profile);

let driver = new selenium.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(options)
    .build();

А для selenium-webdriver 4.0.0:

let options = new firefox.Options()
    .setPreference("intl.accept_languages", "en,en-US");

let driver = new selenium.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(options)
    .build();
...