2017-10-23 1 views
0

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 
+1

정확히 어떤 질문에서 명확한 것은 아닙니다. 당신이하고있는 것입니다 (어쩌면 당신의 질문에 실제 코드를 보여줍니다). 그러나 드라이버 고유의 메소드를 직접 호출하거나'title '에 대해 직접 비교를해서는 안됩니다.'have_title' /'assert_title'을 사용해야합니다. /'has_title? '메쏘드는 여러분이하려는 일에 따라 다릅니다. –

+0

@thomaswalpole 의견을 주셔서 감사합니다. 내가하는 일을 단순화하는 코드를 추가했습니다. 그래서 기본적으로 첫 번째 루프는 통과하고 실제로 "pass 1"을 출력하지만, 맨 아래에 assert_equal이 실패하여 이전에 다른 루프를 추가했습니다. 그것은 깨기 전에 약 10-20 회 반복됩니다. 그러면 assert_equal을 전달합니다. 이것은 첫번째 루프가 무언가를 체크하지 않고 있고 브라우저가 여전히 실제로 '로딩 중'이라는 것을 말해줍니다. –

+1

그것에있는'title' 변수는 무엇입니까? –

답변

1

당신은 title에 대해 동일한 주장을하고하지 말아야도 (드라이버 특정 방법을 사용하여 언제 당신이 아마 뭔가 잘못하고있는 current_session.driver.xxx을한다. 페이지 제목을 확인하려면 방금 중 하나를 사용 기대하는 것입니다 (또한 내장 대기/재 시도를 포함한다) 카피 바라가 제공하는 제목 주장/정규 방법은

page.assert_title(expected_title) 

또한, 어떤 점에서 코드를 방해 할 수 있기 때문에 네트워크 클라이언트에 얘기 코드 Timeout::timeout를 사용하는 것은 매우 위험주의 그 통신을 복구 불가능한 상태로 두십시오. 먹었다. 카피 바라와 함께 일종의 타임 아웃을 사용해야하는 경우 루프에서 잠자고 예상 시간이 경과 할 때까지 상태를 확인하는 것이 훨씬 더 유리합니다. Timeout::timeout - http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/

관련 문제