selenium - Grails cucumber 和 Geb - 在 firefox 和 cucumber 方法中运行测试

标签 selenium grails groovy geb cucumber-jvm

我已将此用作 cucumber 的指南以及如何使用 Geb Github hauner grails-cucmber example

我不确定这是否是正确的方法,我过去使用过 Geb ......

测试将从 [此处的某个名称]Spec.groovy 运行,该 Spec.groovy 将扩展 GebReportingSpec.... 使用 Geb 页面模型

相反,测试是通过 cucumber 从 StepDef 运行的......我不太确定,如何集成屏幕截图,我想你要手动进行:/

我无法在 Windows 7 下使用 Firefox 版本 39、40、41、42 进行此操作。我甚至与其他人一起管理过 IE!我无法在Linux下进行检查。最终目标是使用 Selenium 网格。两者都能够在本地和远程运行。

BuildConfig.groovy

def gebVersion      = "0.12.2"
def seleniumVersion = "2.48.2" //2.45.0
def cucumberVersion = "1.2.0"

repositories {
    ... (snippet)

    mavenRepo "http://oss.sonatype.org/content/repositories/snapshots" //Geb snapshot
}

dependencies {
     test "org.grails:grails-datastore-test-support:1.0.2-grails-2.4"

    // Geb / Spock  // http://www.gebish.org/manual/current/#grails
    test "org.gebish:geb-spock:$gebVersion"
    test "org.seleniumhq.selenium:selenium-support:$seleniumVersion"
    test "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion"
    test "org.seleniumhq.selenium:selenium-ie-driver:$seleniumVersion"
    test "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion"
    test "org.seleniumhq.selenium:selenium-remote-driver:$seleniumVersion" //Needed by phantomjsdriver
    test "org.spockframework:spock-grails-support:0.7-groovy-2.0"
    test("com.codeborne:phantomjsdriver:1.2.1") {
        transitive = false // phantomjs driver pulls in a different selenium version
    }
}

plugins {
    test ":geb:$gebVersion"
    test ":cucumber:$cucumberVersion 
}

CucumberConfig.groovy
cucumber {
    features = ["test/functional/cucumber/features"]
    glue     = ["test/functional/cucumber/steps", test/functional/cucumber/hooks", "test/functional/cucumber/support"]
    tags     = ["~@ignore"]
}   

支持/env.groovy
def bindingUpdater
def activeBrowser

Before { scenario ->
    activeBrowser  = new Browser()
    bindingUpdater = new BindingUpdater(binding, activeBrowser)
    bindingUpdater.initialize()
}

After { scenario ->
    bindingUpdater?.remove()
}

已编译 Gherkin 功能的示例片段
Given(~/^User goes to SomePage$/) { ->
    // Write code here that turns the phrase above into concrete actions
    to SomePage
    at SomePage
}

(附注 intellij 并没有发现 Geb 存在于此的事实,以防其他人遇到此问题)

编辑 - 包括配置
baseNavigatorWaiting = true
atCheckWaiting       = true
reportsDir           = "target/geb-reports"

driver = {
    System.setProperty('webdriver.firefox.bin', 'C:\\Program Files (x86)\\Mozilla Firefox 41\\firefox.exe')

   //http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#using-a-proxy
   org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy([autodetect:true]);

    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(CapabilityType.PROXY, proxy);

    def driverInstance = new FirefoxDriver(cap)
    driverInstance.manage().window().maximize()
    driverInstance
}

...(snipped other enviroments/functionality)

最佳答案

Grails 2.x(据我所知)不支持在测试报告中添加屏幕截图。

我做了一个快速测试,发现了两种获取屏幕截图的可能性。我用 geb sample 测试了两者插件的:

cucumber html报告

CucumberConfig.groovy

cucumber {
    // the other settings
    plugins = ["html:target/results"]
}

添加它会告诉 cucumber 在 target/results 中创建一个 html 报告。 .
要将屏幕截图添加到您在 After 中创建的报告中钩子(Hook)并将其添加到报告中:

env.groovy
import cucumber.api.Scenario
import org.openqa.selenium.OutputType

After () { Scenario scenario ->
    def screenshot = browser.getDriver().getScreenshotAs(OutputType.BYTES)
    scenario.embed(screenshot, 'image/png')

    bindingUpdater.remove ()
}

这将创建一个包含屏幕截图的测试报告。

报告

可以调用browser一个步骤的对象:
Given(~/^User goes to SomePage$/) { ->
    to SomePage
    at SomePage
    browser.report('SomePage')
}

html/屏幕截图将被写入 target/test-reports/geb .
After钩子(Hook)也可以:
After () { Scenario scenario ->
   browser.report(scenario.name)

   bindingUpdater.remove ()
}

关于selenium - Grails cucumber 和 Geb - 在 firefox 和 cucumber 方法中运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33741228/

相关文章:

python - CSS 选择器在 Selenium 脚本中抛出超时异常

javascript - 基于 cucumber 标签切换 multiCapabilites 配置

Grails hasOne 关系真的是双向的吗?

java - 使用 GGTS 创建 Grails 项目时出错

Groovy 和 Spock : toDouble vs toFloat

java - 在自动化测试中使用来自查看页面源的信息

javascript - FluentAutomation 和查找元素同级

java - Grails 线程

grails - grails如何以etag 302状态发送并且每次都不加载js和其他资源?

java - UnitTest (groovy + grails) - 无法拆卸元类