Геб со Споком и закрытие окна браузера

Итак, я написал свой первый скрипт Geb, который расширяет GebReportingSpec. Я указал очистку определения, в которой я делаю driver.quit(). Теперь браузер закрывается, но я получаю сообщение об ошибке, потому что утилита скриншотов не может работать, потому что я предполагаю, что она запускается после закрытия браузера. Я попытался включить сон, чтобы увидеть, была ли проблема в этом, но это ничего не дало.


JUnit 4 Runner, Tests: 1, Failures: 1, Time: 25944Test Failure: Validate that the default time zone for store is set to America/New_York(groovy.manager.ReferenceStoreDefaultTimeZoneTests)org.openqa.selenium.remote.SessionNotFoundException: The FirefoxDriver cannot be used after quit() was called.Build info: version: '2.31.0', revision: '1bd294d185a80fa4206dfeab80ba773c04ac33c0', time: '2013-02-27 13:51:26'System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.3', java.
version: '1.6.0_43'
Driver info: driver.version: RemoteWebDriver
        at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute
(FirefoxDriver.java:352)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.ja
va:527)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.ja
va:569)
        at org.openqa.selenium.remote.RemoteWebDriver.getPageSource(RemoteWebDri
ver.java:414)
        at geb.report.PageSourceReporter.getPageSource(PageSourceReporter.groovy
:39)
        at geb.report.PageSourceReporter.writePageSource(PageSourceReporter.groo
vy:35)
        at geb.report.PageSourceReporter.writeReport(PageSourceReporter.groovy:2
7)
        at geb.report.ScreenshotAndPageSourceReporter.writeReport(ScreenshotAndP
ageSourceReporter.groovy:31)
        at geb.Browser.report(Browser.groovy:731)
        at geb.spock.GebReportingSpec.report(GebReportingSpec.groovy:43)
        at geb.spock.GebReportingSpec.cleanup(GebReportingSpec.groovy:39)

Мысли?

РЕДАКТИРОВАТЬ:

Драйвер создается через файл GebConfig

@Grab(group='org.seleniumhq.selenium', module='selenium-firefox-driver', 
    version='2.31.0')
@Grab(group='org.seleniumhq.selenium', module='selenium-chrome-driver', 
    version='2.31.0')
@Grab(group='org.seleniumhq.selenium', module='selenium-htmlunit-driver', 
    version='2.31.0')
@Grab("org.seleniumhq.selenium:selenium-support:2.28.0")

import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.htmlunit.HtmlUnitDriver

reportsDir = "target/geb-reports"

// default is to use firefox
driver = {
    def driver = new FirefoxDriver()
    driver.manage().window().maximize()
    return driver
}

environments {
    'chrome' {
        def chromePath = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
        System.setProperty("webdriver.chrome.driver", chromePath)

        driver = {
            def driver = new ChromeDriver()
            return driver
        }
    }

    'firefox' {
        driver = {
            def driver = new FirefoxDriver()
            driver.manage().window().maximize()
            return driver
        }   
    }

    'htmlunit' {
        driver = {
            def driver = new HtmlUnitDriver()
            driver.javascriptEnabled = true
            return driver
        }   
    }
}

Вот скрипт который выполняется

package groovy.manager

@Grab( 'org.spockframework:spock-core:0.7-groovy-2.0' )
@Grab(group='org.gebish', module='geb-core', version='0.9.0-RC-1')
@Grab(group='org.gebish', module='geb-spock', version='0.9.0-RC-1')
@Grab(group='org.seleniumhq.selenium', module='selenium-firefox-driver', 
    version='2.31.0')

import geb.spock.GebReportingSpec
import org.openqa.selenium.firefox.FirefoxDriver
import groovy.manager.pages.LoginPage
import groovy.manager.pages.org.OrganizationHomePage
import groovy.manager.pages.org.OrganizationProfilePage

class ReferenceStoreDefaultTimeZoneSpec extends GebReportingSpec {

    def "Validate that the default time zone is set to America/New_York"() {
        given: "You have the admin username and password"
            def username = "admin"
            def password = "test"

        when: "Navigate to Manager"
            to LoginPage

        and: "Log intoManager"
            usernameInput().value username
            passwordInput().value password
            submitBtn().click()

        then:
            assert at (OrganizationHomePage)

        and:
            assert ( {$("a[value='America/New York']")} )

        when: "Navigate to the organization profile"
            timeZoneLink().click()

        then:
            assert at (OrganizationProfilePage)

        and: "Verify America New York is selected"
            assert ( $("span", text: contains("America/New York")) )
    }
}

