Перезапустить браузер между тестами

John спросил: 28 апреля 2018 в 09:49 в: selenium

Как перезапустить браузер между тестами? У меня есть DrivErFactory и в BasePage в конструкторе я вызываю

public BasePage() {
    this.driver = DriverFactory.getDriver();
    this.wait = new WebDriverWait(getDriver(), waitTime);
}

Тогда в моих тестах я:

@BeforeMethod
public void beforeTest() {
loginPage.open();}

и

@AfterMethod
    public void afterTest() {
        loginPage.quitDriver();
    }

После первого теста я получаю: org.openqa.selenium.NoSuchSessionException: Идентификатор сеанса равен null. Использование WebDriver после вызова quit ()?

Если я использую в After:

loginPage.closeDriver();

, у меня есть: org.openqa.selenium .NoSuchSessionException: нет такого сеанса

В BeforeTest WebDriver может начать так, чтобы он не запускался после AfterTest ?

Как сделать лучше? Как перезапустить браузер перед каждым тестом?

DriverFactory

public class DriverFactory {
    static PropertyBase propertyBase = new PropertyBase();
    Properties prop = new Properties();    private static WebDriver driver;    private static void setChromeDriverPath() {
        String chromeDriverPath = ".\\resources\\chromedriver.exe";
        System.setProperty("webdriver.chrome.driver", chromeDriverPath);
    }    private static void setFireFoxDriverPath() {
        String chromeDriverPath = ".\\resources\\geckodriver.exe";
        System.setProperty("webdriver.gecko.driver", chromeDriverPath);
    }    private static void configureDriver() {
        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
    }    private static FirefoxProfile setFireFoxProfile() {
        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("browser.download.dir", "./downloads");
        profile.setPreference("browser.download.folderList", 2);
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk", 
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;"); 
        profile.setPreference( "browser.download.manager.showWhenStarting", false );
        profile.setPreference( "pdfjs.disabled", true );
        return profile;
    }    private static ChromeOptions setChromeProfile() {
        ChromeOptions options = new ChromeOptions();
        Map<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("download.prompt_for_download", true);
        prefs.put("download.default_directory", "./download");
        options.setExperimentalOption("prefs", prefs);
        return options;
    }    private static WebDriver createChromeDriver(){
        setChromeDriverPath();
        return driver = new ChromeDriver(setChromeProfile());
    }    private static WebDriver createFireFoxDriver(){
        setFireFoxDriverPath();
        return driver = new FirefoxDriver(setFireFoxProfile());
    }    public static WebDriver getDriver() {
        String browserType = propertyBase.getProperty("browser");        switch (browserType) {
        case "chrome":
            if (driver==null) {
                driver = createChromeDriver();
            }
            break;
        case "firefox":
            if (driver==null) {
                createFireFoxDriver();
            }
            break;
        }
        configureDriver();
        return driver;
    }

1 ответ

Есть решение
Chai ответил: 28 апреля 2018 в 11:29

У вас есть способ получить объект драйвера с фабрики. Может быть, вы должны сделать там метод, чтобы закрыть его. Вы теперь называете это на странице входа. Это не кажется очень логичным. Однако важно, вероятно, закрыть драйвер с драйвером driver.quit () или driver.close (), а затем установить драйвер = null;

Таким образом, когда вы запускаете новый тест, getDriver вызывается, а if (driver == null) гарантирует, что будет создан новый объект.

Если мое предположение верно, то это должно сделать трюк, иначе напишите все, что у вас есть в loginPage.quitDriver ( ).

Что-то вроде этого, внутри класса DriverFactory

public static void quitDriver() {
    driver.quit();
    driver = null;
}

изменить: опечатки

Chai ответил: 28 апреля 2018 в 11:29
Если да, возможно, вы можете принять ответ, чтобы люди знали, что на этот вопрос был дан ответ. Спасибо
John ответил: 28 апреля 2018 в 11:28
Да что работает :) спасибо, чувак! также спасибо за отзыв о loginPage.quitDriver ().