카피 바라로 채울 수있는 적절한 레이블이있는 필드가 있습니다.
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
조금 을 놓치고 있었다 . 감사!