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