카피 바라로 채울 수있는 적절한 레이블이있는 필드가 있습니다.
fill_in 'Your name', with: 'John'
채우기 전에 값을 확인하고 파악할 수 없습니다.
fill_in다음 줄 뒤에 추가하면 :
find_field('Your name').should have_content('John')
페이지를 저장하여 확인한대로 바로 채우기가 작동했지만 테스트는 실패합니다.
내가 무엇을 놓치고 있습니까?
카피 바라로 채울 수있는 적절한 레이블이있는 필드가 있습니다.
fill_in 'Your name', with: 'John'
채우기 전에 값을 확인하고 파악할 수 없습니다.
fill_in다음 줄 뒤에 추가하면 :
find_field('Your name').should have_content('John')
페이지를 저장하여 확인한대로 바로 채우기가 작동했지만 테스트는 실패합니다.
내가 무엇을 놓치고 있습니까?
답변:
xpath 쿼리 를 사용하여 input특정 값을 가진 요소 (예 : 'John') 가 있는지 확인할 수 있습니다 .
expect(page).to have_xpath("//input[@value='John']")
자세한 내용은 http://www.w3schools.com/xpath/xpath_syntax.asp 를 참조 하십시오 .
아마도 더 예쁘게 :
expect(find_field('Your name').value).to eq 'John'
편집 : 요즘 아마도 have_selector를 사용합니다.
expect(page).to have_selector("input[value='John']")
페이지 객체 패턴을 사용하는 경우 (해야합니다!)
class MyPage < SitePrism::Page
element :my_field, "input#my_id"
def has_secret_value?(value)
my_field.value == value
end
end
my_page = MyPage.new
expect(my_page).to have_secret_value "foo"
find_field그리고 다른 Node::Finders것들은 노드를 찾고 기대하지 않고 노드에서 조치를 수행하는 데 사용됩니다. 물론 이것은 규칙이 아니지만 내장 된 솔루션을 사용하는 것이 더 좋은 아이디어이므로 간단한 것입니다. 그냥 말해!
또 다른 예쁜 해결책은 다음과 같습니다.
page.should have_field('Your name', with: 'John')
또는
expect(page).to have_field('Your name', with: 'John')
각기.
또한 참조 참조 .
참고 : 비활성화 된 입력의 경우 옵션을 추가해야합니다 disabled: true.
with하면 값이 일치하는 경우에만 true를 반환했는데, 이는 예상 결과입니다.
expected […] but there were no matches. Also found "", which matched the selector but not all filters..빈 필드에 도착 하여 매우 멋진 오류 메시지에 매우 가깝습니다.
나는 약간 다른 것을하는 방법을 궁금해했다 : Capybara가 일치 할 때까지 매처를 다시 테스트 할 수있는 능력을 사용하면서 필드에 어떤 가치 가 있는지 테스트하고 싶었다 . 이를 위해 "필터 블록"을 사용할 수 있습니다.
expect(page).to have_field("field_name") { |field|
field.value.present?
}
.value조금 을 놓치고 있었다 . 감사!