0

카피 바라에는 대기 중 및 대기 중 기능이 있습니다. 가능한 한 처음 사용하려고합니다.카피 바라의 CSS 요소 대기 기능

find (또는 그 파생물 중 하나)을 사용하여 비동기 적으로 나타나는 CSS 요소를 찾는 방법이 있습니까? 불행히도, 함수 page.has_css?은 대기하지 않는 함수입니다.

+1

메소드'find'는 이미 기다립니다 발견되는 요소 테스트가 어떤 로직도 포함해서는 안되기 때문에, page.assert_selector ('# foo', : ​​count => 1)'요소를 기다리거나 page.assert_selector ('# foo', : ​​count => 0))'아무도 기다리지 말라. –

+1

@FlorentB. 'page.assert_selector ('# foo', : ​​count => 0)'는 page.assert_no_selector ('# foo')'로 쓰여질 수 있습니다. 'page.assert_no_selector ('# foo', count : 3)' –

답변

2

page.has_css?이 대기 기능이 아닌 주장이 정확하지 않습니다. page.has_css?은 페이지에 요소가 나타나려면 Capybara.default_max_wait_time 초까지 대기하고 요소가 해당 시간 내에 페이지에 있는지 여부에 따라 true 또는 false을 반환합니다. 따라서 주어진 Capybara.default_max_wait_time = 5

if page.has_css?("div#my_div") 
    puts "on page" 
else 
    puts "not on page" 
end 

은 최대 5 초 동안 대기합니다. ID가 "my_div"인 div가 페이지에 표시되면 "페이지에"인쇄됩니다. 일치하는 div가 5 초 내에 표시되지 않으면 "페이지에 표시되지 않음"이 인쇄됩니다. 당신이 특정 통화에 대해 더 이상 기다릴하려는 경우 당신은 당신이

page.assert_selector(:css, 'div#my_div') # :css is the default so can usually be omitted 
page.assert_css('div#my_div') # minitest 
expect(page).to have_css('div#my_div') # RSpec 
을 수행 할 수 있습니다 존재하는 요소를 확인 할 :wait 옵션

if page.has_css?("div#my_div", wait: 10) # will wait up to 10 seconds 
    ... 

을 통과하는 경우보다는 부울 응답을 원하는에 의해 default_max_wait_time을 대체 할 수 있습니다 요소를 기다립니다

는 이전에 나타납니다,하지만 당신은 당신이 우리를 할 수있는 실제 요소를해야하는 경우 요소가

를 표시하지 않는 경우 false을 돌아보다 예외를 오히려 올리는 e find도 대기합니다. 따라서

el = page.find(:css, 'div#my_div') # :css is the default and can usually be omitted 

은 요소가 나타날 때까지 기다리고 발견되면 요소를 반환합니다. 요소가 default_max_wait_time 초 이내에 발견되지 않으면 예외가 발생합니다.

참고 : 요소에서 반환하지만 기본적으로, 유일한 비 대기 방법, 심지어 당신이 카운트 옵션 (:count, :minimum, :maximum, :between)의 전달 경우 기다려야 할 수 all하고 first 및 그것들은 여전히 ​​재로드 할 수 없기 때문에 범위 지정을 위해 사용될 경우 추가 동작 효과를 가질 수 있습니다. click_link, click_button 등과 같은 메소드도 find(...).click 등으로 구현되기 때문에 기다릴 것입니다.