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