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

Edd*_*ant 8 groovy spock geb

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

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

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

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

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

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

干杯,

埃德

Edd*_*ant 10

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

$('input.submit').attr('disabled', true);
$('input.submit').attr('disabled', false);
Run Code Online (Sandbox Code Playgroud)

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

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

注意:我仍然设置禁用值,true因为我无法确定如何设置属性而不设置值,请参阅此SO帖子以获取更多详细信息.

使用上面我现在能够使用Geb断言元素的禁用/启用状态,如下所示:

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

//Check that something is enabled.
deleteSelectedButton.@disabled == 'false'
Run Code Online (Sandbox Code Playgroud)

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

所以就是这样 - 现在一切正常,我正在编写大量的Geb测试!希望这种解释对其他人有用.


Ray*_*lus 3

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

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

waitFor { $("input.submit").@disabled == "false" }
Run Code Online (Sandbox Code Playgroud)