Selenide: открытие и закрытие браузера для каждого теста

Я хочу, чтобы для каждого теста создавался новый драйвер и по его окончанию он закрывался.
Удалось сделать для Selenium, но не получается для Selenide - использую его из-за удобства и простоты

Код для Selenium
Driver.java

package com.driver;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Driver {

    public static final ThreadLocal<WebDriver> DRIVERS = new ThreadLocal<>();

    private static WebDriver webDriver;

    public static void downloadWebDriver(){
        WebDriverManager.chromedriver().setup();
    }

    public static void instanceWebBrowser(){
        webDriver = new ChromeDriver();
        DRIVERS.set(webDriver);
    }

    public static void closeBrowser(){
        webDriver.close();
    }
}

Navigation.java - для открытия ссылки и задания различных конфигураций

package com.navigation;

import org.openqa.selenium.WebDriver;
import com.opencart.driver.Driver;

public class Navigation {

    private WebDriver driver;

    public Navigation(){
        driver = Driver.DRIVERS.get();
    }

    public void navigateToUrl(String url){
        driver.get(url);
        driver.manage().window().maximize();
    }
}

BaseTest.java - использую его как parent для других тестов

import com.driver.Driver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;

public class BaseTest {

    @BeforeSuite
    public void setup(){
        Driver.downloadWebDriver();
    }

    @BeforeClass
    public void createDriver(){
        Driver.instanceWebBrowser();
    }

    @AfterSuite
    public void closeBrowser(){
        Driver.closeBrowser();
    }
}

А что именно не получается?
В целом в селениде всё намного проще.

  • Выкиньте весь класс Driver
  • Выкиньте поле Navigation.driver
  • Вместо navigateToUrl() вызывайте Selenide.open()
  • Вместо Driver.closeBrowser() вызывайте Selenide.closeWebDriver()
3 лайка

подскажите, а нужно ли вручную закрывать вебдрайвер после того как отработали все тесты?

По умолчанию не нужно: селенид сам открывает и закрывает браузер, когда он больше не нужен.

Только в одном случае вам нужно закрывать самим: если вы открыли его сами передали селениду с помощью метода WebDriverRunner.setWebDriver(). Тогда правило простое: сам открыл - сам и закрывай.
См. setWebDriver или WebDriverProvider?

1 лайк

Подскажите пожалуйста, а что делать когда драйвер браузера остается открытым после того как какой-либо тест упал (по разным ошибкам, например, не найден элемент)?
То есть браузер CHROME закрывается, но в процессах остается и занимает ресурсы ЦП и памяти

значит вы сами как-то закрываете браузер, а делать это не надо