2013-09-05 4 views
3

정확한 텍스트와 일치시키기 위해 카피 바라 2.1에 문제가 있습니다.카피 바라의 정확한 일치

<select class='tags-select'> 
    <option>Tag 1</options> 
    <option>Tag 2</options> 
</select> 

내 시험 그렇지 않으면 그조차 내 도우미에서이 카피 바라의 설정과 태그 하나를 선택 유지 태그 2

page.find('.tags-select', :text => 'Tag 2').click 

를 선택해야합니다 :

는 내가 선택 양식이 하나처럼 보이는이

Capybara.configure do |config| 
    config.match = :prefer_exact 
    config.exact = true 
    config.exact_options = true 
    config.ignore_hidden_elements = true 
    config.visible_text_only = true 
    config.default_wait_time = 10 
end 

나는이 문제를 피하기 위해 여기서 정규 표현식을 사용할 수 있다는 것을 알고 있지만 아래에 있습니다. 그 시험에 내가 뭘 잘못하고 있는지 서있어.

답변

3

가장 큰 문제는 query.rb 파일을 기반을하고있는 : 정확한 옵션 적용되지 않습니다 : 텍스트 옵션 :

def matches_filters?(node) 
    if options[:text] 
    regexp = options[:text].is_a?(Regexp) ? options[:text] : Regexp.escape(options[:text].to_s) 
    return false if not node.text(visible).match(regexp) 
    end 

그래서 파인더 :

page.click_link('id', :text => 'Password', :exact => true) 
,

에는 다음과 같은 요소를 모두 일치

<a id="id" href="#">Password</a> 

<a id="id" href="#">Password Other</a> 
당신의 발견 방법은 실제로 (오히려 옵션보다 선택 목록을 반환하기 때문에

당신의 접근 방식은 실패 할 수있는 즉, 나는 당신이 생각 잘못된 요소를 클릭). 다음은 올바른 옵션을 클릭하지만 여전히 정확한 문제가 있습니다.

page.find('.tags-select option', :text => 'Tag 2').click 

는 정확성의 문제를 해결하기 위해, 당신은 텍스트 옵션을 사용하지 않고 파인더에있는 텍스트 값을 전달해야합니다. 그냥 옵션을 선택하는 경우 DevDude가 언급 한 바와 같이

에서, select 방법을 사용하십시오

page.find('.tags-select').select("Tag 2") 

당신이 정말로 대신 클릭을 할 필요가있는 경우에, 당신은 할 수 :

page.find('.tags-select').find(:option, 'Tag 2').click 
+0

완벽 그 . 좋은 설명 주셔서 감사합니다! – Evers

0

문제는 여러 옵션이있는 요소에서 텍스트 선택기를 사용하고 있다는 사실에 있습니다. 옵션을 포함하는 선택기에 대해 다른 사양을 사용해야합니다. 또한 두 옵션이 모두 동일하므로 (빈 값) 각 옵션에 값을 추가해야합니다. 이와 옵션을 선택하려고 다음

<select class='tags-select'> 
    <option value="1">Tag 1</options> 
    <option value="2">Tag 2</options> 
</select> 

을 그리고 : :이 같은 작업을 다시 할

page.find('.tags-select').select("1") 
관련 문제