Selenium會在進入新頁面之前等待異步資源調用。Selenium:不要等待異步資源
Ex。
<script src="https://apis.google.com/js/platform.js" async defer></script>
在具有許多外部API(如谷歌分析和從G +,臉譜共享按鈕,和Twitter)一個網站。 Selenium花費更多時間等待異步調用,而不是運行測試。
無論如何禁用此行爲,以便硒不會等待異步外部API調用?
Selenium會在進入新頁面之前等待異步資源調用。Selenium:不要等待異步資源
Ex。
<script src="https://apis.google.com/js/platform.js" async defer></script>
在具有許多外部API(如谷歌分析和從G +,臉譜共享按鈕,和Twitter)一個網站。 Selenium花費更多時間等待異步調用,而不是運行測試。
無論如何禁用此行爲,以便硒不會等待異步外部API調用?
你看到的是page load timeout在行動中。你可以調整它,處理超時異常:
try:
driver.set_page_load_timeout(5) # in seconds
except TimeoutException:
pass
# continue with testing
此外,你還可以添加一個Explicit Wait等待一定期望「動作」元素出現,這樣就可以與你的測試立即着手一旦元素出現。
您也可以通過阻斷請求傳送到不相關的你的測試,不會損害頁面呈現,不會影響您的測試某些領域優化。舉例來說,如果你想阻止谷歌Analytics(分析)要求:
您還可以禁用圖片,CSS或閃存(如果這是適合你的情況):
與下面的代碼,你不需要等待加載整個頁面進行任何處理(即find_element功能)
FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("webdriver.load.strategy", "unstable");
WebDriver driver = new FirefoxDriver(fp);
更多細節:https://code.google.com/p/selenium/wiki/FirefoxDriver#-Beta-_load_fast_preference
這將引發錯誤時的頁面時間太長加載。即使沒有加載異步資源,我也希望硒繼續執行代碼並加載頁面。 – PaintingInAir
@PaintingInAir好的,你看到了什麼錯誤?你能提供一個可重複的例子嗎?謝謝。 – alecxe
設置較低的頁面加載超時會導致超時異常。根據硒文檔,這是driver.set_page_load_timeout的目的。你答案的第二部分是正確的。由於我所加載的所有異步資源都是外部的,因此它可以達到相同的效果,而不會明確地解決等待異步調用的問題。 – PaintingInAir