通过Gradle使用Geb/Spock进行多浏览器测试:Geb.env属性的使用

通过Gradle使用Geb/Spock进行多浏览器测试:Geb.env属性的使用,gradle,groovy,cross-browser,automated-tests,geb,Gradle,Groovy,Cross Browser,Automated Tests,Geb,我目前正在使用Geb/Spock自动测试测试一个web应用程序,但是我面临着Geb.env属性的问题。如果我已经很好地理解了,geb.env可以采用的值是在GebConfig.groovy中的environments{}语句中定义的。我说得对吗 下面是我在GebConfig.groovy中对环境的定义: environments { chrome { driver = { new ChromeDriver() } }

我目前正在使用Geb/Spock自动测试测试一个web应用程序,但是我面临着
Geb.env
属性的问题。如果我已经很好地理解了,
geb.env
可以采用的值是在
GebConfig.groovy
中的
environments{}
语句中定义的。我说得对吗

下面是我在GebConfig.groovy中对环境的定义:

    environments {

        chrome {
            driver = { new ChromeDriver() }
        }

        firefox {
            System.setProperty("webdriver.gecko.driver","C:\\GeckoDriver\\geckodriver.exe")
            System.setProperty("webdriver.firefox.profile", "default")
            driver = { new FirefoxDriver() }
        }

        customFF {
            driver = {
                ProfilesIni profile = new ProfilesIni()
                FirefoxProfile myProfile = profile.getProfile("ForPrintTests")
                myProfile.setPreference("browser.download.folderList", 0)
                myProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
                System.setProperty("webdriver.gecko.driver", "C:\\GeckoDriver\\geckodriver.exe")
                System.setProperty("webdriver.firefox.profile", "ForPrintTests")
                new FirefoxDriver(myProfile)
            }
      } 
}

driver = {
    System.setProperty("webdriver.gecko.driver", "C:\\GeckoDriver\\geckodriver.exe")
    System.setProperty("webdriver.firefox.profile", "DefaultSelenium")
    new FirefoxDriver()
}
ext {
    // The drivers we want to use
    drivers = ["firefox", "chrome"]

    ext {

        gebVersion = '1.1.1'
        seleniumVersion = '3.4.0'
        chromeDriverVersion = '2.24'

    }
}

apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'project-report'

sourceCompatibility = 1.8

repositories {
    maven {
        url("https://plugins.gradle.org/m2/")
    }
}

dependencies {

    testCompile 'org.codehaus.groovy:groovy-all:2.3.11'

    testCompile "org.gebish:geb-core:1.1.1"
    testCompile "org.gebish:geb-spock:$gebVersion"
    testCompile "org.spockframework:spock-core:1.1-groovy-2.4"
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'

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

}

test{
    System.setProperty "geb.env", "customFF"
}
我需要一个特定规范的
customFF
环境。所以我想用
gradlew-Dgeb.env=customFF test--tests package.of.my.SpecificSpec
执行这个规范,但是当我运行这个命令时,规范仍然使用默认驱动程序执行。这就是为什么我对默认驱动程序定义进行了注释并重试,当然,构建失败了(因此我猜命令选项没有被考虑或理解)

我试图直接在
build.gradle
中设置它,并运行
gradlew test--tests包.of.my.SpecificTest
,但得到了相同的结果。这是我的体格。格雷德尔

    environments {

        chrome {
            driver = { new ChromeDriver() }
        }

        firefox {
            System.setProperty("webdriver.gecko.driver","C:\\GeckoDriver\\geckodriver.exe")
            System.setProperty("webdriver.firefox.profile", "default")
            driver = { new FirefoxDriver() }
        }

        customFF {
            driver = {
                ProfilesIni profile = new ProfilesIni()
                FirefoxProfile myProfile = profile.getProfile("ForPrintTests")
                myProfile.setPreference("browser.download.folderList", 0)
                myProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
                System.setProperty("webdriver.gecko.driver", "C:\\GeckoDriver\\geckodriver.exe")
                System.setProperty("webdriver.firefox.profile", "ForPrintTests")
                new FirefoxDriver(myProfile)
            }
      } 
}

driver = {
    System.setProperty("webdriver.gecko.driver", "C:\\GeckoDriver\\geckodriver.exe")
    System.setProperty("webdriver.firefox.profile", "DefaultSelenium")
    new FirefoxDriver()
}
ext {
    // The drivers we want to use
    drivers = ["firefox", "chrome"]

    ext {

        gebVersion = '1.1.1'
        seleniumVersion = '3.4.0'
        chromeDriverVersion = '2.24'

    }
}

apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'project-report'

sourceCompatibility = 1.8

repositories {
    maven {
        url("https://plugins.gradle.org/m2/")
    }
}

dependencies {

    testCompile 'org.codehaus.groovy:groovy-all:2.3.11'

    testCompile "org.gebish:geb-core:1.1.1"
    testCompile "org.gebish:geb-spock:$gebVersion"
    testCompile "org.spockframework:spock-core:1.1-groovy-2.4"
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'

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

}

test{
    System.setProperty "geb.env", "customFF"
}
我做错了吗?我应该使用
geb.driver
而不是
geb.env
?如果是,怎么做?因为我应该面临与
geb.env
相同的问题(未考虑选项)


如果需要,我可以提供更多信息。提前感谢您的帮助

您需要显式地设置
测试任务的系统属性,因为在运行gradle时,它们不会自动从系统属性集“传递”,因为测试是在单独的JVM中运行的(请参见第一段)

您可以对其进行硬编码:

test {
    systemProperty "geb.env", "customFF"
}
或“传递”运行构建的JVM的所有属性:

test {
    systemProperties System.getProperties()
}

谢谢@erdi,它很有效!环境加载良好(但我的配置不起作用)。如果我错了,请纠正我,但我知道
System.properties
指的是构建的JVM的属性,而
systemProperty
systemProperties
指的是来自“当前”JVM的属性(这里是一个测试)。是吗?请注意,如果我的代码不能正常工作,那是因为配置文件的定义。行
System.setProperty(“webdriver.firefox.profile”,“ForPrintTests”)
覆盖前面的首选项更改。我回到了简单的FirefoxProfile myProfile=new FirefoxProfile()//首选项更改new FirefoxDriver(myProfile)`