【问题标题】:Selenium not closing browser, launches twiceSelenium 不关闭浏览器,启动两次
【发布时间】:2016-03-10 21:04:54
【问题描述】:

我将这个钩子类与 selenium 和 cucumber 一起使用。当我运行一个功能 2 实例启动时,这是一个问题,实例也没有关闭。他们从这个钩子里跑了。我做错了什么?

public class WebDriverHooks {
    public static WebDriver driver;

    @Before
    /**
     * Delete all cookies at the start of each scenario to avoid
     * shared state between tests
     */
    public void openBrowser() throws MalformedURLException {
        System.out.println("Called openBrowser");
        System.setProperty("webdriver.chrome.driver", "//Applications//chrome//chromedriver");

        driver = new ChromeDriver();
        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
    }

    @After
    /**
     * Embed a screenshot in test report if test is marked as failed
     */
    public void embedScreenshot(Scenario scenario) {
        if (scenario.isFailed()) {
            try {
                scenario.write("Current Page URL is " + driver.getCurrentUrl());
                byte[] screenshot = getScreenshotAs(OutputType.BYTES);
                byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
                scenario.embed(screenshot, "image/png");
            } catch (WebDriverException somePlatformsDontSupportScreenshots) {
                System.err.println(somePlatformsDontSupportScreenshots.getMessage());
            }
            driver.quit();
        }
    }
}

【问题讨论】:

    标签: selenium-webdriver junit cucumber selenium-chromedriver


    【解决方案1】:

    基本上你没有足够小心地管理你的WebDriver 实例。

    您的@After 处理程序仅在发生故障时调用.quit(),而您的@Before 每次都会创建一个新的ChromeDriver。而且由于您的钩子(以及两个处理程序方法)可能会被多次调用(Cucumber 的本质),您可能会获得越来越多的 Driver 实例。

    你应该做的是:

    1. 确保您的@After 每次都调用.quit(),以匹配您的@Before
    2. 或者,更有效的是,将您的 @Before 更改为仅在需要时创建驱动程序:

      if (driver == null) {
          driver = new ChromeDriver();
      }
      

    ...并从@After 中完全删除.quit()。将退出共享ChromeDriver 实例的责任转移到您的测试运行程序(我们看不到),或者创建一个关闭挂钩来执行此操作。它需要在某个时候完成,否则浏览器进程将不会退出。

    【讨论】:

    • 创建一个关闭挂钩。 at_exit 做 driver.quit() 结束
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2018-05-10
    • 2019-09-07
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多