Geb:如何使用木偶代替SeleniumWebDriver?

Geb:如何使用木偶代替SeleniumWebDriver?,selenium,firefox,webdriver,geb,firefox-marionette,Selenium,Firefox,Webdriver,Geb,Firefox Marionette,众所周知,Firefox版本47.0.1与Selenium最新版本不兼容。甚至Firefox也宣布改用木偶。有人能给出一些关于如何在Geb中使用木偶的详细说明吗 作为一个maven项目,我使用Geb尝试了所有版本的Selenium,但没有成功。我尝试了以下版本 2.50.0 2.50.1 2.51.0 2.52.0 2.53.0 2.53.1 2.6.0 2.7.0 2.8.0 2.9.0 如果这个地方不适合问这个问题,请指导我 从下载最新版本的selenium标准版本2.53.1,并尝试使用最

众所周知,Firefox版本47.0.1与Selenium最新版本不兼容。甚至Firefox也宣布改用木偶。有人能给出一些关于如何在Geb中使用木偶的详细说明吗

作为一个maven项目,我使用Geb尝试了所有版本的Selenium,但没有成功。我尝试了以下版本

2.50.0

2.50.1

2.51.0

2.52.0

2.53.0

2.53.1

2.6.0

2.7.0

2.8.0

2.9.0


如果这个地方不适合问这个问题,请指导我

从下载最新版本的selenium标准版本2.53.1,并尝试使用最新版本的Firefox。

从下载最新版本的selenium标准版本2.53.1,并尝试使用最新版本的Firefox。

对于48版Firefox,看起来唯一的解决方案是使用Marionette,然而,我还没有能够在Geb中实现这一点

这是我在GebConfig.groovy中尝试过的:

