2010-01-08 3 views
4

는 여러 개의 입력을 가진 다음 HTML이 :버튼의 이름이 같은 단어로 시작하면 cucumber/webrat을 사용하여 특정 버튼을 어떻게 클릭합니까?

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

을하고 "저장"버튼을 클릭 테스트 오이를 사용하고 싶습니다. 나는 오이 시험에서이 작업을 수행 할 때, : 그것은 "저장"버튼 전에 나타나는 이후

When I press "Save" 

는, "닫기 저장"버튼을 클릭합니다.

버튼을 찾기위한 webrat 소스에서 찾고은 : 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 

... 

것 같습니다.

정확히 일치하는 방법이 없으므로 오이가 "저장"을 찾은 다음 "저장하고 닫습니다"를 무시합니까?

답변

9

오이가 "When when press ..."에 사용하는 click_button() 메소드는 세 개의 매개 변수 (text, name, id) 중 하나를 취합니다. 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 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 
+0

감사합니다. id 메소드를 사용하여 종료했습니다. 다른 방법이 있을지도 모른다고 생각했습니다. – zlog