tearDown 没有被初始化

我有一个 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;

    }


}

非常感激任何的帮助。


小唯快跑啊
浏览 106回答 2
2回答

PIPIONE

尝试使用 junit(j5 jupiter) 接口扩展您的驱动程序类并覆盖之前/之后的方法,这是一个简单的示例,使用您的一些代码: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()");    }}

忽然笑

看来您的 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");&nbsp; &nbsp;// <<------your test scenario should be placed here&nbsp;tearDown();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java