environments {

firefox {
    driver = {
        DesiredCapabilities dc = DesiredCapabilities.firefox();
        LoggingPreferences prefs = new LoggingPreferences();
        prefs.enable(LogType.BROWSER, Level.WARNING);
        dc.setCapability(CapabilityType.LOGGING_PREFS, prefs);
        dc.setCapability("marionette", true);

        String currentDir = System.getProperty("user.dir");
        String marionetteDriverLocation = currentDir + "/WebDriver/wires";
        System.setProperty("webdriver.gecko.driver", marionetteDriverLocation);

        FirefoxProfile p = new FirefoxProfile();
        p.setPreference("webdriver.gecko.driver", marionetteDriverLocation);
        p.setPreference("webdriver.log.file", "/tmp/firefox_console");
        p.setPreference("toolkit.telemetry.enabled", false);
        p.setPreference("geo.enabled", false);
        p.setPreference("plugins.update.notifyUser", false);

        p.setPreference("datareporting.healthreport.service.enabled", false);
        p.setPreference("datareporting.healthreport.uploadEnabled", false);
        p.setPreference("datareporting.policy.dataSubmissionEnabled",false);
        p.setPreference("datareporting.healthreport.service.firstRun", false);
        p.setPreference("datareporting.healthreport.logging.consoleEnabled", false);
        p.setPreference("reader.parse-on-load.enabled", false);

        dc.setCapability(FirefoxDriver.PROFILE, p);

        def driver = new FirefoxDriver(dc)
        driver.manage().timeouts().pageLoadTimeout(45, TimeUnit.SECONDS)
        return driver
    }
firefox {
    System.setProperty("webdriver.gecko.driver","path/geckodriver")
    driver = {new MarionetteDriver()}
}

对于Firefox的48版,看起来唯一的解决方案是使用Marionette,但是我还没有能够在Geb中实现这一点

这是我在GebConfig.groovy中尝试过的:

environments {

firefox {
    driver = {
        DesiredCapabilities dc = DesiredCapabilities.firefox();
        LoggingPreferences prefs = new LoggingPreferences();
        prefs.enable(LogType.BROWSER, Level.WARNING);
        dc.setCapability(CapabilityType.LOGGING_PREFS, prefs);
        dc.setCapability("marionette", true);

        String currentDir = System.getProperty("user.dir");
        String marionetteDriverLocation = currentDir + "/WebDriver/wires";
        System.setProperty("webdriver.gecko.driver", marionetteDriverLocation);

        FirefoxProfile p = new FirefoxProfile();
        p.setPreference("webdriver.gecko.driver", marionetteDriverLocation);
        p.setPreference("webdriver.log.file", "/tmp/firefox_console");
        p.setPreference("toolkit.telemetry.enabled", false);
        p.setPreference("geo.enabled", false);
        p.setPreference("plugins.update.notifyUser", false);

        p.setPreference("datareporting.healthreport.service.enabled", false);
        p.setPreference("datareporting.healthreport.uploadEnabled", false);
        p.setPreference("datareporting.policy.dataSubmissionEnabled",false);
        p.setPreference("datareporting.healthreport.service.firstRun", false);
        p.setPreference("datareporting.healthreport.logging.consoleEnabled", false);
        p.setPreference("reader.parse-on-load.enabled", false);

        dc.setCapability(FirefoxDriver.PROFILE, p);

        def driver = new FirefoxDriver(dc)
        driver.manage().timeouts().pageLoadTimeout(45, TimeUnit.SECONDS)
        return driver
    }
firefox {
    System.setProperty("webdriver.gecko.driver","path/geckodriver")
    driver = {new MarionetteDriver()}
}

我在GebConfig.groovy中有下一个配置:

environments {

firefox {
    driver = {
        DesiredCapabilities dc = DesiredCapabilities.firefox();
        LoggingPreferences prefs = new LoggingPreferences();
        prefs.enable(LogType.BROWSER, Level.WARNING);
        dc.setCapability(CapabilityType.LOGGING_PREFS, prefs);
        dc.setCapability("marionette", true);

        String currentDir = System.getProperty("user.dir");
        String marionetteDriverLocation = currentDir + "/WebDriver/wires";
        System.setProperty("webdriver.gecko.driver", marionetteDriverLocation);

        FirefoxProfile p = new FirefoxProfile();
        p.setPreference("webdriver.gecko.driver", marionetteDriverLocation);
        p.setPreference("webdriver.log.file", "/tmp/firefox_console");
        p.setPreference("toolkit.telemetry.enabled", false);
        p.setPreference("geo.enabled", false);
        p.setPreference("plugins.update.notifyUser", false);

        p.setPreference("datareporting.healthreport.service.enabled", false);
        p.setPreference("datareporting.healthreport.uploadEnabled", false);
        p.setPreference("datareporting.policy.dataSubmissionEnabled",false);
        p.setPreference("datareporting.healthreport.service.firstRun", false);
        p.setPreference("datareporting.healthreport.logging.consoleEnabled", false);
        p.setPreference("reader.parse-on-load.enabled", false);

        dc.setCapability(FirefoxDriver.PROFILE, p);

        def driver = new FirefoxDriver(dc)
        driver.manage().timeouts().pageLoadTimeout(45, TimeUnit.SECONDS)
        return driver
    }
firefox {
    System.setProperty("webdriver.gecko.driver","path/geckodriver")
    driver = {new MarionetteDriver()}
}
我使用的是selenium
3.0.1
,我使用的是
-Dgeb.env=firefox
系统属性,以确保它采用我的firefox配置,并且对我来说工作正常


关于

我在GebConfig.groovy中有下一个配置:

environments {

firefox {
    driver = {
        DesiredCapabilities dc = DesiredCapabilities.firefox();
        LoggingPreferences prefs = new LoggingPreferences();
        prefs.enable(LogType.BROWSER, Level.WARNING);
        dc.setCapability(CapabilityType.LOGGING_PREFS, prefs);
        dc.setCapability("marionette", true);

        String currentDir = System.getProperty("user.dir");
        String marionetteDriverLocation = currentDir + "/WebDriver/wires";
        System.setProperty("webdriver.gecko.driver", marionetteDriverLocation);

        FirefoxProfile p = new FirefoxProfile();
        p.setPreference("webdriver.gecko.driver", marionetteDriverLocation);
        p.setPreference("webdriver.log.file", "/tmp/firefox_console");
        p.setPreference("toolkit.telemetry.enabled", false);
        p.setPreference("geo.enabled", false);
        p.setPreference("plugins.update.notifyUser", false);

        p.setPreference("datareporting.healthreport.service.enabled", false);
        p.setPreference("datareporting.healthreport.uploadEnabled", false);
        p.setPreference("datareporting.policy.dataSubmissionEnabled",false);
        p.setPreference("datareporting.healthreport.service.firstRun", false);
        p.setPreference("datareporting.healthreport.logging.consoleEnabled", false);
        p.setPreference("reader.parse-on-load.enabled", false);

        dc.setCapability(FirefoxDriver.PROFILE, p);

        def driver = new FirefoxDriver(dc)
        driver.manage().timeouts().pageLoadTimeout(45, TimeUnit.SECONDS)
        return driver
    }
firefox {
    System.setProperty("webdriver.gecko.driver","path/geckodriver")
    driver = {new MarionetteDriver()}
}
我使用的是selenium
3.0.1
,我使用的是
-Dgeb.env=firefox
系统属性,以确保它采用我的firefox配置,并且对我来说工作正常


关于

它应该适用于任何最新的Selenium版本。(所有内容>2.50对于早期版本不确定)

木偶是一个外部驱动程序,它没有包含在Selenium包中(还没有?)

你需要在这里下载gecko驱动程序 然后将selenium指向geckodriver.exe的位置 正如Nelson之前在GebConfig中所说,您可以通过以下方式实现:

import org.openqa.selenium.firefox.MarionetteDriver

driver = {
    System.setProperty("webdriver.gecko.driver","path/geckodriver")
    new MarionetteDriver()
}
为了实现这一点,您的构建脚本中需要一些依赖项,我正在与gradle合作,您的可能看起来不同,只需看看您在maven central上需要什么样的依赖项

compile('info.novatec.testit:webtester-support-marionette:2.0.4') { transitive = false }
compile "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion"
compile "org.seleniumhq.selenium:selenium-support:$seleniumVersion"
(您可能不需要selenium支持)

如果您需要更多帮助,更具体地描述您失败的地方会很有帮助,您也可以在这里查找一个工作项目(使用maven):

它应该适用于任何最新的Selenium版本。(所有内容>2.50对于早期版本不确定)

木偶是一个外部驱动程序,它没有包含在Selenium包中(还没有?)

你需要在这里下载gecko驱动程序 然后将selenium指向geckodriver.exe的位置 正如Nelson之前在GebConfig中所说,您可以通过以下方式实现:

import org.openqa.selenium.firefox.MarionetteDriver

driver = {
    System.setProperty("webdriver.gecko.driver","path/geckodriver")
    new MarionetteDriver()
}
为了实现这一点,您的构建脚本中需要一些依赖项,我正在与gradle合作,您的可能看起来不同,只需看看您在maven central上需要什么样的依赖项

compile('info.novatec.testit:webtester-support-marionette:2.0.4') { transitive = false }
compile "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion"
compile "org.seleniumhq.selenium:selenium-support:$seleniumVersion"
(您可能不需要selenium支持)

如果您需要更多帮助,更具体地描述您失败的地方会很有帮助,您也可以在这里查找一个工作项目(使用maven):

谢谢你,杰夫。我将尝试一下,并让您知道结果。:-)你设法让我去上班了吗?在我看来,@jeff lowery也在苦苦挣扎?是的,我还没有做到这一点,但以上是基于我在其他地方收集到的信息。我要么很接近,要么根本不接近-谢谢你,杰夫。我将尝试一下,并让您知道结果。:-)你设法让我去上班了吗?在我看来,@jeff lowery也在苦苦挣扎?是的,我还没有做到这一点,但以上是基于我在其他地方收集到的信息。我要么很接近,要么根本不接近-PI还使用Geb提供的Selenium 3.0.1和多个驱动程序,如HtmlUnit(包括JS)、PhantomJS、Firefox、IE、Edge、Chrome。这对他们都很好。为了减少下载所有驱动程序的痛苦,我推荐使用Geb的Selenium 3.0.1和多个驱动程序,如HtmlUnit(包括JS)、PhantomJS、Firefox、IE、Edge、Chrome。这对他们都很好。为了减少下载所有驱动程序的痛苦,我推荐。运行此命令并获得:评估根项目“selenium java gradle template”时出现问题。“>无法为org.gradle.api.internal类型的对象获取未知属性“seleniumVersion”。artifacts.dsl.Dependency.DefaultDependencyHandler.Better答案:运行此命令并获得:“评估根项目‘selenium java gradle template’时出现问题”。>无法为org.gradle.api.internal类型的对象获取未知属性“seleniumVersion”。因此,我查找了如何在gradle中设置一个变量,并发现:def myVar=“theVar”在我们的例子中,我只是将它添加到build.gradle def seleniumVersion=“3.4.0”中“哦,是的,当然,要么将
seleniumVersion
声明为变量。或者在我的示例中,用您正在使用的任何版本替换它。因此,最后一次编译可能看起来像:
“org.seleniumhq.selenium:selenium支持:3.4.0”
运行此操作并得到:评估根项目“selenium java gradle template”时出现问题。>无法为org.gradle.api.internal类型的对象获取未知属性“seleniumVersion”。artifacts.dsl.Dependency.DefaultDependencyHandler.Better答案:运行此命令并获得:“评估根项目‘selenium java gradle template’时出现问题”。>无法为org.gradle.api.internal类型的对象获取未知属性“seleniumVersion”。所以我查看了如何在gradle中设置变量