《手把手教你》系列技巧篇(七十一)-java+ selenium自動化測試-自定義類解決元素同步問題(詳解教程)
- 2022 年 3 月 8 日
- 筆記
- 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.小結
好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!