Настройка сетки селена для использования Microsoft Edge

Среда:

  • win10 (сборка 10240)
  • Vaadin Testbench 4.1
  • Селен 2,53
  • Драйверы для Firefox, Chrome, IE11 и Edge для сборки 10240

Узел и концентратор

Запустите java -jar c:\users\powder\vaadin-testbench-standalone-4.1.0.jar -role hub
Запустите java -jar c: \ users \ powder \ vaadin-testbench-standalone-4.1.0.jar -role узел -Dwebdriver.edge.driver=c:\users\powder\MicrosoftWebDriver.exe

Использование в коде Java

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setBrowserName(DesiredCapabilities.edge().getBrowserName());
//DesiredCapabilities capabilities = DesiredCapabilities.edge(); Tried as well
capabilities.setCapability("acceptSslCerts", "true");
setDriver(new RemoteWebDriver(new URL(this.remoteHubUrl), capabilities));
getDriver().get("http://www.google.com");

Сообщение об ошибке

Ошибка пересылки нового сеанса не может быть найден: Возможности [{acceptSslCerts=true, browserName=MicrosoftEdge}]

Селеновая сетка консоли - край отсутствует

Все отлично работает с другими браузерами, но не с Edge. Есть идеи, как это исправить?

2 ответа

Здесь есть 2 проблемы:

Во-первых, если вы посмотрите на конфигурацию узла по умолчанию, вы заметите, что только Firefox, Chrome и IE включены по умолчанию (поэтому все, что вам нужно для их использования, это указать местоположение драйвера через системное свойство). Если вы хотите использовать любой другой браузер, тогда вам нужно использовать свой собственный конфиг json:

{
  "capabilities": [
    {
      "browserName": "MicrosoftEdge",
      "platform": "WIN10",
      "maxInstances": 1
    },
    {
      "browserName": "firefox",
      "platform": "WIN10",
      "maxInstances": 5
    },
    {
      "browserName": "chrome",
      "platform": "WIN10",
      "maxInstances": 5
    },
    {
      "browserName": "internet explorer",
      "platform": "WIN10",
      "maxInstances": 1
    }
  ],
  "hub": "http://selenium-hub-host:4444"
}

и передайте его в вашу командную строку:

java "-Dwebdriver.edge.driver=c:\path\to\MicrosoftWebDriver.exe" "-Dwebdriver.gecko.driver=c:\path\to\geckodriver.exe" "-Dwebdriver.chrome.driver=c:\path\to\chromedriver.exe" "-Dwebdriver.ie.driver=c:\path\to\IEDriverServer.exe" -jar "c:\path\to\selenium-server-standalone.jar" -role node -nodeConfig "c:\path\to\the\above.json"

(кстати: вы также можете поместить всю конфигурацию в вашу командную строку, используя несколько -capabilities или же -browser Титулы)

Это в теории должно работать. Однако на практике вы часто сталкиваетесь со второй проблемой: "иногда это случайно не работает";] Изначально все будет выглядеть хорошо: ваша сетка будет правильно отображать возможности браузера Edge на консоли, она будет правильно делегировать тесты. для узла, содержащего Edge, узел должным образом запустит браузер Edge, однако браузер иногда останавливается на своем начальном синем экране с логотипом e, и через несколько секунд вы получите некоторое исключение на стороне клиента без какой-либо значимой трассировки стека или сообщения (У меня не сохранилось нигде, чтобы вставить здесь сейчас).

Некоторые люди предложили обходной путь для запуска двух отдельных узлов на одном компьютере (конечно, на разных портах): один только для Edge, а второй для IE, FF и Chrome. Таким образом, он работает довольно стабильно (протестировано на Edge build 15063 на win-10 и Selenium-3.4.0)

Дополнительная информация:

Помимо вышесказанного, драйвер Edge имеет несколько ограничений, которые требуют определенных обходных путей в конфигурации:

  • в настоящее время драйвером / браузером поддерживается только 1 одновременный сеанс, поэтому maxInstances должен быть установлен в 1 (слава этому ответу)
  • драйвер должен быть запущен на переднем плане, чтобы окно браузера действительно отображалось на рабочем столе. Поэтому при запуске узел не может быть запущен как служба Windows или из планировщика задач Windows. Лучший способ автоматизировать запуск узла - настроить автоматический вход в систему и добавить пакетный скрипт, запускающий узел, в пользовательские программы запуска, как описано в моей статье.

Попробуйте поместить параметры -D перед параметром -jar. У меня была проблема, когда он думал -Dwebdriver..... был параметром для самого селена вместо Java.

Другие вопросы по тегам