2016-09-07 2 views
0

저는 Capybara를 사용하고 있으며 finders 'find_field'에서 오류가 발생했습니다. & has_selector '. "NoMethodError :Capybara find_field & has_selector가 작동하지 않습니다.

page = visit "http://www.my-url-here.com" 
next if page.has_selector?('#divOutStock') 
page.find_field('#txtQty').set('9999') 

has_selector 오류 반환 :이처럼 사용하여 시도했다

? 정의되지 않은 메서드`has_selector를 ' { "status"=> "success"} : 해시 "

find_field는 필드를 찾을 수 없습니다. (페이지에 있으며 숨겨진 필드가 아닙니다.)

fill_in을 사용하여 필드 값을 설정하려고 시도했으나 작동하지 않습니다.

카피 바라에서 어떻게 작동합니까?

+0

'page'에'visit'의 결과를 지정하지 마십시오. 그냥'visit "을 호출하면됩니다."''without page ='. – Stefan

+0

여전히 오류가 발생합니다. 'Capybara :: ElementNotFound : 필드를 찾을 수 없습니다. "#txtQty" – NeyLive

답변

1

당신은

  1. 페이지는 단지 Capybara.current_session의 별칭입니다 코드에 문제가 몇 가지있다. 할당 한 경우 로컬 변수를 만들고 더 이상 세션이 아닙니다.

  2. find_field는 ID, 이름 또는 레이블 텍스트와 일치하는 로케이터 (http://www.rubydoc.info/gems/capybara/Capybara/Node/Finders#find_field-instance_method)를 취합니다. JS를 사용하는 경우 (이

귀하의 코드가

page.visit "http://www.my-url-here.com" 
next if page.has_selector?('#divOutStock') 
page.find_field('txtQty').set('9999') 

있어야 할 CSS 선택을하지 않으며 또한

page.fill_in('txtQty', with: '9999') 

는 점에 유의해야한다 당신은 마지막 줄을 다시 작성할 수 가능 드라이버) has_selector?은 #divOutStock을 표시하기 위해 Capybara.default_max_wait_time까지 대기합니다. 일반적으로 거기에 있지 않고 약간 속도를 높이고 싶다면

page.visit "http://www.my-url-here.com" 
page.assert_text('Something always on page once loaded') #ensure/wait until page is loaded 
next if page.has_selector?('#divOutStock', wait: 0) # check for existence and don't retry 
page.fill_in('txtQty', with: '9999') 
+0

답장을 보내 주셔서 감사합니다. Capybara 문서보다 훨씬 명확합니다. 귀하의 제안을 구현했지만'NoMethodError : undefined method 'expect''를 얻고 있습니다. RSpec 메소드가 필요하지 않습니까? – NeyLive

+0

@NeyLive 으악 - 네, 맞습니다 - RSpec을 사용하지 않기로 답변을 업데이트했습니다 –

+0

감사합니다! 그것은 그것을 분류했다! – NeyLive

관련 문제