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

Кроссбраузерное тестирование с TestNG!!!

Теги: #<Tag:0x00007fd776d31c88> #<Tag:0x00007fd776d31bc0> #<Tag:0x00007fd776d31af8> #<Tag:0x00007fd776d31a30>

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

public class Data {
    protected WebDriver driver;

    @Parameters("browserName")
    @BeforeTest
    protected WebDriver getDriver(String browserName) {
        if(browserName.equals("chrome")) {
            Configuration.browser = "chrome";
        }
        else if(browserName.equals("edge")) {
            Configuration.browser  = "edge";
        }

        Configuration.baseUrl = "http://mySite.com";
        

       return driver;

testNg file

<test name="CrossBrowserChrome">
        <parameter name="browserName" value="chrome"></parameter>
        <classes>
            <class name="tests.Forms">
                <methods>
                    <include name="testChrome"/>
                </methods>

            </class>
        </classes>
    </test>

    <test name="CrossBrowserEdge">
        <parameter name="browserName" value="edge"></parameter>
        <classes>
            <class name="tests.Forms">
                <methods>
                    <include name="testEadge"/>
                </methods>

            </class>
        </classes>
    </test>

Перед или после установки .baseUrl забыли такое же сделать для браузера: Configuration.browser = browser;

А, ну норм, значит он уже в импортах есть, значит моя подсказка не в тему.
А тестов-то запускается 2?

да, тестов 2 запускается. Но второй следует сразу за 1 в хроме

У меня впечатление, что драйвер создаёте один раз (перед первым тестом), во втором используется уже существующий…
Покажите, пожалуйста, код после if(browserName.equals) где Вы непосредственно создаёте новый экземпляр драйвера.

собственно говоря это весь код, для класа Data)

Хорошо.
Чтобы запускался какой-либо определённый браузер, где-то в коде должна быть строчка:
driver = new ChromeDriver();
или
driver = new EdgeDriver();
или
driver = new RemoteWebDriver(“url к selenium-серверу”, someCapabilities); (в someCapabilities указывается какой браузер запускать)

В представленном коде: в зависимости от входящего параметра browserName вы меняете значение переменной browser и возвращаете то, что у Вас храниться в глобальной переменной driver.

А разве в селениде это нужно?
Там же можно просто
Configuration.browser = “chrome”;

В самих класах обявляю вот так :slight_smile:

 private final WebDriver driver;
 public ClassName(WebDriver driver) {
        this.driver = driver;

    }

Прошу прощения, не обратил внимание на “selenide” в заголовке. )))
Добавьте логирование Configuration.browser на различных этапах выполнения кода. Может чего и всплывёт :wink:
Можно ещё проверить: пересоздаётся ли сам объект драйвера.

Вот такая ошибка у меня
org.testng.TestNGException:
Parameter ‘browserName’ is required by BeforeTest on method getDriver but has not been marked @Optional or defined
in \Project\testng.xml

Посмотрите мою тему. Я жрал тот же кактус и сожрал более менее удачно. Параллельный запуск в нескольких браузерах Selenide, TestNG, Gradle, Allure.Какой нормальный паттерн?
Теперь продолжение мармезонского балета с docker.

Спасибо большое) Решение проблемы с браузером - закрывать его. Все правильно.

Добавил @AfterTest protected void End() { Selenide.close(); }

Вы только учтите, что если дальше захотите именно параллельный запуск - то как у меня. Если он у Вас и так работает, то прикольно…интересно почему у меня тогда не работало.
А, ну у Вас задача проще.