定位元素的等待方法


1、sleep()方法
Thread.sleep(60000)強制等待60s

這個方法是最不推薦的,是用線程等待的方式來實現,每次元素出現在頁面的時間不一樣,如果設置的時間長了,白白浪費了時間,如果設置的時間短了,腳本依然會報沒有找到元素的錯誤。

 

2、WebDriver PageLoadTimeOut()方法

driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

這個方法實際上跟上面那個是一樣的,也不推薦


3、隱式等待implicitlyWait()

driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS); //second為等待時間,單位秒
針對Driver 每次執行命令的最長執行時間,也可以理解為超時時間。但參數只有時間,這就導致我需要什么元素出現,我不一定能等到它。

原理:隱式等待,就是在創建driver時,為瀏覽器對象設置一個等待時間。這個方法是得不到某個元素就等待一段時間,直到拿到某個元素位置。
注:此處設置的等待時間 是針對全局設置的,webdriver中執行所有命令的超時時間都設置為second秒了

注:在使用隱式等待的時候,實際上瀏覽器會在你自己設定的時間內不斷的刷新頁面去尋找我們需要的元素
改進后方法:

  private boolean isElementPresent(By by) { 
      try { 
           driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); 
           driver.findElement(by); 
           return true; 
        } catch (NoSuchElementException e) { 
          return false; 
       } 
  }

 

4、顯示等待WebDriverWait()

public static void waitForLoad(WebDriver driver, final By locator, int timeOut) {
     WebDriverWait wait = new WebDriverWait(driver, timeOut);  // timeOut為等待時間,單位秒
      wait.until(new ExpectedCondition<Boolean>() {
          public Boolean apply(WebDriver d) {
               boolean loadcomplete = d.findElement(locator).isDisplayed();
               return loadcomplete;
          }
    });
}
newWebDriverWait(driver,10).until(
ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator")));
原理:顯式等待,就是明確的要等到某個元素的出現或者是某個元素的可點擊等條件,等不到,就一直等,除非在規定的時間之內都沒找到,那么就跳出Exception.(簡而言之:就是直到元素出現才去操作,如果超時則報異常)
改進后方法:
WebElementelementId=(newWebDriverWait(driver,10)).until(
new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d){
return d.findElement( By.id("id locator"));
}
}
);
 
顯式與隱式的區別:
顯示等待是針對某個元素的等待相當於局部的,隱身等待是針對driver實例來的相當於是全局的。一般情況使用顯示等待。

 


免責聲明!

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



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