通过 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()
}
我目前正在使用 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()
}