Capybara - 查找位于表格行中的禁用按钮

时间:2015-08-13 13:24:07

标签: ruby button cucumber capybara acceptance-testing

我有一个按钮

100.0 - random1

100.0 - random2

位于表格的tr中。

我编写了一个测试按钮状态的函数,只需使用:

(100 - random1)/100.0

(100 - random2)/100.0

但是,此块不适用于表格行中的按钮。我也尝试按按钮ID添加检查,它也没有用。如何在不将表id作为参数的情况下实现它? (因为我不想在功能中写表id)

使用id时,错误为:

<button type="button" id="saveListing" class="button small save-button" data-bind="enable: saveEnabled, click: save"><i class="fa fa-save"></i> Save</button>

或使用文字:

And(/^...the button "(.*?)" on "(.*?)" page is disabled$/) do |button_name, page|

  button_id = ConfigHelper.get_button_info(button_name, page)['id']
  button_class = ConfigHelper.get_button_info(button_name, page)['class']

  if !button_id.nil?
    find_button(button_id)[:disabled].should eq 'true'
  elsif !button_class.nil?
    find(button_class)[:disabled].should eq 'true'
  else
    button_text = ConfigHelper.get_button_info(button_name, page)['text']
    find('button', text: button_text)[:disabled].should eq "true"
  end
end

感谢。

2 个答案:

答案 0 :(得分:1)

saveListing按钮 ID ,而不是。在 css 选择器中,用于哈希符号用于 ID

因此,您应该使用#saveListing.save-button,而不是.saveListing。这就是你的第一次匹配失败的原因。

<小时/> 至于第二个为什么这样做 - 我猜有4行,每行有一个按钮,而 Capybara 并不知道你指的是哪一行。如果您要检查所有的条件,可以使用all代替find,如下所示:

all('button', text: button_text).each do |button|
  button[:disabled].should eq "true"
end

答案 1 :(得分:1)

Capybaras find_button根本不搜索css类,所以除非你覆盖了find_button我不知道为什么你会因为使用id而得到错误。 find_button将按按钮的id,value,text content或title属性进行搜索,并且还支持禁用的搜索过滤器。更稳定(如果按钮的状态由于JS而改变)这些检查的版本将是

find_button('saveListing', disabled: true).should be #Note: no # in front of the id here since its not a css selector
find_button('button text', disabled: true).should be

这些会更稳定,因为他们会利用Capybaras等待行为来找到禁用的按钮,而之前写入的方式会立即找到按钮并且如果它们尚未被禁用则会出错。