通过Gradle使用Geb/Spock进行多浏览器测试:Geb.env属性的使用
我目前正在使用Geb/Spock自动测试测试一个web应用程序,但是我面临着通过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.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)`