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

《手把手教你》系列技巧篇(七十一)-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("https://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.小結

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