我有一个使用Geb和Spock的Grails应用程序的功能测试.偶尔,功能测试将因超时或其他偶发行为而失败.在之前使用TestNG的项目中,我有一个retryAnalyzer只是在测试执行期间触发重试,以查看它是否两次都失败(然后真实失败).
如何让Spock重试失败的测试?
我正在学习GEB,我想在Groovy控制台中使用它.我想要跑:
import geb.Browser
Browser.drive {
go "http://googel.com/"
assert title == "Google"
}
Run Code Online (Sandbox Code Playgroud)
但这会产生错误
unable to resolve class geb.Browser
at line: 1, column: 1
Run Code Online (Sandbox Code Playgroud)
我已经下载了Geb核心jar(http://search.maven.org/#artifactdetails%7Corg.codehaus.geb%7Cgeb-core%7C0.7.2%7Cjar)并把它放在PATH中,但是没有在groovy中导入安慰.我做错了什么以及如何运行简单的Geb内联脚本?
谢谢
ps mac 10.7,geb 0.7.2
我想测试一下,在我的页面中双击列表项会打开相应的项目进行编辑.
这是我的页面结构:
<ul class="list">
<li class="item" ondblclick="jQuery(this).find('.edit-button').click();">
...some content...
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我有定义使用创业板的项目下列创业板网页moduleList的ListItem模块:
class ListPage extends Page {
static content = {
items { moduleList ListItem, $("li.item") }
}
...
}
Run Code Online (Sandbox Code Playgroud)
在ListItem模块中,我想访问根li元素以触发双击它.
我怎样才能访问li中ListItem模块?
正确的jQuery选择器可能$(this)只是在模块中this指向模块实例而不是根元素.
我试图在我的测试中将值设置为下面的输入,该输入具有默认值
<input type="text" name="ntsSellAmount" maxlength="7" size="8" tabindex="130" value="0.0">
Run Code Online (Sandbox Code Playgroud)
当我在Geb页面中设置值时,它会被附加到默认值0.00300:
grossExTax {
$("#content > form:nth-child(3) > fieldset:nth-child(8) > table:nth-child(3) > tbody:nth-child(1) > tr:nth-child(10) > td:nth-child(2) > input:nth-child(1)")
}
grossExTax.value("300")
Run Code Online (Sandbox Code Playgroud)
有没有办法清除该字段,然后设置值覆盖默认值0.00
我们的应用程序有一些不稳定的测试,有时会成功通过,有时会WaitTimeoutException在页面加载期间失败.我发现我们正在使用像waitFor(time)和的方法sleep(time).它们之间有什么区别,哪个更好?或者有一些更好的解决方案来解决这个问题?
我对位于此处http://www.gebish.org/manual/current/api/geb/navigator/Navigator.html的导航器API所用的语言感到有些困惑。
特别是,我对.isDisplayed方法感到困惑。
方法文档指出:“如果显示唯一的上下文元素,则返回true;如果是空的导航器,则返回false。不能在多元素导航器上调用。”
问题是,如果我在空的导航器上调用.isDisplayed(),则不会返回false。而是抛出此错误:
table: geb.navigator.EmptyNavigator' is not present
Run Code Online (Sandbox Code Playgroud)
它失败的行看起来像这样:
at SomePage //This page has a module element called "module"
if(module.table.isDiplayed()){ // module has a navigtor element called table
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
问题中的表元素确实不存在,因此该表元素确实是一个空的导航器,但是根据文档,这意味着当我调用.isDisplayed()时,它应该返回false,但是会抛出上述错误
再次调用诸如.isEmpty()之类的类似导航器方法时,情况相同,如果在页面上未找到该元素,我希望从空元素中调用.isEmpty()时返回true,但它抛出EmptyNavigator异常。
是什么赋予了?
我有一些问题需要理解在Geb中描述(定义)页面的语法.以下是一个工作正常的示例页面类,但我不明白它是如何工作的.
import geb.Page
class GebHomePage extends Page{
static url = "http://gebish.org"
static at = { title == "Geb - Very Groovy Browser Automation" }
static content = {
seeGuideButton { $('div', class:'ui huge primary button') }
uiHeader { $('h1', class:'ui header', 0)}
}
}
Run Code Online (Sandbox Code Playgroud)
我对内容引用的闭包内的语法感兴趣.Geb将内容DSL的语法描述为
«name»(«options map») { «definition» }
Run Code Online (Sandbox Code Playgroud)
我不明白这种语法.名称部分看起来像一个变量,但它没有声明(我想念def或类似的东西),最后一部分看起来像一个闭包.但是名称和闭包之间的联系在哪里.连接两者没有等号.在标准的groovy类中的语法
«name» { «definition» }
Run Code Online (Sandbox Code Playgroud)
不编译.在内容DSL的一行中会发生什么?究竟是什么uiHeader以及seeGuideButton它们如何与以下关闭相关?这种语法如何正常工作?
我正在使用 Geb/Spock 测试在我的网站上创建和删除记录。但是,如果记录已经存在,我将无法创建该记录,因此我检查该记录是否存在,如果在测试开始时存在,则将其删除。当记录不存在时就会出现问题,导致测试失败。有没有办法合并一些 if/then/else 逻辑,以便如果在开始时没有找到记录,测试将继续,如果找到,则将其删除?
编辑示例代码:
/**
* Integration test for Create Record
**/
class CreateAndRemoveRecordSpec extends GebSpec {
def 'check to make sure record 999 does not exist'() {
given: 'user is at Account Page'
to MyAccountPage
when: 'the user clicks the sign in link'
waitFor { header.signInLink.click() }
and: 'user logs on with credentials'
at LoginPage
loginWith(TEST_USER)
then: 'user is at landing page.'
at MyAccountPage
and: 'list of saved records is displayed'
myList.displayed
/* I would like some …Run Code Online (Sandbox Code Playgroud) 我正在使用 Groovy+Geb+Spock+Gradle 框架编写自动化测试脚本。我有一个名为“UserProfilePageSpec”的规范来检查用户个人资料页面的 UI,现在我想多次运行它来检查多个用户。我在那里添加了随机性,以便每次规范都会在列表中选择一个随机用户并导航到用户个人资料页面。
另外,我想检查每种用户类型的 5 个用户(这是主页中的过滤器)。所以我需要点击主页中的每个用户类型,然后多次运行规范。
有时,当没有足够的时间来测试每种类型的多个用户时,我只需要测试一个用户,所以我有点想保留这个规范来测试一个用户本身,有人有实现这个的好主意吗?谢谢!
这是“UserProfilePageSpec”的基本结构:
class UserProfilePageSpec {
def setupSpec(){
//login
//select a random user
//navigate to user profile page
}
def "test1"(){..}
def "test2"(){..}
def "test3"(){..}
def "test4"(){..}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试根据登录者验证页面。某些用户具有更高的安全性,并且会在页面上看到更多项目。当安全性较低的用户登录时,他们将看不到选项。我需要验证页面上不存在这些选项。
我有一个基于用户安全显示的选项的页面对象
testObject {$("#test")}
Run Code Online (Sandbox Code Playgroud)
我试过使用 isDisplayed()
boolean hidden = testObject.isDisplayed()
assert !hidden
Run Code Online (Sandbox Code Playgroud)
但我不断收到一个错误,说
geb.error.RequiredPageContentNotPresent:所需的页面内容geb.navigator.EmptyNavigator'不存在
错误消息是我想要验证的。该对象不存在,我需要验证它是否正确并通过测试。