Как правильно связать Selenide и Selenium Grid?

Ну и какой же URL в официальном примере? :slight_smile:

new URL("http://localhost:4444/wd/hub")

А теперь посмотрим на оригинальный:

-Dremote=http://172.16.101.70:4444/

Давайте поищем десять отличий. :wink:

Если вы используете кастомный драйвер, предполагается, что вы как минимум должны сетить и закрывать его, вызывая выше указанные методы. Все остальное уже происходит в контексте selenide. @asolntsev думаю сможет больше деталей предоставить. Лично я всегда использовал кастомный раннер. Потому проблем с вызовом сеттера в @Before и закрытием в @After никаких не возникало. А вообще, вот тут в javadocs описано, как нужно правильно сетить кастомный драйвер.

Давай :slight_smile: https://github.com/msmolyakov/maven-selenide-grid-example/blob/master/src/test/java/webdrivers/FirefoxCustomDriver.java#L27
О чем и говорю, что до этого уже исправил URL. На смену IP с .70 на .77 не обращай внимания - уже другая машина.

На всякий случай перепробовал:

1) указывать URL сразу и в параметре -Dremote, и в коде при создании RemoteWebDriver:

mvn clean test site -Dselenide.browser=webdrivers.FirefoxCustomDriver -Dremote=http://172.16.101.77:4444/wd/hub
return new RemoteWebDriver(new URL("http://172.16.101.77:4444/wd/hub"), desiredCapabilities);

2) указывать URL в параметре -Dremote, а в коде создавать RemoteWebDriver без параметра URL

mvn clean test site -Dselenide.browser=webdrivers.FirefoxCustomDriver -Dremote=http://172.16.101.77:4444/wd/hub
return new RemoteWebDriver(desiredCapabilities);

3) не указывать параметр -Dremote, но в коде создавать RemoteWebDriver с параметром URL

mvn clean test site -Dselenide.browser=webdrivers.FirefoxCustomDriver
return new RemoteWebDriver(new URL("http://172.16.101.77:4444/wd/hub"), desiredCapabilities);
1 лайк

По-моему, самый простой и очевидный вариант, который нужно было попробовать в первую очередь:

  1. Самому создать RemoteWebDriver перед запуском теста.
  2. Там же вызвать WebDriverRunner.setWebDriver(yourRemoteDriverInstance).
  3. В конце теста вызвать WebDriverRunner.closeWebDriver().

И никаких -Dremote и плясок с бубном.

1 лайк

Такое-то решение работает, спасибо. Ну пусть пока так и останется.
Но по-прежнему волнует момент, что то же самое не завелось через WebDriverProvider. Ожидал, что с ним как раз и избегу “плясок с бубном”, но вышло наоборот.

Ну тут надо уточнять с @asolntsev. Я лично провайдером не пользовался, потому не могу ничего сказать без детального просмотра исходников. Может он не заточен под грид, или вы что-то банально упустили.

@ArtOfLife @msmolyakov Привет!
Провайдер с гридом работает, просто не надо выставлять настройку remote.
Вместо этого все нужные свойства нужно прописать в своём провайдере:

  @Before
  public void setUp() throws Exception {
    Configuration.browser = MyGridProvider.class.getName();
  }

  private static class MyGridProvider implements WebDriverProvider {
    @Override
    public WebDriver createDriver(DesiredCapabilities capabilities) {
      FirefoxProfile firefoxProfile = new FirefoxProfile();

      firefoxProfile.setPreference("browser.fullscreen.autohide",true);
      firefoxProfile.setPreference("browser.fullscreen.animateUp",0);

      capabilities.setCapability(PROFILE, firefoxProfile);
      capabilities.setBrowserName("firefox");

      try {
        return new RemoteWebDriver(new URL("http://172.16.101.70:4444/wd/hub"), capabilities);
      }
      catch (MalformedURLException e) {
        throw new RuntimeException(e);
      }
    }
  }
4 лайка

Привет, Андрей!
Прошу прощения, что надолго пропал.

Как раз то, что изначально хотел! Работает. Спасибо за помощь. :slight_smile:

Привет!
Если разобрался, то можешь на гите до рабочего состояния обновиться?))
заранее спасибо

Привет!
Я уже подзабыл, что именно и где надо обновить?

Андрей, у автора есть проект на гите) вот я и попросил, если у него все это дело завелось то обновить проект до рабочего состояния)

Привет!
Извини, давно сюда не заходил. Для тебя еще актуален вопрос?

я думаю, этот вопрос очень будет актуальным всегда. ты можешь обновить исходники?

есть ли еще открытые проекты , на эту тему ?)

И главное не упускать capabilities.setBrowserName(“firefox”); иначе не находит нужную сессию, и выдает исключение.

maximize() не работает на linux системах в рабочем столе xvfb, там нужно задавать размер через setSize(). Но при этом опция Configuration.startMaximized = true не вызывает ошибки. Вместо maximize() в linux можно использовать опцию Configuration.browserSize = “1920x1080”;

Добрый вечер. Я мучаюсь с вопросом как сделать рабочее приложение с Selenide и запустить его с помощью StandAlone Server. Если можно поделитесь рабочим примером и как его запускать, пожалуйста.

Еще хотела спросить, может Вы пробовали или знаете где посмотреть как запустить из основной машины - это Win8 тест на виртуальной машине Linux, где установлен Docker и Selenoid??
Если можно пожалуйста помогите.

Пример Selenide+Grid есть в тестах самого селенида:

https://github.com/codeborne/selenide/blob/master/src/test/java/grid/SeleniumGridTest.java

Надеюсь, это поможет.

1 лайк

Может не доросла еще, вот мой код:QA/UsingStandAloneServer3 at master · VikaQA-Raznoe/QA · GitHub
1)Запустила в консоли hub
2)Подключила к нему одну node
3)Запустила тест, а он падает

Just use Selenoid and you’ll be happy!

Для винды лучше обычных хаб c несколькими нодами в докере.

version: "2"
services:
   selenium-hub:
     image: selenium/hub:3.8.1
     container_name: selenium-hub
     ports:
       - "4444:4444"
   chrome:
     image: selenium/node-chrome:3.8.1
     depends_on:
       - selenium-hub
     environment:
       - HUB_PORT_4444_TCP_ADDR=selenium-hub
       - HUB_PORT_4444_TCP_PORT=4444
   firefox:
     image: selenium/node-firefox:3.8.1
     depends_on:
       - selenium-hub
     environment:
       - HUB_PORT_4444_TCP_ADDR=selenium-hub
       - HUB_PORT_4444_TCP_PORT=4444