【问题标题】:Webdriver not closing after driver.quit has been called调用 driver.quit 后 Webdriver 未关闭
【发布时间】:2016-06-02 08:27:48
【问题描述】:

我正在使用 WebDriver 运行测试,当测试失败时,浏览器不会关闭。在 Windows 机器上,这是一个大问题,因为我有几个 Firefox 实例仍在后台运行。请指教

代码如下:

public static WebDriver driver;
    private String sTestCaseName;

    @BeforeMethod
    public void beforeMethod() throws Exception {
        DOMConfigurator.configure("log4j.xml");
        sTestCaseName = Constant.Login_Name;
        Log.startTestCase(sTestCaseName);
        new BaseClass(driver);
    }

    @Test(description = "Login", enabled = true)
    public void TestLogin_Success() throws Exception {
        try {
            driver = new FirefoxDriver();
            LoginBuilder.Execute(driver);
            Log.info("Successfully Login!"); 
        } catch (Exception e) {

            Log.error(e.getMessage());
            throw (e);
        }

    }

    @Test(description = "Login_Failed", enabled = true)
    public void TestLogin_Failed() throws Exception {
        try {
            driver = new FirefoxDriver();
            LoginBuilder.Execute_Failed(driver);
            Log.info("Unsuccessfully Login!"); 
        } catch (Exception e) {

            Log.error(e.getMessage());
            throw (e);
        }

    }

    @AfterMethod
    public void afterMethod() {
        Log.endTestCase(sTestCaseName); 
        driver.close();
    }

【问题讨论】:

    标签: java selenium automation


    【解决方案1】:

    将 finally 块添加到您的 try catch 块中。 在那里关闭 WebDriver。

    示例代码sn-p

    try {
        ....
        ....
    } catch(Exception e) {
        ....
        ....
    } finally {
        ....
      driver.close();
    }
    

    有关处置、关闭和退出的更多信息 - Difference between webdriver.Dispose(), .Close() and .Quit()

    【讨论】:

    • 嗨,我试图添加代码 sn-p ,实际上浏览器仍然没有关闭。请指教
    【解决方案2】:

    致电driver.quit() 而不是driver.close()

    @AfterMethod
    public void afterMethod() {
        Log.endTestCase(sTestCaseName); 
        driver.quit();
    }
    

    【讨论】:

    • 嗨,我试过了,浏览器仍然没有关闭。我不确定是什么问题
    【解决方案3】:

    你为什么不尝试使用@AfterClass

    【讨论】: