spock - 盖布和斯波克 : Close Browser Between Each Test

标签 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()
}

我已经具体尝试过这些,并且可能有一些变化。有人知道为什么我的浏览器在测试之间不会关闭吗?

谢谢。

最佳答案

这是一个带有 its associated thread 的示例在 Geb 用户列表中。对于回答您的问题来说,这可能有点过分了,但它展示了如何退出并为每个测试启动一个新的浏览器实例。

请注意,每次测试后您都必须自行 quit() 浏览器。

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

关于spock - 盖布和斯波克 : Close Browser Between Each Test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23917230/

相关文章:

java - 使用 Spock 在 Spy 对象中 stub 一个 void 方法

jquery - GEB 获取背景和文本颜色

gradle - geb-gradle-saucelabs集成的驱动程序错误

xpath - 在 Geb 中动态设置内容

grails - 在 IntelliJ 中运行 grails 测试时遇到困难 : Illegal use of nonvirtual function call

java - 升级到 Spring Boot 2.4 破坏 Spock Spring 模拟

unit-testing - 模拟记录器时出现问题

gradle - 如何获得SonarQube来计算spock/groovy单元测试?

selenium - 我们如何循环不同的基本URL而不是默认基本URL并运行功能测试?

linux - Headless Firefox 和 Geb/Selenium 的登录问题