document.readyState === 'complete'
을 확인하는 자동화와 window.renderComplete
이라는 로컬 변수를 실행 중입니다 (페이지 렌더링이 완료된 서버용).브라우저가로드되고 카피 바라가 아직 테스트에 실패했습니다
하지만 어쨌든 Capybara.current_session.driver.browser.title
은 수표 루프를 몇 번 반복하여 title == Capybara.current_session.driver.browser.title
에 실패했습니다. 검사가 통과하기 전에 아마 루프를 10 회 반복하고 루프를 끊습니다.
브라우저가 데이터를 특정 변수로 설정하는 데 필요한 모든 데이터를 얻은 후 시간이 있습니까? 아니면 카피 바라의 결함입니까? readyState와 renderComplete가 모두 true 일 경우 브라우저에서 여전히 지연이 발생하는 이유를 정확히 지적 할 수 없습니다.
renderComplete = page.evaluate_script("(window.renderComplete == true) && (document.readyState === 'complete');")
if renderComplete
puts "pass 1"
else
loop do
renderComplete = page.evaluate_script("window.renderComplete == true;")
break if renderComplete == true
end
puts "pass 2"
end
browser = Capybara.current_session.driver.browser
Timeout::timeout(Capybara.default_max_wait_time) do
i=1
loop do
puts "loop! #{i}"
i+=1
break if title == browser.title
end
end
assert_equal title, browser.title
정확히 어떤 질문에서 명확한 것은 아닙니다. 당신이하고있는 것입니다 (어쩌면 당신의 질문에 실제 코드를 보여줍니다). 그러나 드라이버 고유의 메소드를 직접 호출하거나'title '에 대해 직접 비교를해서는 안됩니다.'have_title' /'assert_title'을 사용해야합니다. /'has_title? '메쏘드는 여러분이하려는 일에 따라 다릅니다. –
@thomaswalpole 의견을 주셔서 감사합니다. 내가하는 일을 단순화하는 코드를 추가했습니다. 그래서 기본적으로 첫 번째 루프는 통과하고 실제로 "pass 1"을 출력하지만, 맨 아래에 assert_equal이 실패하여 이전에 다른 루프를 추가했습니다. 그것은 깨기 전에 약 10-20 회 반복됩니다. 그러면 assert_equal을 전달합니다. 이것은 첫번째 루프가 무언가를 체크하지 않고 있고 브라우저가 여전히 실제로 '로딩 중'이라는 것을 말해줍니다. –
그것에있는'title' 변수는 무엇입니까? –