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

时间:2018-03-16 19:31:40

标签: java selenium selenium-webdriver cucumber-jvm

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

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

  1. IEDriverServer.exe和一个java.exe在测试后被粘贴在任务管理器上,但浏览器已关闭。我需要手动杀死它们。每次运行都会从这些任务中创建一个新的运行我尝试了stackoverflow的所有想法,但没有一个可以解决这个问题。
  2. 谢谢!

    我的SharedDriver类:

    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 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);
        }
    }
    

1 个答案:

答案 0 :(得分:2)

SharedDriver的实现不正确。您需要在shareddriver类中使用静态webdriver字段,创建一个关闭线程,将此线程添加到jvm shutdown钩子。使用此one

如果您想要杀死它,请使用this。将其添加到shutdown hook中。在调用REAL_DRIVER.quit()之后将其添加到线程的run方法中。