Есть тест для Логина в юзер аккаунт . Есть два браузера: хром и фф, они запускаются паралельно в saucalbs. Для успешного логина нужно использовать разные юзернейм для каждого браузера.
Для этого я попыталась реализовать метод рендомного выбора юзера и передачи его в метод Логин класса:
Ошибка: при параллельном запуске первый браузер получает двойной ввод в поле вроде имя пользователя. Например, должно быть “user1”, на деле вводиться “user1user2”. При этом, второй браузер, хром, не получает ни одного вроде и поле логина остаётся пустым.
Детали проекта: селениум вд на джава, с использованием testng,maven. Тест запускается с дженксинс (где и указана комбинация браузеров). Тесты бегают на удаленке saucalabs
Проблема в том, что оба теста используют один и тот же инстанс new Application(driver) так как он сохраняется во внешнюю переменную app.
Для того, чтобы не было двойного ввода, надо чтоб для каждого теста был отдельный инстанс (наприм. Application app = new Application(driver) )
По поводу selectRandomUser() я так понимаю, что задача состоит в том, чтобы для каждого теста выбрать уникального юзера. В этом случае будет удобней и надежней использовать потокобезопасную коллекцию. Например стек:
В тестах можно достать имя юзера так users.pop(). Таким образом оба теста гарантированно получат два разных юзера. При использовании Math.random() такой гарантии, к сожалению, не будет.
Спасибо за ответ. Вы имеете ввиду, что инстанс Application app = new Application(driver) должен быть прописан в каждом тесте, но не в базовом классе? Я так понимаю, что таким же способом нужно инициализировать ConfigRead (содержащий методы чтения даты с проперти фалов) и любой другой инстанс?
Определенно, истанс app должен быть новым в каждом тесте, для того, чтобы запускать тесты параллельно. Что касается ConfigRead, конфиг делают, как правило, один на весь проект, так что имеет смысл инициализировать его только один раз в @BeforeTest например.
Спасибо за советы. Но никак не удаётся достичь идеального результата. Тесты по выбору юзеров из списка не стабильны и иногда повторяется двойной ввод. Может ли это быть связано с кеш?( он нигде не очищается)
Дата провадер стоит как @DataProvider(parallel = true) ?
Никаких вебдрайверов в тесте, если он не статик и обьявлем в BeforeTest, если статик то оборачиваем в ThreadLocal.