如何在页面事件后使用Geb检查元素属性值

时间:2011-06-07 16:35:59

标签: groovy spock geb

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

  1. 加载页面,提交按钮在页面源中声明为已禁用,因此应禁用,例如<input type="submit" class="submit" disabled="true"/>
  2. 选中页面上的复选框,这会导致执行一段JQuery代码,这将使用以下命令以编程方式启用已禁用的提交按钮:$('input.submit').attr('disabled', false);
  3. 我的第一次尝试是使用断言$('input.submit').@disabled == 'true',这似乎适用于页面加载后的初始检查,但是在执行我的JQuery代码以启用按钮后,后续检查仍会返回相同的结果。这让我想知道这种检查是否只能在页面加载时报告值,并且看不到任何后续的程序化更改?

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

    我还怀疑JQuery代码是否真的切换了提交按钮禁用状态,我已经使用Firebug进行了广泛测试,并且可以确认这在浏览器中完美运行,所以我怀疑这是我理解的问题Geb或者Geb本身的限制?

    让我感到震惊的是,在页面上执行某些操作后检查元素属性的值可能是一个常见的用例,因此我非常希望我错过了一些简单的方法。非常感谢帮助我对其进行排序的任何指示。

    干杯,

    埃德

2 个答案:

答案 0 :(得分:10)

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

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

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

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

注意:由于无法在未设置值的情况下确定如何设置属性,因此我仍然将禁用值设置为true,有关详细信息,请参阅this SO post

使用上面我现在能够使用Geb断言这样的元素的禁用/启用状态:

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

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

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

就是这样 - 所有人现在都很好地工作,我正在编写大量的Geb测试!希望这种解释对其他人有用。

答案 1 :(得分:3)

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

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

waitFor { $("input.submit").@disabled == "false" }