1. 程式人生 > >Selenium3方法2-Timeout介面相關方法介紹

Selenium3方法2-Timeout介面相關方法介紹

        WebDriver介面的manage()方法會返回一個Option介面。Option介面是這樣描述的:An interfacefor managing stuff you would do in a browser menu(用於管理您在瀏覽器選單中執行的操作的介面),Option的中文意思是“選項”,言外之意就是瀏覽器選項。所以,這些操作都是來控制瀏覽器本身。Option介面中的timesout()方法可以返回Timeout介面。

Timeout介面中的方法:(就三個)

implicitlyWait(long time, TimeUnit unit);

setScriptTimeout(long time, TimeUnit unit);

pageLoadTimeout(long time, TimeUnit unit);

       先看看implicitlyWait(),這個在前面介紹過了,叫隱式時間等待。我們來看看這個介面的描述部分,大致意思是:隱式時間等待是在查詢元素的時候,設定一個最大時間值,如果driver第一次沒有找到網頁元素,那麼就繼續找,直到消耗了設定的最大時間值,還是沒有找到,那麼就丟擲沒有找到元素的異常。如果在設定時間範圍內就找到了該元素,那麼就執行下一行程式碼,不需要再等時間,這就是隱式等待的含義。所以,隱式時間等待一般結合查詢網頁元素一起。

       setScriptTimeout(),作用是,在設定規定的時間內,等待非同步指令碼的執行結束,而不是裡面丟擲錯誤。這個在執行javascript指令碼的時候可能會使用,後面我們介紹了使用Javascript指令碼執行Selenium相關操作後在介紹具體使用方法。

        pageLoadTimeout(),字面意思就網頁載入超時,作用就是在設定規定時間內,等待網頁完整載入完成,而不是裡面丟擲錯誤。我們知道如果網速慢,或者網頁元素太多,例如網頁做了大面積渲染,肯定會造成網頁載入速度變慢。這個介面的作用就是,來處理這類問題的。從這個角度來看,我們前面的指令碼中設定時間等待的語句應該換成這個語句更合適一些,畢竟我們的目的就是等待網頁載入完成。

        這裡用pageLoadTimeout()舉例一個開啟百度和開啟國外站點的例子,百度首頁開啟設定2秒,國外站點(icloud.com)開啟設定1秒,由於中國大陸訪問國外網站速度肯定慢,所以會報超時錯誤。

import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;  
public class PageLoadTest {	
    public static void main(String[] args) {				                
        System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe");	
			        
        WebDriver driver = new ChromeDriver();				 
        driver.manage().window().maximize();		
		 
        driver.manage().timeouts().pageLoadTimeout(1,TimeUnit.SECONDS);		 
        driver.get("https://www.icloud.com/");					}  
}

執行會報錯 

把上面的超時時間設定10秒,然後執行,就應該不會報這個超時的錯誤。我測試過5秒,也不會報超時。

       以後我們把這些Selenium方法或者介面分成三類,一類是driver相關,也就是操作瀏覽器本身設定,第二類是元素相關,就是一些元素的點選,輸入等操作,第三類是一些工具支援類,例如截圖,日誌輸出,事件監聽。