Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Проблема с параллельным запуском тестов через Selenium Hub

testng.xml
grid
parallel
java
Теги: #<Tag:0x00007f7b64f34288> #<Tag:0x00007f7b64f34008> #<Tag:0x00007f7b64f3bb78> #<Tag:0x00007f7b64f3b9c0>

(Анна) #1

Всем привет!
Знаю, что эта тема поднималась неоднократно, в том числе на этом форуме, но ответа на свой вопрос я так и не нашла.

В целях самообучения пытаюсь запустить свои тесты параллельно в нескольких браузерах.
Для этого локально подняла грид и зарегистрировала в нем ноды для основных браузеров.
Параметры запуска задаются в testng.xml, проект собирается на maven.

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

class BaseTest {
private static ThreadLocal<WebDriver> driver = new ThreadLocal<WebDriver>();
protected ThreadLocal<WebDriver> setWebDriver(String browser) throws MalformedURLException {
//тут инициализируется драйвер
}

@BeforeClass
@Parameters("browser")
protected void setUp(String browser) throws Exception {
    driver = setWebDriver(browser);
    driver.get().manage().window().maximize();
    System.setProperty(ESCAPE_PROPERTY, "false");
}
}

Если запускать тесты для одного бразуера - все ок.
Но когда пытаюсь запустить для 2 и более, начинаются проблемы:
в одном из браузеров тесты начинают прогоняться, но падают со странными ошибками, которых нет при непараллельном запуске, во втором браузере - даже не запускаются.

Как я понимаю, проблема явно с использованием драйвера, потоки не могут “поделить” его между собой. Но разве использование контейнера ThreadLocal не должно решить эту проблему?


(Sergey Korol) #2

Ну как минимум покажите:

  • xml
  • код очистки контейнера
  • код закрытия драйвера

(Evgeniy Maksimenko) #3

как вариант можно использовать https://github.com/barancev/webdriver-factory что бы не изобретать свое