лучший выбор огурца (на основе капибары), когда несколько похожих полей появляются в форме - PullRequest
4 голосов
/ 28 мая 2011
(Немного предыстории, если это поможет: в нашем приложении Rails есть куча потенциально повторяющихся динамически генерируемых форм с использованием двойных вложенных полей с идентификаторами в шаблоне foo_attributes_0_bar_attributes_0_bat_12, где в основном первые два числа увеличиваются в зависимости от количества повторений есть вложенная форма, а последнее число является идентификатором конкретного объекта "bat". Это затрудняет выбор в 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 ]

9 голосов
/ 28 мая 2011
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
0 голосов
/ 06 февраля 2013

Вы можете использовать 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
...