《手把手教你》系列技巧篇(七十一)-java+ selenium自動化測試-自定義類解決元素同步問題(詳解教程)

1.簡介

前面宏哥介紹了幾種關於時間等待的方法,也提到了,在實際自動化測試腳本開發過程,百分之90的報錯是和元素因為時間不同步而發生報錯。本文介紹如何新建一個自定義的類庫來解決這個元素同步問題。這樣,我們在寫腳本的時候,就直接調用該類方法就可以。

2.項目實戰

2.1程式碼設計

1.在新包library下新建我們的自定義類方法。如下圖所示:

 2.2參考程式碼

package library;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;



/**
 * @author 北京-宏哥
 * 
 * @公眾號:北京宏哥
 * 
 * 《手把手教你》系列技巧篇(七十一)-java+ selenium自動化測試-自定義類解決元素同步問題(詳解教程)
 *
 * 2022年2月19日
 */


/**
*
* @ClassName: MyWait
* @Description: 獲取頁面元素
* @date: 2022年02月19日 上午19:56:00
* @version: 1.0.0
*/
public class MyWait {
    
    /**
    *
    * @Title: isElementPresent
    * @Description: 當前頁面是否存在元素
    * @param driver
    * @param xpath
    * @param time
    * @return WebElement
    * @throws
    */
    public static WebElement isElementPresent(WebDriver driver, String xpath, int time){
        WebElement ele = null;
        
        for(int i=0;i<time;i++){
            try{
                
                ele = driver.findElement(By.xpath(xpath));
                break;
            } catch(Exception e){
                try{
                    Thread.sleep(1000);
                } catch(InterruptedException e1){
                    System.out.println("Waiting for element to appear on DOM");
                }
            }
        }
        return ele;
    }

}

3.調用自定義類

3.1程式碼設計

在腳本中調用我們的元素同步方法,在另外一個包lessons下新建一個測試類,測試調用類方法。

3.2參考程式碼

package lessons;

import java.util.concurrent.TimeUnit;

import library.MyWait;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author 北京-宏哥
 * 
 * @公眾號:北京宏哥
 * 
 * 《手把手教你》系列技巧篇(七十一)-java+ selenium自動化測試-自定義類解決元素同步問題(詳解教程)
 *
 * 2022年2月19日
 */

public class TestMyWait {
    
    public static void main(String[] args){
        
        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
        
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        
        driver.get("//www.baidu.com");
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  
        
         // 查詢框輸入框輸入欄位
        //driver.switchTo().frame("aid-auth-widget"); 
        MyWait.isElementPresent(driver, ".//*[@id='kw']", 10).sendKeys("tester");
        
        // 密碼輸入框輸入欄位
        MyWait.isElementPresent(driver, ".//*[@id='pwd']", 10).sendKeys("123456");
        
    }

}

3.3運行程式碼

1.運行程式碼,右鍵Run AS->Java Appliance,控制台輸出,如下圖所示:

上面兩個輸入框調用了我們自定義的方法,根據元素xpath去定位元素,在10秒之內不斷循環去定義該元素,如果在頁面出現,就可以定位成功,否則拋出異常。

由於百度頁面有查詢輸入框定位成功,但是沒有後邊的密碼輸入框,所以程式碼拋出異常。

4.小結

 好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!