selenium 延遲等待的三種方式


1、最直接普通的方式:這個是設置固定的等待時間

   Thread.sleep(1000);  

 

2、顯示等待方式(Explicit Wait):就是明確的要等待的元素在規定的時間之內都沒找到,那么就拋出Exception.代碼示例如下

public LoginPage LoginExpectingFailure(){
WebDriverWait wait = new WebDriverWait(driver,10);

wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dologin")));

這里,10是要等待的秒數.如果沒有滿足until()方法中的條件,就會始終在這里wait 10秒,依然找不到,就拋出異常 。

還可以這樣寫:

 

    WebDriver chrome= new ChromeDriver() ;
    chrome.get( http://somedomain/url_that_delays_loading);
    WebElement e = (new WebDriverWait( chrome, 10)) .until(
        new ExpectedCondition< WebElement>(){
            @Override  //方法重寫
            public WebElement ByPresent( WebDriver d) {
                return d.findElement( By.id("id locator"));
            }
        }
    );   

 

這樣就通過回調函數,直接獲得了這個WebElement.也就是頁面元素 。

 

 

3、隱式等待方式(implicitlyWait):設置腳本在查找元素時的最大等待時間;

隱式等待方式(implicitlyWait):設置腳本在查找元素時的最大等待時間;
   driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);    
代碼示例如下:
    public boolean isByElementDisplayed(By by, int time,WebDriver chrome) {
        boolean status = true;
        while(!isByPresent(chrome, by)){
            chrome.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
        }
        return status;      
    }
    
    public boolean isByPresent(WebDriver chrome, By by){
        boolean display = false;
        try{
            chrome.findElement(by).isDisplayed();
            return display= true;
        }catch(NoSuchElementException e){
            return display;
        }
    }  
這里用while循環是如果明確需要查找的元素未找到,就繼續循環等待;

 


免責聲明!

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



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