8

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

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

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

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

我还怀疑 JQuery 代码是否实际上切换了提交按钮禁用状态,我已经使用 Firebug 对此进行了广泛测试,并且可以确认这在浏览器中运行良好,所以我怀疑这要么是我对 Geb 的理解的问题,要么也许是 Geb 本身的限制?

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

干杯,

埃德

4

2 回答 2

11

做了更多的测试,现在已经取得了令人满意的结果。我正在做一些我现在认为不正确的事情,即尝试将disabled属性值设置为非法的 true 和 false 值,如下所示:

$('input.submit').attr('disabled', true);
$('input.submit').attr('disabled', false);

查看HTML 表单规范,disabled 属性显示为不带值,而是单独存在表示元素已禁用。修改我的代码以实现这一点并删除该属性以指示元素的启用似乎已经成功了:

$('input.submit').attr('disabled', true);
//This time we remove the disabled attribute rather than setting it to false.
$('input.submit').removeAttr('disabled');

注意:我仍在将 disabled 的值设置为,true因为我无法确定如何在不设置值的情况下设置属性,请参阅此 SO 帖子以获取更多详细信息。

使用上面的内容,我现在可以使用 Geb 来断言元素的禁用/启用状态,如下所示:

//Check that something is disabled.
deleteSelectedButton.@disabled == 'true'

//Check that something is enabled.
deleteSelectedButton.@disabled == 'false'

注意:Geb 似乎需要一个指示预期状态的字符串文字而不是布尔值,这 iirc 导致我的断言失败。

就是这样 - 现在一切都运行良好,我正在编写大量的 Geb 测试!希望这个解释对其他人有用。

于 2011-06-09T09:08:58.443 回答
3

重播我在 Geb 邮件列表上的帖子:

在执行启用按钮的 jQuery 代码之后,是否有可能在代码实际启用按钮之前检查结果?例如,正在做类似的事情:

waitFor { $("input.submit").@disabled == "false" }
于 2011-06-08T15:53:34.170 回答