标签: geb

确定Spock测试的执行顺序

有没有办法设置在Spock规范中执行测试的顺序?

例如:

class MySpec extends IntegrationSpec {
    def 'test A'...

    def 'test B'...
}
Run Code Online (Sandbox Code Playgroud)

我想'test A'总是在'test B'之前执行

这是因为我正在使用Geb和Spock进行一些功能测试,并且数据不会在测试之间回滚.

grails spock geb

16
推荐指数
1
解决办法
8929
查看次数

无法在无头模式下最大化Chrome窗口

我最近将我的chrome版本升级到60并将chromedriver升级到版本2.31.发布当我尝试最大化浏览器窗口时,我已经开始获得以下异常.

    driver.driver.manage().window().maximize()
Run Code Online (Sandbox Code Playgroud)

org.openqa.selenium.WebDriverException:未知错误:无法将窗口状态更改为最大化,当前状态正常(会话信息:chrome = 60.0.3112.78)(驱动程序信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform = Linux 4.2 .0-27-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:108毫秒构建信息:版本:'2.53.1',修订版:'a36b8b1cd5757287168e54b817830adce9b0158d',时间:'2016-06 -30 19:26:09'系统信息:主机:'bb-blr-prod-stage-stg1-01',ip:'10 .3.211.2',os.name:'Linux',os.arch:'amd64' ,os.version:'4.2.0-27-generic',java.version:'1.7.0_80'会话ID:c7de7149dd490cc7760d2f4fc49f0325驱动信息:org.openqa.selenium.chrome.ChromeDriver Capabilities [{platform = LINUX,acceptSslCerts = true ,javascriptEnabled = true,browserName = chrome,chrome = {userDataDir =/tmp/.org.chromium.Chromium.WABPhO,chromedriverVersion = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8)},networkCo nnectionEnabled = false,unexpectedAlertBehaviour =,rotate = false,setWindowRect = true,locationContextEnabled = true,mobileEmulationEnabled = false,pageLoadStrategy = normal,version = 60.0.3112.78,takesHeapSnapshot = true,cssSelectorsEnabled = true,databaseEnabled = false,handlesAlerts = true,browserConnectionEnabled = false,webStorageEnabled = true,nativeEvents = true,hasTouchScreen = false,applicationCacheEnabled = false,takesScreenshot = true}]

我在Geb上使用ChromeDriver在无头模式下运行我的测试.

  • Chrome版本 - 60.0.3112.78
  • chromedriver版本 - 2.31.488763
  • 操作系统 - Ubuntu 14.04.4 LTS …

selenium google-chrome geb selenium-chromedriver

15
推荐指数
3
解决办法
1万
查看次数

Spock + GEB与机器人框架

以前我使用Robot Framework来自动化应用程序测试,但是新客户要求关注Spock + GEB.我从来没有使用它,但我需要快速比较其中两个工具并做出选择.请帮助我了解它们之间的区别以及每种方法的优点/缺点.

frameworks spock geb robotframework

11
推荐指数
1
解决办法
4439
查看次数

grails geb -baseUrl选项不适用于远程服务

我正在使用geb 0.9.2插件来处理grails 2.3.4

我想在两个单独的主机上分别从服务运行功能测试.

我观察到以下情况:

如果我在同一主机上运行该服务,并执行:

grails test-app functional: -baseUrl=http://localhost:8080/foo/--non-interactive

然后针对这个已经运行的服务运行测试并通过.

如果服务没有运行,并且我执行相同的命令,那么将在内部启动一个新的服务实例,grails test-app并针对该服务运行测试.(这对我来说意外)

如果该服务在不同的主机上运行,​​那么在http://other:16060/foo/我运行时:

grails test-app functional: -baseUrl=http://other:16060/foo/ --non-interactive

...然后启动本地服务,并针对该服务而不是针对指定的远程服务运行测试.这对我来说再次出乎意料.

我找不到任何解释此行为的文档.

是否可以test-app针对远程运行的服务运行?

(我记得虽然我最近没有测试过,这种行为也是grails 2.2.2的情况)

grails geb

11
推荐指数
1
解决办法
1269
查看次数

如何在intelliJ 12中定义黄瓜的步骤定义位置

我有我feature filessrc/resources/com/features和我step definitionssrc/main/java/com/step_definitions

我的测试都运行正常,但是即使我要求它创建一个新的,因此,intelliJ拒绝查看步骤defs的位置.这个配置在哪里?

grails intellij-idea cucumber geb

9
推荐指数
2
解决办法
2万
查看次数

学习GEB和Spock

我是一名试图学习GEB和Spock的手动测试员.要了解这些,我必须事先了解java或groovy吗?我一直在阅读GEB的书,先决条件,书籍或学习资源是什么?请帮忙.谢谢.

testing groovy automated-tests spock geb

9
推荐指数
1
解决办法
9100
查看次数

如何在页面事件后使用Geb检查元素属性值

在这里得到一些帮助之后,我正在使用Geb编写一个功能性Web测试,并希望在事件发生之前和之后测试表单提交按钮的禁用属性值,流程应如下所示:

  1. 加载页面,提交按钮在页面源中声明为禁用,因此应禁用,例如<input type="submit" class="submit" disabled="true"/>.
  2. 选中页面上的复选框,这将导致执行一段JQuery代码,这将使用以下命令以编程方式启用禁用的提交按钮: $('input.submit').attr('disabled', false);

我的第一次尝试是使用断言$('input.submit').@disabled == 'true',这似乎适用于页面加载后的初始检查,但是在执行我的JQuery代码以启用按钮之后,后续检查仍然返回相同的结果.这让我想知道这种检查是否只能在页面加载时报告值,并且看不到任何后续的程序化更改?

