t.me/atinfo_chat Telegram группа по автоматизации тестирования

Запуск тестов с разными FF profile

Всем привет!

Имеются 2 класса тестов, которые одновременно дергают метод инициализации (данные считываются из json, преобразуются в модель, поля заполняются произвольными значениями). В результате чего наблюдаются падения тестов, при валидации полей моделей. Тесты запускаются на CI в 2 потока. По всей видимости, стартует один браузер с одним и тем же профилем, отсюда и неразбериха. Как можно это обойти? Мысль такая, что нужно для каждого потока создавать свой профиль, и на нем гонять, чтобы не было таких пересечений. Только вот как это реализовать, пока вопрос.

Дело тут не в профилях. Покажите как вы храните драйвер и как передаете его до метода на котором падают тесты.

Инициализация драйвера:

public WebDriver getWebDriver() throws IOException {
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("print.always_print_silent", true);
firefoxProfile.setPreference("print.show print progress", false);
firefoxProfile.setEnableNativeEvents(false);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setBrowserName("firefox");
capabilities.setCapability("firefox_profile", firefoxProfile.toJson());
capabilities.setJavascriptEnabled(true);
WebDriver driver = new RemoteWebDriver(new URL("http://192.168.123.11:4444/wd/hub"), capabilities);
driver.manage().window().setPosition(new Point(0, 0));
driver.manage().window().setSize(new Dimension(1440, 900));
return driver; 

}

В раннере аннотирован метод @BeforeClass, в котором происходит вызов new ApplicationManagerImpl(). А внутри ApplicationManagerImpl() - driver = new WebDriverFactory().getWebDriver();

Видимо действительно, дело не в профилях, так как браузеры стартуют разные. Вывожу sessionId для каждого потока, и они различны.

SessionId = ac20b37d-8e32-49b0-8f26-8c48f77d3ad7 - первый поток
SessionId = 70c2fb41-0d5e-4814-b96b-ac04679493f5 - второй поток

@heartwilltell, так в чем же дело?

В том что вы где-то не позаботились о потокобезопасности. Как минимум делайте ваш метод synchronized.

сделал synchronized - не помогло

А чем запускаете тесты? JUnit testNG?
Покажите класс инициализирующий драйвер и как вы его передаете в тест

TestNG.