В прошлой статье мы с вами научились передавать параметр браузера в командной строке. Таким образом наши тесты будут запускаться либо в одном браузере либо в другом. Нам же нужно немного другой вариант - запустить один тест в нескольких браузерах поочерёдно. Давайте начнём разбирать сегодня данный способ.
Параметризованный тест
Для начала разберем что же это такое. К примеру нам нужно в тесте выполнить одно и тоже действие несколько раз. Мы можем создать тест и зациклить выполнение этого действия или же указать параметры. Разберём на примере:
К созданному методу мы должны добавить нужные аннотации
- @ParameterizedTest
- @CsvSource
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
Это специальные аннотации, которые позволяют написать один тест, но запустится он столько раз, сколько вы указали параметров.
В данном случае тест запустится один раз и в ответе будет 11
Мы к нашему параметру добавляем 10 и выводим в консоль. Давайте добавим несколько параметров и посмотрим на результат:
Тест запустился 5 раз и выполнил одно и тоже действие но с разными числами.
Как же нам это поможет при запуске тестов через разные браузеры. Мы можем прописать в параметре название браузера и от этого будет зависеть на каком браузере запустится наш тест.
Запуск тестов в разных браузерах
В прошлой статье мы запускали тест в определённом браузере, прописав за ранее его название.
Мы выводили этот параметр через командную строку и могли запустить определённый тест на определённом браузере.
Так как данный класс идёт перед тестами, то есть инициализация браузера запускается раньше чем параметр в тесте, то у нас не получится указать параметр в тесте и надеяться, что откроется нужный браузер.
Поэтому создадим отдельный класс, в котором будут тесты направленные на кроссбраузерность.
И перенесём данную логику в отдельный класс.
Мы не сделали ничего нового, просто скопировали инициализацию всех нужных переменных и поместили в метод setUp();.
Его мы будем использовать если наш тест нужно прогнать на кроссбраузерность. Как это будет выглядеть:
- Мы создаём тест с параметрами, о которых говорилось выше.
- В параметрах указываем названия наших браузеров
- 1 - создаём образ класса, в котором есть наш метод setUp, чтобы можно было его использовать
- 2 - используем сам метод, с параметром, который есть в тесте (value). Как раз value будет поочерёдно равно, сначала Chrome, а после FireFox.
- 3- Открываем любую страницу в браузере, у меня это сайт IDEA.
❗Важное замечание. В таком варианте, браузер откроется 3 раза! Это всё потому, что класс с тестами у меня унаследуется от Abstract, в котором также есть инициализация браузера (из прошлой статьи).
Поэтому если хотите чтоб такого не было, то для тестов, которые нужно запускать в нескольких браузерах, создаёте отдельный класс.
Также, для ваших тестов лучше создать свой, отдельный TestListner, чтобы можно было выполнять действия после тестов, в случае падения и успеха.
Освежить знания о TestListner можно здесь:
В конечном итоге ваш тест будет выглядеть так. Класс с инициализацией:
public class CrosBrowser {
public static EventFiringWebDriver driver;
public static ChromeOptions chromeOptions;
public static FirefoxOptions foxOptions;
public static WebDriverWait wait;
public static Actions actions;
public Properties props;
public SQL sql;
public static String Browser;
@Step("Запускаем тест через браузер = {0}")
public void setUp(String browser) throws IOException {
Browser = browser;
if (Browser.contains("Chrome")) {
WebDriverManager.chromedriver().setup();
chromeOptions = new ChromeOptions();
driver = new EventFiringWebDriver(new ChromeDriver(chromeOptions));
}
if (Browser.contains("FireFox")) {
WebDriverManager.firefoxdriver().setup();
foxOptions = new FirefoxOptions();
driver = new EventFiringWebDriver(new FirefoxDriver(foxOptions));
}
driver.manage().window().maximize();
driver.register(new Custom());
wait = new WebDriverWait(driver, 20);
actions = new Actions(driver);
sql = new SQL();
sql.Connect();
FileInputStream in = new FileInputStream("src/test/resources/my.properties");
props = new Properties();
props.load(in);
in.close();
}
}
Сам тест:
@ExtendWith(TestListnerCros.class)
@Epic("Тесты UI на разных браузерах")
@Feature("Направления")
public class CrosBrowserTest {
IDEA idea;
CrosBrowser crosBrowser;
@DisplayName("Кроссбраузерность")
@ParameterizedTest
@CsvSource({"Chrome", "FireFox"})
public void Browser (String value) throws IOException {
crosBrowser = new CrosBrowser();
crosBrowser.setUp(value);
driver.get("https://www.jetbrains.com/idea/");
System.out.println(value);
}
}
Ознакомиться с данным кодом, можете в моём проекте:
Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!