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

Multiple browser testing with Geb/Spock via Gradle : usage of geb.env property

我目前正在使用 Geb/Spock 自动化测试来测试网络应用程序,但我遇到了 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()
}

我需要特定规范的 customFF 环境。所以我想用 gradlew -Dgeb.env=customFF test --tests package.of.my.SpecificSpec 执行这个规范,但是当我 运行 命令时,规范仍然用默认驱动程序执行。这就是为什么我评论了默认驱动程序定义并再次尝试,当然,构建失败了(所以我猜命令选项没有被考虑或不被理解)。

我试图通过 gradlew test --tests package.of.my.SpecificTest 直接在 build.gradle 和 运行 中设置它,但我得到了相同的结果。这是我的 build.gradle:

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 相同的问题(未考虑选项)。

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

您需要在 test 任务上显式设置系统属性,因为它们不会自动 "passed" 来自 运行ning gradle 时设置的系统属性,因为测试是运行 在单独的 JVM 中(参见第一段 here)。

您可以对其进行硬编码:

test {
    systemProperty "geb.env", "customFF"
}

或"pass" JVM 运行构建中的所有属性:

test {
    systemProperties System.getProperties()
}