2013-11-15 3 views
9

내가 수행하려고하는 것은 페이지를 탐색하고로드 할 항목을 기다린 다음 스크린 샷을 저장하고 저장하는 것입니다.X 초 동안 셀레늄 일시 중지 받기

이미이 코드는

WebDriver driver = new FirefoxDriver(); 


driver.get("http://www.site.com"); 


driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

try { 

    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
    FileUtils.copyFile(scrFile, new File("/home/Desktop/image.png")); 

} catch (Exception e) { 

     e.printStackTrace(); 
} 

driver.close(); 

나는 그것을로드 할 수 있습니다 있지만 사이트에 내용이 난을하고자하기 때문에로드 된 페이지 인 경우에도 대기해야하는 이유 몇 초 후에로드 그림. 어떤 이유로 페이지가 대기하지 않고 있습니다. 다른 방법을 사용하여 드라이버/페이지를 X 초 동안 기다리는 데 사용할 수 있습니까?

+0

이 게시물을 확인하십시오 : http://stackoverflow.com/questions/5868439/wait-for-page-load-in-selenium – Gayathri

답변

6

초기 페이지가로드 된 후로드되는 요소를 찾은 다음 해당 요소가 발견 될 때까지 Selenium을 기다릴 수 있습니다.

public void pause(Integer milliseconds){ 
    try { 
     TimeUnit.MILLISECONDS.sleep(milliseconds); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

source

:
WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ID"))); 
+1

이 접근법에서 ExpectedCondition은 500ms마다 테스트되어 조건이 충족되었는지 (여기서는 "ID"요소가 표시됨) 타임 아웃 (여기서는 10으로 설정)까지 있는지 확인합니다. 커스텀 프리디 케이트를 위해서도 자신의 조건을 작성할 수 있습니다. 이것에 관한 문서는 http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp에서 볼 수 있습니다. – anotherdave

5

그건 정말 셀레늄 특유의 것입니다. 페이지를로드 한 후 화면을 캡처하기 전에 잠자기 자바를 잠자기 상태로 유지하기 만하면됩니다.

Thread.sleep(4000); 

driver.get 문 뒤에 입력하십시오.

+2

나는 upvoting하지 않는 이유는 당신이해야하기 때문에 ** 절대 ** 사용 ..... 이처럼 명시 적으로 대기합니다. 나쁜. – sircapsalot

+0

따라서 각 테스트에서 스크린 샷을 1,000 개 단위로 가져 와서 요소가 일반적으로 500ms 후에로드되는 경우이 접근 방식은 빌드 시간에 1 시간을 추가합니다. – anotherdave

+0

@sircapsalot 브라우저를 닫을 때까지 2 초 정도 기다렸다가 (.Quit()) 호출하면 어떻게됩니까? – MStodd

1

누군가에게 도움이 될 수 있으므로 항상 암시 적 대기, 특히 Thread#sleep을 가능한 한 많이 피하려고 시도해야합니다. Thread.sleep(10)을 수행하는 경우 코드가 일 것입니다.은 1 초 후에 페이지가 준비되는 경우에도 10 초 동안 대기합니다. 따라서이 방법을 자주 사용하면 테스트가 크게 느려질 수 있습니다.

더 나은 방법은 ExplicitWaits을 사용하는 것입니다. 이는 어떤 동작이 발생하거나 페이지에서 일부 요소가 렌더링되는 한 정확히 기다리는 것을 의미합니다. 그래서 귀하의 경우, 나는 명시 적으로 기다려서로드 된 모든 것이 있는지 확인한 다음 스크린 샷을 찍을 것입니다.

+0

ExplicitWaits 링크에 감사드립니다. 정말 도움이되었습니다! :) –

0

당신이 초 특정 수의 지연보다는 가능한 한 빨리 응답 할 경우

, 여기에 셀레늄 IDE가 제공하는 것과 유사한 일시 정지하는 기능입니다
관련 문제