我需要在每次测试之间关闭浏览器。 Geb为我创建了浏览器,因此我认为Geb应该在每次测试之间关闭驱动程序。但事实并非如此。这是GebConfig.groovy的结构和部分内容。
test_automation
-functional
--src
---test
---groovy
----spec
-----Test Locations
---resources
----GebConfig.groovy
GebConfig.groovy
waiting {
timeout = 20
}
environments {
chrome {
driver = {
System.setProperty('webdriver.chrome.driver', 'src/test/resources/chromedriver')
new ChromeDriver()
}
}
firefox {
driver = { new FirefoxDriver() }
}
}
我已经将GebSpec扩展到CommonGebSpec,这里有很多我尝试过的事情:
CommonGebSpec.groovy
def setup() {
resetBrowser()
getBrowser()
}
def cleanup() {
browser.close()
browser.quit()
}
______________________________
def cleanup() {
browser.clearCookies()
}
______________________________
def cleanup() {
resetBrowser()
}
我已经专门尝试了这些并且可能有其变体。任何人都知道为什么我的浏览器不会在测试之间关闭?
感谢。
答案 0 :(得分:4)
以下是Geb用户列表中its associated thread的示例。它可能用于回答您的问题,但它显示了如何为每个测试退出并启动新的浏览器实例。
请注意,您必须在每次测试后自行退出()浏览器。
import geb.spock.GebSpec
import pages.RememberMePage
import spock.lang.*
import utils.PageHelper
import org.openqa.selenium.Cookie
class RememberMeLoginSpec extends GebSpec {
@Shared cookieName = "remember-me"
@Shared cookieValue = "initial"
def "login user with remember me checked and close browser"() {
given:
PageHelper.login(browser, "userOne", "password1!", true, false)
cookieValue = driver.manage().getCookieNamed(cookieName).getValue()
browser.close()
}
def "user opens browser"() {
when: "cookie is set and user is logged in"
browser.config.cacheDriver = false
browser.driver = browser.config.driver
RememberMePage rememberMePage = browser.to RememberMePage
// navigate to a page before setting cookie to avoid
// https://code.google.com/p/chromedriver/issues/detail?id=728
go "pageOne"
Cookie cookie = new Cookie(cookieName, cookieValue)
driver.manage().addCookie(cookie)
// navigate to new page to "login" user
go "pageTwo"
then: "username appears in greeting and page requiring full authentication shows login modal"
rememberMePage.navigation.greetingText.text().endsWith("userOne")
rememberMePage.loginModal.loginModal.present
cleanup:
browser.quit()
}
}
答案 1 :(得分:0)
如果每个类/文件中只有一个测试,请尝试以下代码:
def cleanupSpec() {
if(browser.driver){
CachingDriverFactory.clearCache()
browser.driver.quit()
}
}
通常,如果您使用cleanup()方法,它将在第一个实例后关闭浏览器,并且后续测试将失败。