Как я могу нажать на определенную кнопку, используя cucumber / webrat, если название кнопки начинается с того же слова? - PullRequest
4 голосов
/ 08 января 2010

У меня есть следующий HTML с несколькими входами:

<input type="submit" value="Save and close" name="commit"/>
<input type="submit" value="Save" name="commit"/>

и хотел бы использовать огурец для проверки нажатия на кнопку «Сохранить». Однако, когда я делаю это в тесте на огурец:

When I press "Save"

он нажимает кнопку «Сохранить и закрыть», так как он появляется перед кнопкой «Сохранить».

Глядя на источник webrat для поиска кнопки:

def button_element
  button_elements.detect do |element|
    @value.nil?             ||
    matches_id?(element)    ||
    matches_value?(element) ||
    matches_html?(element)  ||
    matches_alt?(element)
  end
end

...

def matches_value?(element)
  element["value"] =~ /^\W*#{Regexp.escape(@value.to_s)}/i
end

...

похоже, что webrat берет первое совпадение и сопоставляет только с начала контента.

Есть ли способ точного совпадения, поэтому огурец находит "Сохранить" и игнорирует "Сохранить и закрыть"?

1 Ответ

9 голосов
/ 11 января 2010

Метод click_button (), который Cucumber использует для «Когда я нажимаю ...», принимает один из трех параметров (текст, имя, идентификатор). Вы можете просто различать кнопки, используя атрибут id или name, чтобы указать либо.

<input type="submit" value="Save and close" name="commit" id="close_after_save"/>
<input type="submit" value="Save" name="commit" id="save"/>

Тогда скажи:

When I press "save"
When I press "close_after_save"

В качестве альтернативы, вы можете заключить каждую кнопку в div.

<div id="save_and_close">
  <input type="submit" value="Save and close" name="commit"/>
</div>
<div id="save">
  <input type="submit" value="Save" name="commit" id="save"/>
</div>

Затем вы можете использовать метод click_button ():

When /^I press "([^\"]*)" within "([^\"]*)"$/ do |button,scope_selector|
  within(scope_selector) do      
    click_button(button)
  end
end
...