Geb测试:如何单击控制器操作的链接?

时间:2015-05-13 15:20:48

标签: jquery grails controller geb

我正在为Grails应用程序完成Geb测试的一部分,并且无法在文档中找到它(尽管我可能会忽略某些内容)。如何选择并单击控制器操作的链接?这里的表单元素有一个控制器动作链接(我不得不重命名一些东西......)

是elementId的问题还是我需要寻找其他地方?通常情况下我可以用#选择器击中Ids就好了。很难在文档中找到一个例子。非常感谢任何帮助或指导。

(使用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...')

}

1 个答案:

答案 0 :(得分:1)

查看firebug中呈现的HTML(或chrome dev控制台,或其他)。

什么呈现?

<li id="formItemID">
    <a id="linkId" href="http://localhost:8080/controller/linkAction">Link Text HERE</g:link>
</li>

如果看起来像这样,那么您应该可以使用您提供的代码段点击链接。

$('#linkId').click()

或者,您可以尝试其中一些:

$("a", id: "linkId").click()
$("li", id: "formItemID").find("a")[0].click()

通常,我会创建这样的链接:

<a id="myId" href="${createLink(controller: 'myController', action: 'myAction')}">link text</a>

所以我更确定渲染的HTML输出是什么。

修改

创建geb测试的一些提示

  • 在GGTS中使用调试器。在测试方法中放置一个断点,并使用Display View尝试不同的方法来引用DOM的各个部分。
  • 当您弄清楚如何与特定UI组件(如JQGrid表,Select2下拉列表等)进行交互时,将此功能封装在实用程序方法中
  • 对于新用户注册,密码重置等顺序流程,再次将这些包含在实用程序方法中。你真的会减少测试中的膨胀,如果注册(或其他)过程发生变化,你只需要在一个地方改变测试。
  • 尽量避免使用Thread.sleep(),这是进入片状测试世界的单程票。如果您需要等待某个ajax完成,请创建一个等待加载微调器消失的实用程序方法,并从测试中调用它。