运行所有功能后黄瓜jvm关闭浏览器

时间:2017-11-14 05:06:48

标签: java spring selenium selenium-webdriver cucumber-jvm

我正在使用Cucumber-JVM和Selenium测试Spring Boot应用程序。我正在定义一个Web驱动程序bean并传递一个destroy方法来退出(关闭webdriver和Chrome的所有实例),但它会让浏览器保持打开状态。

@Configuration
@ComponentScan(basePackages = "com.rodmccutcheon.pensionator.bdd")
public class CucumberConfig {

    @Bean(destroyMethod = "quit")
    public WebDriver webDriver() {
        System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
        return new ChromeDriver();
    }

}

我基本上从Cucumber for Java书中复制了一个例子。区别在于他们使用xml配置,我选择了Java配置。

<bean class="org.openqa.selenium.support.events.EventFiringWebDriver" destroy-method="quit">
    <constructor-arg>
        <bean class="org.openqa.selenium.firefox.FirefoxDriver" />
    </constructor-arg>
</bean>

如何在所有测试结束时关闭浏览器?

3 个答案:

答案 0 :(得分:0)

你的java类中有以下代码吗?

public void quit()  {
      driver.quit();
    }

在bean定义中,您正在初始化驱动程序。按照惯例,您应该使用init-method属性进行setup和destroy-method属性进行拆卸。

bean应该是这样的。

WebDriver driver;

public void initDriver(){
System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
driver = new ChromeDriver();
}

public void quit(){
driver.quit();
}

@Bean(init-method="initDriver" , destroy-Method = "quit")
    public void testUrl() {
    driver.get("https://www.stackoverflow.com");
    driver.getTitle();
    }

答案 1 :(得分:0)

可能只是你选择了错误的注释属性(或者只是一个错字)。您应该使用 destroyMethodName ,而不是使用 destroyMethod 。请参阅this

@Configuration
@ComponentScan(basePackages = "com.rodmccutcheon.pensionator.bdd")
public class CucumberConfig {

    @Bean(destroyMethodName = "quit")
    public WebDriver webDriver() {
        System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
        return new ChromeDriver();
    }

}

答案 2 :(得分:0)

我认为默认的bean范围是单例,但如果我添加@Scope(“singleton”),浏览器会正确关闭。例如:

@Bean(destroyMethod = "quit")
@Scope("singleton")
public WebDriver webDriver() {
    System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
    return new ChromeDriver();
}