为了账号安全,请及时绑定邮箱和手机立即绑定

tearDown 没有被初始化

tearDown 没有被初始化

小唯快跑啊 2022-06-30 11:49:49
我有一个 Java 自动化脚本。我有一个有效的设置方法,但由于某种原因我的 tearDown 没有被阅读。当我运行自动化测试时,我似乎有两个问题如果它多次运行测试失败并且浏览器窗口保持打开状态。即使测试通过了浏览器窗口也永远不会关闭,这让事情变得非常混乱。我没有为实际测试添加任何代码功能文件,因为我认为问题出在设置中,但非常高兴。我怀疑这两个问题是相关的,但我无法理解在哪里或如何。这是我的 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 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

尝试使用 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()");

    }

}


查看完整回答
反对 回复 2022-06-30
?
忽然笑

TA贡献1806条经验 获得超5个赞

看来您的 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();


查看完整回答
反对 回复 2022-06-30
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信