2013-11-15 59 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

你可以找到一個元素的初始頁面加載後加載,然後進行硒等待,直到元素被發現。

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

這難道不真的是硒具體的事情。你只是想讓java在加載頁面之後但在截取屏幕之前休眠一下。

Thread.sleep(4000); 

把這個放在你的driver.get語句後面。

+2

我不upvoting唯一原因是因爲你應該** **從未使用.....顯式等待這樣。壞。 – sircapsalot

+0

因此,如果他在1000套套件中的每個測試中都採用屏幕截圖,並且該元素通常會在500毫秒後加載,則此方法會在構建時間後增加一個小時。 – anotherdave

+0

@sircapsalot如果我想我的瀏覽器保持打開加收2秒鐘,這兩點關閉之前(我稱之爲.Quit()),我應該怎麼辦呢? – MStodd

1

萬一它會幫助別人,你應該儘量避免隱含的等待,特別是Thread#sleep儘可能多的,你可以。如果你這樣做Thread.sleep(10),你的代碼將總是等待10秒鐘,即使在情況下1秒後您的網頁已準備就緒。所以如果你經常使用這個,這可以大大減緩你的測試。

更好的辦法是使用ExplicitWaits你意味着你將等待確切只要一些動作發生或某些元素被呈現在頁面上。所以在你的情況下,我會使用明確的等待來檢查是否加載了所有內容,然後截取屏幕截圖。

+0

謝謝ExplicitWaits鏈接,真的有幫助! :) –

0

如果要延遲一定的秒數,而不是儘快作出迴應,這裏是類似暫停的功能是什麼硒IDE提供:

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

source