Selenium三種等待元素的方式及代碼,需要特別注意implicitlyWait的用法


一、顯式等待

1、顯式等待:

      就是明確的要等到某個元素的出現或者是某個元素的可點擊等條件,等不到,就一直等,除非在規定的時間之內都沒找到,那么就跳出Exception.

2、代碼:

      new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.xpath("")));     //元素的xpath路徑

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

3、如果想對加載JS的代碼做出判斷,可以用以下方法:

      Wait wait=new Wait() {     //selenium自帶

@Override

public boolean until() {

// TODO Auto-generated method stub

return webElement.isDisplayed();

}

}; 

二、隱式等待

1、隱式等待:

      相當於設置全局的等待,在定位元素時,對所有元素設置超時時間。

      隱式等待使得WebDriver在查找一個Element或者Element數組時,如果一直查找不到,每隔一段特定的時間就會輪詢一次DOM。

      注:默認設置超時時間為0,一旦設置,這個隱式等待會在WebDriver對象實例的整個生命周期起作用。

2、代碼:

      driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);    //1指等待1秒   

三、線程休眠

      Thread.sleep(1000);    //1000指1000ms

四、實用的等待方法封裝代碼

 

 1 public void waitForAllElementLoad(String type, String locator, int num,long timeout) {
 2         try {
 3             Thread.sleep(500);// 等待1秒,以便觀察
 4         } catch (InterruptedException e1) {
 5             // TODO Auto-generated catch block
 6             System.out.println(e1.getMessage());
 7         }
 8         for (int second = 0;; second++) {
 9             try {
10                 if (second >= timeout) {
11                     break;
12                 }
13                 if (isElementPresent(type, locator, num)) {
14                     break;
15                 }
16                 Thread.sleep(500);
17             } catch (InterruptedException e) {
18 
19             }
20         }
21     }

 

 1 public boolean isElementPresent(String elementType,String expression,int num) {
 2         if(elementType.equals("className")){
 3             //驗證該元素是否在頁面上顯示 --isDisplayed()
 4             try { if (getElementsBy(elementType,expression).get(num).isDisplayed()) {
 5                 return true;
 6             } else {
 7                 return false;
 8             }
 9             } catch (Exception e) { 
10                 return false; 
11             }     
12         }else{
13             try { if (getElementBy(elementType,expression).isDisplayed()) {
14                 return true;
15             } else {
16                 return false;
17             }
18             } catch (NoSuchElementException e) { 
19                 return false; 
20             }     
21       }
22     }
 1 //定位UI元素
 2     public WebElement getElementBy(String elementType,String expression){
 3         switch (elementType) {
 4           case "xpath":
 5                 WebElement xpathelement = driver.findElement(By.xpath(expression));
 6                 return  xpathelement;
 7           case "id":
 8                  WebElement idelement = driver.findElement(By.id(expression));
 9                  return  idelement;
10           case "className":
11                  WebElement classNameelement = driver.findElement(By.className(expression));
12                  return  classNameelement;
13           case "linktext": 
14                  WebElement linktextelement = driver.findElement(By.linkText(expression));
15                  return linktextelement;
16           case "name":
17                   WebElement nameelement = driver.findElement(By.name(expression));
18                   return nameelement;
19           case "partialLinkText":
20                   WebElement partialLinkTextelement = driver.findElement(By.partialLinkText(expression));
21                   return partialLinkTextelement;
22           case "cssSelector":
23                 WebElement cssSelectorelement = driver.findElement(By.cssSelector(expression));
24                 return cssSelectorelement;
25           default:             
26                  WebElement element = driver.findElement(By.xpath(expression));
27                  return element;
28         
29         }        
30     }


免責聲明!

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



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