Geb& Spock:在每次测试之间关闭浏览器

时间:2014-05-28 16:33:43

标签: spock geb

我需要在每次测试之间关闭浏览器。 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()
}

我已经专门尝试了这些并且可能有其变体。任何人都知道为什么我的浏览器不会在测试之间关闭?

感谢。

2 个答案:

答案 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()方法,它将在第一个实例后关闭浏览器,并且后续测试将失败。