watir button.enabled?总是返回真值

时间:2014-07-31 00:57:35

标签: ruby cucumber watir

我在做@ browser.some_button(:id =>'some_id')。启用?但即使按钮被禁用,它总是会返回真值。

我尝试将睡眠放置一段时间然后去尝试查看工作流程按钮是否意外启用,但事实并非如此。

可能出了什么问题?

1 个答案:

答案 0 :(得分:2)

<强>问题

元素#已启用?方法仅检查元素是否具有disabled属性。它不会检查其中一个类是否包含单词disabled。

例如,给定html:

<html>
  <body>
    <input type="submit"id="disabled_id" value="disabled button" disabled>
    <input type="submit" id="enabled_id" value="enabled button">
    <input type="submit" id="some_id" value="Some_value" class="button is-disabled submit"> 
  </body>
</html>

您可以看到只有第一个具有disabled属性的按钮未启用:

p @browser.button(:id => 'disabled_id').enabled?
#=> false
p @browser.button(:id => 'enabled_id').enabled?
#=> true
p @browser.button(:id => 'some_id').enabled?
#=> true

<强>解决方案

要检查是否根据类禁用了元素,您必须检查class属性。

假设该页面具有以下html,其中包括&#34;禁用&#34;中的按钮。和&#34;启用&#34;状态:

<html>
  <body>
    <input type="submit" id="some_id_disabled" value="Some_value" class="button is-disabled submit"> 
    <input type="submit" id="some_id_enabled" value="Some_value" class="button submit"> 
  </body>
</html>

一种解决方案是在将类作为定位器包含时检查元素是否存在:

p @browser.button(:id => 'some_id_disabled', :class => 'is-disabled').present?
#=> true
p @browser.button(:id => 'some_id_enabled', :class => 'is-disabled').present?
#=> false

或者,如果您之前找到/存储了元素,则可以检查class_names(而不是重新定位元素):

e = @browser.button(:id => 'some_id_disabled')
p e.class_name.split.include?('is-disabled')
#=> true

e = @browser.button(:id => 'some_id_enabled')
p e.class_name.split.include?('is-disabled')
#=> false