然后我发现了Geb的jquery迭代,我希望我可以使用它来返回提交按钮的值并对此进行断言,$('input.submit').jquery.attr('disabled') == false但是Geb文档确认所有对.jquery属性的调用都返回Geb Navigator实例,所以很遗憾我不知道我想我可以归还我想要的信息.

我也怀疑JQuery代码是否真的切换了提交按钮禁用状态,我已经使用Firebug进行了大量测试并且可以确认这在浏览器中完美运行,所以我怀疑这是我对Geb的理解或者问题也许是Geb本身的局限?

让我感到震惊的是,在页面上执行某些操作后检查元素属性的值可能是一个常见的用例,因此我非常希望我错过了一些简单的方法.非常感谢能帮我解决问题的任何指针.

干杯,

埃德

groovy spock geb

8
推荐指数
2
解决办法
1万
查看次数

Geb配置

这似乎应该非常简单,但我没有看到如何访问我的GebConfig.groovy文件中的值.我尝试过以下方法:

userName = "myUserName"

properties = {
  userName = "myUserName"
}

props {
  userName = "myUserName"
}

environments {
  chrome = { 
    driver = { new ChromeDriver() }
    userName = "myUserName" //with and without {}
  }
}
Run Code Online (Sandbox Code Playgroud)

然而我似乎无法通过以下方式访问这些属性:

browser.driver.properties.userName
Run Code Online (Sandbox Code Playgroud)

我能够在配置文件中设置这些属性,然后在我的规范中访问它们吗?我似乎得到了默认的属性集,这只是系统属性.

groovy spock geb

8
推荐指数
1
解决办法
3710
查看次数

Gradle NoClassDefFoundError

所以我正在尝试构建一个简单的gradle应用程序,当我运行它时,我得到了

geb.ConfigurationLoader$UnableToLoadException: Unable to load configuration @ 'file:/Users/john/Development/groovy/gradlegebautomation/build/resources/test/GebConfig.groovy' (with environment: null)
    at geb.ConfigurationLoader.loadRawConfig(ConfigurationLoader.groovy:297)
    at geb.ConfigurationLoader.loadRawConfig(ConfigurationLoader.groovy:281)
    at geb.ConfigurationLoader.getConf(ConfigurationLoader.groovy:161)
    at geb.ConfigurationLoader.doGetConf(ConfigurationLoader.groovy:139)
    at geb.ConfigurationLoader.getConf(ConfigurationLoader.groovy:95)
    at geb.ConfigurationLoader.getConf(ConfigurationLoader.groovy:114)
    at geb.spock.GebSpec.createConf(GebSpec.groovy:29)
    at geb.spock.GebSpec.createBrowser(GebSpec.groovy:33)
    at geb.spock.GebSpec.getBrowser(GebSpec.groovy:38)
    at geb.spock.GebSpec.methodMissing(GebSpec.groovy:51)
    at geb.spock.GebReportingSpec.setupSpec(GebReportingSpec.groovy:30)
Caused by: java.lang.NoClassDefFoundError: org/apache/ivy/core/report/ResolveReport
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2436)
    at java.lang.Class.getDeclaredMethods(Class.java:1793)
    at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
    at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
    at groovy.grape.GrapeIvy.<init>(GrapeIvy.groovy:75)
    at java.lang.Class.newInstance0(Class.java:357)
    at java.lang.Class.newInstance(Class.java:310)
    at groovy.grape.Grape.getInstance(Grape.java:101)
    at groovy.grape.Grape.grab(Grape.java:136)
    at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:291)
    at org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:319)
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:903)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:566)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:542)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:519)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:244)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:202)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:212)
    at groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:146)
    at …
Run Code Online (Sandbox Code Playgroud)

gradle geb

8
推荐指数
1
解决办法
4333
查看次数

通过示例的Geb登录规范

我试图让熟悉的盖布.我试图从Grails内部运行它,但这根本不重要,因为我的问题是Geb特有的.

我有以下test目录结构:

myapp/
    <lots of stuff here>
    test/
        functional/
            GebConfig.groovy
            LogInLogOutSpec.groovy
            pages/
                LogInPage.groovy
                DashboardPage.groovy
Run Code Online (Sandbox Code Playgroud)

哪里LoginPage.groovy是(显然)登录页面,并在那里DashboardPage是你应该成功登录后,会重定向.实际上,我有安全过滤器,它会检查您尝试访问的URL是否需要身份验证.如果是这样,他们会将您重定向到登录页面,并在成功登录后,再次将您重定向到您尝试访问的URL.

为了更好地衡量,这是包含我的登录页面的HTML(同样,这是Grails,因此GSP文件在运行时动态转换为HTML):

<!DOCTYPE html>
<html>
    <head>
        <title>Login</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    </head>
    <body>  
        <form action=“/myapp/auth/signIn" method="post">
            <input type="hidden" name="targetUri" value="/dashboard" />
            <table>
                <tbody>
                    <tr>
                        <td>Username:</td>
                        <td><input type="text" name="username" value="" /></td>
                    </tr>
                    <tr>
                        <td>Password:</td>
                        <td><input type="password" name="password" value="" /></td>
                    </tr>
                    <tr>
                        <td />
                            <td><input type="submit" value="Sign in" /></td>
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

所以我需要一个Geb测试:

  1. 尝试转到仪表板页面(未经授权)
  2. 验证我们已被重定向到登录页面
  3. 使用良好的凭据登录
  4. 验证我们不在仪表板页面 …

grails groovy geb selenium-webdriver

8
推荐指数
1
解决办法
2985
查看次数