Cucumber picocontainer/SharedDriver 无法正确处理浏览器实例

Cucumber picocontainer/SharedDriver doesn't handle browser instance properly

我正在使用 cucumber-jvm picocontainer 在 classes 之间共享 selenium 驱动程序。我有 ShareDriver 和 WebDriverFactory class。

我的问题如下: 1. 如果我 运行 2 个测试用例,driver/browser 实例在第一个测试用例后关闭,创建新的浏览器实例,运行 第二个。我只想使用 1 个浏览器实例和 运行 测试,然后关闭它。

  1. IEDriverServer.exe和一个java.exe测试后卡在任务管理器,浏览器关闭。我需要手动杀死它们。每个 运行 从这些任务中创建一个新任务。我尝试了来自 Whosebug 的所有想法,但其中 none 可以解决这个问题。

谢谢!

我的 SharedDriver class:

public class SharedDriver extends EventFiringWebDriver implements Startable {

    public SharedDriver() {
        super(WebDriverFactory.localInternetExplorerWebDriver());
    }

    @After
    public void embedScreenshot(Scenario scenario) {
        try {
            byte[] screenshot = getScreenshotAs(OutputType.BYTES);
            scenario.embed(screenshot, "image/png");
        } catch (WebDriverException somePlatformsDontSupportScreenshots) {
            System.err.println(somePlatformsDontSupportScreenshots.getMessage());
        }
    }

    @Override
    public void start() {

    }

    @Override
    public void stop() {
        quit();
    }
}

我的 WebDriverFactory class:

class WebDriverFactory {
    static {
        System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
    }

    static WebDriver localInternetExplorerWebDriver() {
        DesiredCapabilities returnCapabilities = DesiredCapabilities.internetExplorer();
        System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
        //returnCapabilities.setCapability("nativeEvents", false);
        returnCapabilities.setCapability("requireWindowFocus", true);
        returnCapabilities.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, false);
        returnCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
        returnCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        returnCapabilities.setCapability("ignoreZoomSetting", true);
        return new InternetExplorerDriver(returnCapabilities);
    }
}

SharedDriver 的实现不正确。你需要在shareddriverclass中有一个静态的webdriver字段,创建一个shutdown线程,将这个线程添加到jvm shutdown hook中。使用这个 one

如果你也想杀死它,请使用 this。在调用 REAL_DRIVER.quit().

后,将其添加到线程的 运行 方法中的关闭 hook.Add