我正在使用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>
如何在所有测试结束时关闭浏览器?
答案 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();
}