person jrock2004    schedule 27.03.2013    source источник
comment
как вы проводите этот тестовый класс?   -  person erdi    schedule 28.03.2013
comment
Из xterm2 запустив groovy groovy/manager/ReferenceStoreDefaultTimeZoneSpec.groovy   -  person jrock2004    schedule 28.03.2013


Ответы (3)


Как вы настраиваете драйвер? Вам нужно только выйти из драйвера, если вы явно создаете его . В противном случае драйвер выключится.

person Scott    schedule 27.03.2013
comment
Я добавил свой GebConfig, здесь обрабатывается создание драйвера. - person jrock2004; 27.03.2013
comment
Затем вы должны позволить Geb справиться с отключением драйвера, вам не нужно вызывать quit. - person Scott; 27.03.2013
comment
Когда я запускаю скрипт через командную строку, тест завершается, и он остается там, а браузер остается открытым. Командная строка находится на этом JUnit 4 Runner, тесты: 1, сбои: 0, время: 27463 - person jrock2004; 27.03.2013
comment
Версии? И как выглядит ваш скрипт. Я устанавливаю несколько неудачных тестов, и все наши драйверы закрываются, как и ожидалось. - person Scott; 27.03.2013
comment
В сценарии все вроде нормально. Я хотел бы посмотреть, сможете ли вы разбить это на как можно более мелкий воспроизводимый случай и опубликовать в списке рассылки или как ошибку на github, но я не могу воспроизвести (хотя мы используем Gradle, а не Grape/Ivy для строить). - person Scott; 27.03.2013
comment
Что ж, если я нажму control+c в окне терминала, браузер закроется, но похоже, что я должен сделать это по-другому. - person jrock2004; 28.03.2013
comment
К сожалению, я не могу воспроизвести эту проблему, я думаю, что нужен короткий, самодостаточный, правильный пример. Если вы можете создать это, вы должны опубликовать в списке рассылки (или здесь - заменив код выше). - person Scott; 28.03.2013

Я мог бы воспроизвести вашу проблему, если бы я запустил действительно простую спецификацию теста geb, используя команду groovy в командной строке. Я не знаю, связано ли это с использованием аннотаций @Grab или с тем, как работает groovy JUnit runner, но что-то где-то не так, и браузер действительно не закрыт.

Я взял тот же класс и запустил его, используя сборку Gradle, и запуск завершился изящно, а браузер закрылся.

Если у вас еще не установлен Gradle, проще всего это сделать с помощью gvm.

Затем поместите следующее в файл build.gradle:

apply plugin: 'groovy'                       

repositories {                               
    mavenCentral()                             
}                                            

dependencies {                               
   groovy 'org.codehaus.groovy:groovy-all:2.1.2'
   testCompile 'org.spockframework:spock-core:0.7-groovy-2.0'
   testCompile 'org.gebish:geb-spock:0.9.0-RC-1'
   testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:2.31.0'
} 

Наконец, скопируйте GebConfig.groovy и класс спецификации в src/test/groovy и запустите gradle test. Ваш тест будет выполнен, после чего браузер будет закрыт.

person erdi    schedule 29.03.2013
comment
Это может немного уйти от темы, но я сделал то, что вы просили, и я получаю следующую ошибку: Общая ошибка во время преобразования: конфликтующие версии модуля. Модуль [groovy-all загружен в версии 2.1.1, а вы пытаетесь загрузить версию 2.0.5. Я проверил весь свой проект и вообще не пытаюсь загрузить 2.0.5. Мысли? - person jrock2004; 29.03.2013
comment
groovy-all:2.0.5 является зависимостью Spock (запустите зависимости gradle, чтобы увидеть дерево зависимостей), но это должно быть нормально, поскольку Gradle должен использовать новейшую версию groovy-all — это поведение Gradle по умолчанию. Вы используете какую-то старую версию Gradle? У меня работало с 1.5, которая является последней версией. Кроме того, не забудьте удалить все аннотации @Grab из вашего тестового класса, я забыл сделать это в начале, но получил совершенно другую ошибку, чем ваша. Если ничего не помогает, попробуйте изменить зависимость groovy в build.gradle на 2.0.5. - person erdi; 30.03.2013

это то, что я использую

dependencies {
def gebVersion = "0.9.3"
def seleniumVersion = "2.42.2"
// If using Spock, need to depend on geb-spock
testCompile "org.gebish:geb-spock:$gebVersion"
testCompile("org.spockframework:spock-core:0.7-groovy-2.0") {
    exclude group: "org.codehaus.groovy"
}
testCompile "org.codehaus.groovy:groovy-all:2.3.4"

testCompile "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion"
testRuntime "org.seleniumhq.selenium:selenium-support:$seleniumVersion"

}

person Samuel Adesoga    schedule 15.08.2014