2015-09-05 46 views
3

Selenium會在進入新頁面之前等待異步資源調用。Selenium:不要等待異步資源

Ex。

<script src="https://apis.google.com/js/platform.js" async defer></script> 

在具有許多外部API(如谷歌分析和從G +,臉譜共享按鈕,和Twitter)一個網站。 Selenium花費更多時間等待異步調用,而不是運行測試。

無論如何禁用此行爲,以便硒不會等待異步外部API調用?

回答

3

你看到的是page load timeout在行動中。你可以調整它,處理超時異常:

try: 
    driver.set_page_load_timeout(5) # in seconds 
except TimeoutException: 
    pass 

# continue with testing 

此外,你還可以添加一個Explicit Wait等待一定期望「動作」元素出現,這樣就可以與你的測試立即着手一旦元素出現。


您也可以通過阻斷請求傳送到不相關的你的測試,不會損害頁面呈現,不會影響您的測試某些領域優化。舉例來說,如果你想阻止谷歌Analytics(分析)要求:

您還可以禁用圖片,CSS或閃存(如果這是適合你的情況):

+0

這將引發錯誤時的頁面時間太長加載。即使沒有加載異步資源,我也希望硒繼續執行代碼並加載頁面。 – PaintingInAir

+0

@PaintingInAir好的,你看到了什麼錯誤?你能提供一個可重複的例子嗎?謝謝。 – alecxe

+0

設置較低的頁面加載超時會導致超時異常。根據硒文檔,這是driver.set_page_load_timeout的目的。你答案的第二部分是正確的。由於我所加載的所有異步資源都是外部的,因此它可以達到相同的效果,而不會明確地解決等待異步調用的問題。 – PaintingInAir