Geb 测试:如何点击控制器动作的 link?
Geb testing: How to click the link of a controller action?
我正在为 Grails 应用程序完成 Geb 测试的一部分,但在文档中找不到它(尽管我可能忽略了一些东西)。您如何 select 并单击控制器操作的 link ?这是具有控制器操作的表单元素 link(我不得不重命名一些东西...)
是elementId的问题还是需要找别的地方?通常我可以用 # select 或就好了。很难在文档中找到示例。非常感谢任何帮助或指导。
(使用 Grails 2.4.3、Geb 9.3 和 Firefox 37.0.2)
表单项:
<li id="formItemID">
<g:link elementId="linkId" controller="controller" action="linkAction">Link Text HERE</g:link>
</li>
Geb 测试:
def "test controller action link"(){
when:
go linkURL here
$('#linkId').click() // this won't hit
then:
$('.some kind of panel-heading').value('something value...')
}
查看 firebug(或 chrome 开发控制台,或其他)中呈现的 HTML。
渲染了什么?
<li id="formItemID">
<a id="linkId" href="http://localhost:8080/controller/linkAction">Link Text HERE</g:link>
</li>
如果看起来像这样,那么您应该可以使用您提供的代码片段点击 link。
$('#linkId').click()
或者,您可以尝试以下方法:
$("a", id: "linkId").click()
$("li", id: "formItemID").find("a")[0].click()
通常,我会这样创建 links:
<a id="myId" href="${createLink(controller: 'myController', action: 'myAction')}">link text</a>
所以我更确定渲染的 HTML 输出是什么。
编辑:
创建 geb 测试的一些技巧
- 使用 GGTS 中的调试器。在您的测试方法中放置一个断点,并尝试使用 Display View.
引用 DOM 部分的不同方法
- 当您弄清楚如何与特定 UI 组件(如 JQGrid table、Select2 下拉列表等)交互时,将此功能封装在实用程序方法中
- 对于新用户注册、密码重置等顺序流程,再次将它们封装在实用程序方法中。您将真正减少测试中的膨胀,如果注册(或其他)过程发生变化,您只需在一个地方更改测试。
- 尽量避免使用
Thread.sleep()
,它是通往不稳定测试世界的单程票。如果您需要等待某些 ajax 完成,请创建一个等待加载微调器消失的实用方法,并从您的测试中调用它。
我正在为 Grails 应用程序完成 Geb 测试的一部分,但在文档中找不到它(尽管我可能忽略了一些东西)。您如何 select 并单击控制器操作的 link ?这是具有控制器操作的表单元素 link(我不得不重命名一些东西...)
是elementId的问题还是需要找别的地方?通常我可以用 # select 或就好了。很难在文档中找到示例。非常感谢任何帮助或指导。
(使用 Grails 2.4.3、Geb 9.3 和 Firefox 37.0.2)
表单项:
<li id="formItemID">
<g:link elementId="linkId" controller="controller" action="linkAction">Link Text HERE</g:link>
</li>
Geb 测试:
def "test controller action link"(){
when:
go linkURL here
$('#linkId').click() // this won't hit
then:
$('.some kind of panel-heading').value('something value...')
}
查看 firebug(或 chrome 开发控制台,或其他)中呈现的 HTML。
渲染了什么?
<li id="formItemID">
<a id="linkId" href="http://localhost:8080/controller/linkAction">Link Text HERE</g:link>
</li>
如果看起来像这样,那么您应该可以使用您提供的代码片段点击 link。
$('#linkId').click()
或者,您可以尝试以下方法:
$("a", id: "linkId").click()
$("li", id: "formItemID").find("a")[0].click()
通常,我会这样创建 links:
<a id="myId" href="${createLink(controller: 'myController', action: 'myAction')}">link text</a>
所以我更确定渲染的 HTML 输出是什么。
编辑:
创建 geb 测试的一些技巧
- 使用 GGTS 中的调试器。在您的测试方法中放置一个断点,并尝试使用 Display View. 引用 DOM 部分的不同方法
- 当您弄清楚如何与特定 UI 组件(如 JQGrid table、Select2 下拉列表等)交互时,将此功能封装在实用程序方法中
- 对于新用户注册、密码重置等顺序流程,再次将它们封装在实用程序方法中。您将真正减少测试中的膨胀,如果注册(或其他)过程发生变化,您只需在一个地方更改测试。
- 尽量避免使用
Thread.sleep()
,它是通往不稳定测试世界的单程票。如果您需要等待某些 ajax 完成,请创建一个等待加载微调器消失的实用方法,并从您的测试中调用它。