4

我有以下带有多个输入的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 需要第一个匹配项,并且只从内容的开头匹配。

有没有办法进行精确匹配,所以黄瓜会找到“保存”而忽略“保存并关闭”?

4

1 回答 1

9

The click_button() method, which Cucumber uses for "When I press..." takes one of three parameters (text, name, id). You could simply differentiate the buttons using the id or name attribute to specify either.

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

Then say:

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

Alternatively, you could scope each button within a 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>

Then you can scope the click_button() method:

When /^I press "([^\"]*)" within "([^\"]*)"$/ do |button,scope_selector|
  within(scope_selector) do      
    click_button(button)
  end
end
于 2010-01-11T19:14:30.890 回答