当多个相似字段出现在表单中时,选择更好的黄瓜(基于Capybara)

时间:2011-05-28 13:22:44

标签: checkbox cucumber capybara

(有些背景如果有帮助:我们的Rails应用程序有一堆使用双嵌套字段的可能重复的动态生成表单,模式中的id为foo_attributes_0_bar_attributes_0_bat_12,其中前两个数字基本上根据重复的数量递增有嵌套的形式,最后一个数字是特定“bat”对象的id。这使得选择Cucumber进行测试很困难!)

我正在尝试写一些这样的步骤:

When I check the 1st checkbox with the value "Bat 12"

When I check the 3rd checkbox with id matching "bar_attributes_bat"

我有以下工作,但我找到复选框(或字段)的方法对我来说似乎非常糟糕和低效:

When /^I check the (\d+)(st|nd|rd|th) checkbox with the value "([^"]*)"$/ do |number, junk, value|
  check(page.all("input").select {|el| el.node['value'] == value}[(number.to_i-1)].node['id'])
end

When /^I check the (\d+)(st|nd|rd|th) checkbox with id matching "([^"]*)"$/ do |number, junk, id_string|
  check(page.all("input").select {|el| el.node['id'] && el.node['id'].match(/#{id_string}/)}[(number.to_i-1)].node['id'])
end

有没有更好的方法来选择这些输入元素?

2 个答案:

答案 0 :(得分:9)

When /^I check the (\d+)(st|nd|rd|th) checkbox with the value "([^"]*)"$/ do |index, junk,   value|
  page.all("input[value='#{value}']")[index.to_i-1].check
end

答案 1 :(得分:0)

你可以利用xpath来点击(勾选)复选框。我使用的是同样的两个输入字段,第一个是隐藏的,第二个是可见的。我点击第二个。

我的html取自firefox的复选框。

<input type="hidden" value="0" name="approve[enabled]"/>
<input id="3" class="approveClass" type="checkbox" value="1" name="approve[enabled]"/>


//*[@id='MyList']/tbody/tr[2]/td[3]/input[2]

我的复选框位于第三列,表格中没有标签。例如

 name                              type                         approve        
 rocky                             permanent                    [](checkbox)


#step in my scenario...
 And I press xpath link "//*[@id='userList']/tbody/tr[2]/td[3]/input[2]"

#web_step.rb......
    When /^I press xpath link "([^"]*)"$/ do |xpath|
      page.find(:xpath, xpath).click
    end