watir button.enabled?总是返回真值

Chu*_*Chu 5 ruby watir cucumber

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

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

可能出了什么问题?

Jus*_* Ko 3

问题

元素#已启用?方法仅检查元素是否具有禁用属性。它不会检查其中一个类是否包含单词“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>
Run Code Online (Sandbox Code Playgroud)

可以看到只有第一个按钮,具有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
Run Code Online (Sandbox Code Playgroud)

解决方案

要检查元素是否基于类被禁用,您必须检查类属性。

假设页面有以下 html,其中包括处于“禁用”和“启用”状态的按钮:

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

或者,如果您之前定位/存储了该元素,则可以检查 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
Run Code Online (Sandbox Code Playgroud)