tearDown尚未初始化

时间:2019-02-20 15:10:34

标签: java selenium automation

我有一个Java Automation脚本。我有一个可以使用的设置方法,但是由于某种原因,我的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 :(得分:0)

似乎您的DriverSingleton的驱动程序从未初始化,并且在SeleniumSetup类的setup()方法中,SeleniumSetup的驱动程序在每次运行代码时都会初始化并使用,将tearDown()放在{的末尾{1}},您的浏览器窗口将关闭。

setup()

答案 1 :(得分:0)

尝试使用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()");
    }
}
相关问题