tearDown не инициализируется - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть скрипт автоматизации Java.У меня есть метод настройки, который работает, но мой tearDown по какой-то причине не читается.

Когда я запускаю тест автоматизации, у меня возникают две проблемы

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

Я не добавил ни одногофайлы функций кода для реального теста, так как я думаю, что проблема в настройке, но более чем рада.

Я подозреваю, что обе проблемы связаны, но я не могу понять, где и как.

Вот мой класс SeleniumSetUp

public class SeleniumSetup {

    protected WebDriver driver;

    public SeleniumSetup(WebDriver driver)
    {

    }

    public SeleniumSetup() {

    }

    public void prepareBrowserForSelenium() {

//      setup();
        if(DriverSingleton.getDriver() == null)
        {
            setup();    
        }
        else
        {
            driver = DriverSingleton.getDriver();
        }

    }

    public void setup() {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Selenium and drivers\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("http://the-internet.herokuapp.com/");
        driver.manage().window().maximize();
        System.out.println("Set up running");

    }

    public void tearDown() {

        driver.quit();
        System.out.println("Tear down running");
    }

}

Я добавил Println и вижу, что он никогда не возвращается, когда я запускаю свой скрипт.

Вот моя базовая страница;

package pages;

import org.openqa.selenium.WebDriver;

public class BasePage {

    protected WebDriver driver;

    public BasePage(WebDriver driver) {
        this.driver = driver;
    }

}

И мой водитель

package support;

import org.openqa.selenium.WebDriver;

public class DriverSingleton {

    private static WebDriver driver;

    public DriverSingleton () {

    }

    public static WebDriver getDriver() {
        return driver;
    }

    public static void setDriver (WebDriver driver) {
        DriverSingleton.driver = driver;
    }

}

Любая помощь будет наиболее ценной.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Попробуйте расширить класс драйвера с помощью интерфейсов junit (j5 jupiter) и переопределить методы before / after, вот простой пример, использующий часть вашего кода:

import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
import org.junit.jupiter.api.extension.ExtensionContext;

public class Driver implements AfterTestExecutionCallback, BeforeTestExecutionCallback, BeforeAllCallback, AfterAllCallback {

    protected WebDriver driver;

    @Override
    public void beforeAll(ExtensionContext context) throws Exception {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Selenium and drivers\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("http://the-internet.herokuapp.com/");
        driver.manage().window().maximize();
        System.out.println("Set up running");
    }

    @Override
    public void afterAll(ExtensionContext context) throws Exception {
        driver().quit();
    }

    @Override
    public void beforeTestExecution(ExtensionContext context) throws Exception {
        //whatever steps you need before EACH test, like navigate to homepage etc...
    }

    @Override
    public void afterTestExecution(ExtensionContext context) throws Exception {
        // steps do to after each test, best practice is to clear everything:
        driver.manage().deleteAllCookies();
        driver.executeScript("window.sessionStorage.clear()");
        driver.executeScript("window.localStorage.clear()");
    }
}
0 голосов
/ 20 февраля 2019

Похоже, ваш драйвер DriverSingleton никогда не инициализировался, и в setup() методе класса SeleniumSetup драйвер SeleniumSetup инициализируется и используется каждый раз, когда вы запускаете код, ставьте tearDown() в конце setup() и вашОкно браузера закроется.

System.setProperty("webdriver.chrome.driver", "C:\\Users\\Selenium and drivers\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://the-internet.herokuapp.com/");
driver.manage().window().maximize();
System.out.println("Set up running");
   // <<------your test scenario should be placed here 
tearDown();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...