Selenium 的頁面加載以及幾種等待的問題


1. PageLoadStrategy :

   當調用driver.get("https://xxxx.xxx.xxx")來訪問某頁面時,get方法通常會阻塞瀏覽器直到頁面完全加載后才執行后面的動作,若一個頁面加載過慢,則會導致get方法一直阻塞。有時候希望頁面在加載過程中就開始檢測元素是否存在,而不是等到頁面加載完了才開始檢測,想要實現這個效果,可以用ChromeOptions類下的setPageLoadStrategy方法(Java,Chrome瀏覽器):

import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.chrome.ChromeOptions; 

ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
driver=new ChromeDriver(options);

其中PageLoadStrategy有三種選擇:

(1) NONE: 當html下載完成之后,不等待解析完成,selenium會直接返回

(2) EAGER: 要等待整個dom樹加載完成,即DOMContentLoaded這個事件完成,僅對html的內容進行下載解析

(3) NORMAL: 即正常情況下,selenium會等待整個界面加載完成(指對html和子資源的下載與解析,如JS文件,圖片等,不包括ajax

以下這段來自https://blog.csdn.net/wkb342814892/article/details/81611737,感謝原作者

實際上,對於一個新加載的dom,頁面啥時候開始接受命令由頁面的加載策略決定,也就是說,我們通過修改頁面加載策略,可以使頁面即使處於加載中,也能接受我們的命令,從這點可以解決webdriver.get的阻塞問題。而每類webdriver都有一個對應的配置文件放在特定的類DesiredCapabilities里面,通過修改里面的pageLoadStrategy,可以使webdriver的頁面加載策略發生改變。

 

2. selenium的幾種等待方式:

(1) Thread.sleep(XXX):硬等待,必須過了XXX毫秒以后才執行后面的命令。

(2) 

WebDriverWait wait=new WebDriverWait(driver,10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("XXX")));

最多等待10秒,一旦等到XXX元素出現即退出等待執行后面操作,10秒后仍然沒有出現XXX元素則拋出異常。

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

所有的findElement方法都會隱式等待10s


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM