有没有办法设置在Spock规范中执行测试的顺序?
例如:
class MySpec extends IntegrationSpec {
def 'test A'...
def 'test B'...
}
Run Code Online (Sandbox Code Playgroud)
我想'test A'总是在'test B'之前执行
这是因为我正在使用Geb和Spock进行一些功能测试,并且数据不会在测试之间回滚.
我最近将我的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在无头模式下运行我的测试.
以前我使用Robot Framework来自动化应用程序测试,但是新客户要求关注Spock + GEB.我从来没有使用它,但我需要快速比较其中两个工具并做出选择.请帮助我了解它们之间的区别以及每种方法的优点/缺点.
我正在使用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的情况)
我有我feature files
的src/resources/com/features
和我step definitions
在src/main/java/com/step_definitions
我的测试都运行正常,但是即使我要求它创建一个新的,因此,intelliJ拒绝查看步骤defs的位置.这个配置在哪里?
我是一名试图学习GEB和Spock的手动测试员.要了解这些,我必须事先了解java或groovy吗?我一直在阅读GEB的书,先决条件,书籍或学习资源是什么?请帮忙.谢谢.
在这里得到一些帮助之后,我正在使用Geb编写一个功能性Web测试,并希望在事件发生之前和之后测试表单提交按钮的禁用属性值,流程应如下所示:
<input type="submit" class="submit" disabled="true"/>
.$('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本身的局限?
让我感到震惊的是,在页面上执行某些操作后检查元素属性的值可能是一个常见的用例,因此我非常希望我错过了一些简单的方法.非常感谢能帮我解决问题的任何指针.
干杯,
埃德
这似乎应该非常简单,但我没有看到如何访问我的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)
我能够在配置文件中设置这些属性,然后在我的规范中访问它们吗?我似乎得到了默认的属性集,这只是系统属性.
所以我正在尝试构建一个简单的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) 我试图让熟悉的盖布.我试图从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测试: