Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Параметризация браузера с помощью DataProvider

parameterized
test-data
dataprovider
java
webdriver
Теги: #<Tag:0x00007fedb9b2e518> #<Tag:0x00007fedb9b2e3d8> #<Tag:0x00007fedb9b2e270> #<Tag:0x00007fedb9b2e130> #<Tag:0x00007fedb9b2dff0>

(Ordyntcev Dmitry) #1

Хотелось бы узнать, есть возможность передать в beforeMethod название браузера который мне необходим (прибегая к dataProvider) ???

Сейчас реализовано следующим образом:

@BeforeMethod
@Parameters("browser")
public void setUp(String browserName) throws MalformedURLException {

    driver = WebDriverRunner.run(browserName,false, hubUrl);
    openPage(url);
}

браузер тяну из .xml 

        <test name="FunctionalTestsFirefox" >
        <parameter name="browser" value="firefox"></parameter>
        <classes>
           ................
        <classes>
        </test>-->

        <test name="FunctionalTestsChrome" >
        <parameter name="browser" value="chrome"></parameter>
        <classes>
           ................
        <classes>
        </test>-->


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

Мне кажется это как то костыльно. Можно ли как то отдельно создать .xml  в котором я буду указывать название браузера и возможно ещё какие то параметры типо логин, пароль и т.д...? А то коментить\разкоменчивать строки с ненужным запуском браузеров, уже запарился)

может можно как то реализовать типо такого .xml??

browser=nameOfBrowser
login=login
password=password
и т.д.

(Sergey Korol) #2

Из всего сообщения так и не понял, где в вашей схеме должен фигурировать DataProvider.

Вы хотите получать браузер из DataProvider вместо BeforeMethod? Или наоборот - передавать?

Конечная цель какая? Возможность гибкого переключения браузера для последовательного запуска тестов?


(Ordyntcev Dmitry) #3

Хочу что бы перед запуском моих тестов, тесты знали, на каком браузере я хочу прогнать…То есть, я прописываю в одном месте (возможно это xml файл) параметры, в которых указываю браузер, и после чего дата провайдер обращается к этому .xml (где я указал на каком браузере нужен запуск), и передается этот весь конфиг в BeforeMethod, что бы тесты знали, на чем они будут крутиться…Скорее будет правильный ответ такой: “Возможность гибкого переключения браузера для последовательного запуска тестов”…Может это делается не через дата провайдер, может быть я ошибаюсь, хочу услышать все мнения по этому поводу, как лучше это организовать???


(Sergey Korol) #4

Для последовательного запуска достаточно использования системных пропертей / переменных окружения.

Запуск с флагом: -Dbrowser=chrome
Чтение в коде: System.getProperty("browser")

По аналогии с env vars:

System.getenv("BROWSER")

(Ordyntcev Dmitry) #5

А можно поподробнее?) куда необходимо прописать System.getProperty(“browser”)? А без запуска флага как то можно по другому сделать…что бы к примеру передал я как параметр название браузера в xml?


(Sergey Korol) #6
WebDriverRunner.run(System.getProperty("browser"),false, hubUrl);

Вы ведь итак параметр в xml передаете параметр…


(Ordyntcev Dmitry) #7

да браузер я притягиваю из .xml без проблем

@BeforeMethod
@Parameters("browser")
public void setUp(String browserName) throws MalformedURLException {

    driver = WebDriverRunner.run(browserName,false, hubUrl);
    openPage(url);
}

Вопрос немного другой) Можно ли как то в @Parameters(“browser”) указать конкретное value которое мне нужно?..а то у меня в .xml хранятся несколько сьютов с тестами (для хрома, оперы, ие, мозила)…сейчас мне приходится закоменчивать ненужные сьюты в .xml файле…Вопрос, можно как то конкретно указать value в этом участке кода…Вот нужно мне прогнать щас на фоксе, я просто прописал в бефор методе “firefox” и погнал сьют с ним (не затрагивая при этом другие сьюты)

@BeforeMethod
@Parameters("browser")

(Sergey Korol) #8

Это равносильно разделению suites на отдельные xml по браузерам. Только в вашем случае все сводится к изобретению велосипедов. А с раздельными xml вы хотя бы сможете параметризовать сам suite, который следует запускать, через maven / gradle.

Но опять-таки, в случае с последовательным запуском тестов оба варианта - бессмысленны, ибо зачем параметризовать браузер посредством xml для совершенно одинаковых наборов? Он явно напрашивается во внешний параметр.

Другое дело, если бы вы запускали тесты в параллели в разных браузерах. Тогда еще можно было задумываться об xml параметризации.


(Ordyntcev Dmitry) #9

То есть для каждого браузера создаю свой .xml и передаю его в параметрах в беформетод (который мне необходим)?


(Sergey Korol) #10

Да оставьте вы уже в покое этот несчастный BeforeMethod. Выше уже приведен рабочий вариант через system props. Используйте, и не забивайте себе голову велосипедами.

При разделении по отдельным xml:

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


#11

Возможно автор имел ввиду возможность хранения общих данных для теста, таких как user credentials, environments и так далее.
В “кругу” автоматизаторов это называется проперти файлы.
Для этого считаете перед тестами проперти файл в java объект например (есть множество вариантов реализации) и дольше на стадии конфигурации (beforeMethod, beforeSuite …) получаете из этого объекта нужные значения


(Дмитрий Мирошник) #12

Я бы вынес браузер в командную строку. ИМХО при использовании CI такой подход гибче, чем жонглирование xml-ками.
Получим что-то типа

javac myTestSuite.java -browser=FF

Из минусов такого подхода могу отметить необходимость иметь метод, который читает параметры, в каждом элементе, который необходимо запускать автономно (обычно это сьюты). Если есть необходимость запускать каждый тест индивидуально - данный подход может быть неоптимален.


(Сергей Кузьмин) #13

вот по моему неплохой пример pom.xml с профилями