Webdriver Geb覆盖web驱动程序

Webdriver Geb覆盖web驱动程序,webdriver,htmlunit,geb,htmlunit-driver,Webdriver,Htmlunit,Geb,Htmlunit Driver,我正在使用gradle运行测试,gradle以以下方式指定JVM属性: -Dgeb.env=dev -Dgeb.driver=org.openqa.selenium.htmlunit.HtmlUnitDriver 这将在Geb配置脚本中设置驱动程序并配置环境。 在环境属性中指定HtmlUnit后,我想为它启用JavaScript。更一般地说,我想在配置脚本中覆盖驱动程序(我不想在每个测试的setup()块中设置驱动程序) 我尝试将以下代码片段放入Geb配置脚本中: if (System.get

我正在使用gradle运行测试,gradle以以下方式指定JVM属性:

-Dgeb.env=dev -Dgeb.driver=org.openqa.selenium.htmlunit.HtmlUnitDriver
这将在Geb配置脚本中设置驱动程序并配置环境。 在环境属性中指定HtmlUnit后,我想为它启用JavaScript。更一般地说,我想在配置脚本中覆盖驱动程序(我不想在每个测试的
setup()
块中设置驱动程序)

我尝试将以下代码片段放入Geb配置脚本中:

if (System.getProperty("geb.driver")=="org.openqa.selenium.htmlunit.HtmlUnitDriver") {
    driver = {
        println "Setting JavaScript"
        def driver = new HtmlUnitDriver()
        driver.setJavascriptEnabled(true)
        driver
    }
}
这会打印出消息,但由于以下原因测试失败:

java.lang.UnsupportedOperationException: Javascript is not enabled for this HtmlUnitDriver instance

我有点惊讶,你看到
设置JavaScript
打印出来,但是发生的事情是,你的驱动关闭没有被调用,因为如果你使用
geb.driver
系统属性,那么geb会在内部基于该属性为你创建驱动。我建议您使用env在
GebConfig.groovy
中创建驱动程序,或者使用与
geb.driver
不同的系统属性来请求使用给定的驱动程序impl并自己管理驱动程序的创建。

查看一下Thank@olyv,但在我的情况下,它工作得很好。我只是想用我对所有驱动程序(如chrome、firefox、ie、phantomjs)所做的方式来设置它(通过在属性中指定类名)。但不幸的是,htmlunit在初始化过程中没有默认设置JavaScript。你是对的,我在Geb源代码中找到了一个位置,它负责:
properties.getProperty(“Geb.driver”)?:readValue(“driver”,null)
我决定通过传递空的
geb.driver
属性并在geb config脚本中使用闭包设置驱动程序来解决这个问题。这允许我为除HtmlUnit之外的所有驱动程序设置
geb.driver