Геб и Спок: закрывайте браузер перед каждым тестом

Мне нужно закрывать браузер между каждым тестом. Геб создает для меня браузер, поэтому у меня сложилось впечатление, что Геб должен выключать драйвер между каждым тестом. Однако это не так. Вот структура и часть 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()
}

Я пробовал их специально и их варианты. Кто-нибудь знает, почему мой браузер не закрывается между тестами?

Спасибо.


person TIMBERings    schedule 28.05.2014    source источник
comment
Геб выходит после каждого задания. Я не уверен, может ли он выходить после каждого теста!   -  person Sharif Mamun    schedule 28.05.2014
comment
Могу я спросить, в чем причина желания перезапускать браузер после каждого теста? Вы хотите перезапускать его после каждого теста в определенной спецификации или каждого теста в глобальном масштабе?   -  person erdi    schedule 30.05.2014
comment
Каждый тест глобально. Приложение работает так: если мы сталкиваемся с какой-то ошибкой, появляется страница 404, на которой нет выхода. Таким образом, учетные данные пользователя все еще кешируются, если мы начнем запускать новую задачу, у нас возникнут некоторые конфликты. Вместо того, чтобы работать над этим беспорядком, чтобы убедиться, что мы начинаем в чистом состоянии, проще просто перезапустить браузер.   -  person TIMBERings    schedule 30.05.2014


Ответы (2)


Вот пример с связанная ветка в списке пользователей Geb. Возможно, это излишний ответ на ваш вопрос, но он показывает, как выйти и запустить новый экземпляр браузера для каждого теста.

Обратите внимание, что вам придется выходить из браузера самостоятельно после каждого теста.

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()
   }
}
person Ken    schedule 28.05.2014
comment
Спасибо, я неправильно перезапускал браузер, пытаясь вызвать getBrowser (). Для упрощения: def setup () {browser.config.cacheDriver = false browser.driver = browser.config.driver} def cleanup () {browser.quit ( )} - person TIMBERings; 29.05.2014
comment
Точно. Теперь, когда я перечитал ваш вопрос, я вижу, что он говорит о каждом тесте. Когда я ответил, было поздно в моем часовом поясе. Рад, что помог. - person Ken; 29.05.2014
comment
Вместо browser.quit() используйте browser.close(). Отчетность по-прежнему выполняется после закрытия браузера, поэтому в противном случае будет создано исключение. - person TIMBERings; 29.05.2014
comment
Это решение имеет неприятный побочный эффект, заключающийся в том, что сеанс становится недействительным после закрытия первого браузера. Впоследствии дальнейшие скриншоты не делаются. Тот факт, что вы не можете полагаться на лексический порядок выполнения при описании методов, также не принимался во внимание. Может быть, вы хотите проверить мое лучшее решение здесь. P.S .: Он учитывает не обработку файлов cookie, а обработку браузера / драйвера. - person kriegaex; 07.02.2017

Если у вас есть один тест в каждом классе / файле, попробуйте следующий код:

 def cleanupSpec() {
    if(browser.driver){
        CachingDriverFactory.clearCache()
        browser.driver.quit()
    }
}

Обычно, если вы используете метод cleanup (), он закроет браузер после первого экземпляра, и последующие тесты не пройдут.

person Karthik Lakshmanrao    schedule 03.09.2020