1.簡介
webdriver有三種判斷元素狀態的方法,分別是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的內容中已經簡單的介紹了,isSelected表示檢視元素是否被選中,一般用在勾選框中(多選或者單選),isDisplayed表示檢視什麼呢?
2.isDisplayed()原始碼
/** * Is this element displayed or not? This method avoids the problem of having to parse an * element's "style" attribute. * * @return Whether or not the element is displayed */ boolean isDisplayed();
從上邊的原始碼中的註釋可以看出isDisplay()方法是用來判斷頁面元素是否顯示在頁面。存在返回true,不存在返回false。
3.isDisplay()用法
List<WebElement> targetElement = driver.findElements(By.xpath("xpath_your_expected_element")); try { if(targetElement>=1) { if(targetElement.isDisplayed()) { System.out.println("Element is present"); }else { System.out.println("Element is found, but hidden on the page"); } }else { System.out.println("Element not found on the page"); } }catch (NoSuchElementException e) { System.out.println("Exception in finding the element:" + e.getMessage()); }
4.專案實戰
在webdriver自動化測試中,我們經常需要進行判斷的一個場景。例如,有些操作,我們做了之後,會觸發一些提醒,有些是正確的提醒,有些是紅色字型顯示的錯誤提示。我們自動化裡面如何去捕獲這些欄位,如果進行測試自動化判斷呢。這裡就要用到isDisplay()方法了。巨集哥這裡用度孃的首頁登入舉例,判斷“請填寫驗證碼”這個欄位是否出現。
4.1測試用例(思路)
1.訪問度娘首頁
2.定位首頁的登入按鈕,然後點選
3.彈出登入框定位簡訊登入按鈕,然後點選
4.定位手機號輸入框,然後輸入手機號
5.定位登入框的登入按鈕,然後點選
6.定位出現的“請填寫驗證碼”,然後判斷。
4.2程式碼設計
根據測試用例進行程式碼設計如下:
4.3參考程式碼
package lessons; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author: 北京-巨集哥 * * @公眾號:北京巨集哥 * * 《手把手教你》系列技巧篇(四十七)-java+ selenium自動化測試-判斷元素是否存在(詳解教程) * * 2021年11月19日 */ public class testDisplay { public static void main(String[] args) throws Exception { System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //訪問度娘首頁 driver.get("https://www.baidu.com/"); Thread.sleep(1000); //定位首頁的登入按鈕,然後點選登入 driver.findElement(By.xpath("//*[@id='u1']/a[1]")).click(); //彈出登入框定位簡訊登入按鈕,然後點選 driver.findElement(By.id("TANGRAM__PSP_11__changeSmsCodeItem")).click(); //定位手機號輸入框,然後輸入手機號 driver.findElement(By.id("TANGRAM__PSP_11__smsPhone")).sendKeys("13734294156"); //定位登入框的登入按鈕,然後點選 driver.findElement(By.id("TANGRAM__PSP_11__smsSubmit")).click(); Thread.sleep(2000); // 方法一 WebElement error_message = driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__smsError' and text()='請填寫驗證碼']")); if(error_message.isDisplayed()){ System.out.println("巨集哥!元素存在"); }else{ System.out.println("巨集哥!元素不存在"); } driver.quit(); } }
4.4執行程式碼
1.執行程式碼,右鍵Run AS->Java Appliance,控制檯輸出,如下圖所示:
2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:
5.方法二
第二個方法,就是先得到這個字串用String變數儲存下來,然後對兩個字串進行比較。其實這種方法前邊已經用過,只不過是巨集哥沒有指出,就像前邊文章中的toast元素,直接定位儲存在變數裡,然後將其的文字列印出,是不是啊各位小夥伴們或者童鞋們。
5.1程式碼設計
5.2參考程式碼
package lessons; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author: 北京-巨集哥 * * @公眾號:北京巨集哥 * * 《手把手教你》系列技巧篇(四十七)-java+ selenium自動化測試-判斷元素是否存在(詳解教程) * * 2021年11月19日 */ public class testDisplay { public static void main(String[] args) throws Exception { System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //訪問度娘首頁 driver.get("https://www.baidu.com/"); Thread.sleep(1000); //定位首頁的登入按鈕,然後點選登入 driver.findElement(By.xpath("//*[@id='u1']/a[1]")).click(); //彈出登入框定位簡訊登入按鈕,然後點選 driver.findElement(By.id("TANGRAM__PSP_11__changeSmsCodeItem")).click(); //定位手機號輸入框,然後輸入手機號 driver.findElement(By.id("TANGRAM__PSP_11__smsPhone")).sendKeys("13734294156"); //定位登入框的登入按鈕,然後點選 driver.findElement(By.id("TANGRAM__PSP_11__smsSubmit")).click(); Thread.sleep(2000); // 方法二 String error_message = driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__smsError' and text()='請填寫驗證碼']")).getText(); if(error_message.equals("請填寫驗證碼")){ System.out.println("巨集哥!元素存在"); }else{ System.out.println("巨集哥!元素不存在"); } driver.quit(); } }
5.3執行程式碼
1.執行程式碼,右鍵Run AS->Java Appliance,控制檯輸出,如下圖所示:
2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:
6.小結
1.isDisplayed()本身這個函式用於判斷某個元素是否存在頁面上(這裡的存在不是肉眼看到的存在,而是html程式碼的存在。某些情況元素的visibility為hidden或者display屬性為none,我們在頁面看不到但是實際是存在HTML頁面的一些元素)。
2.使用equals()和==,區別在於equals比較的是內容是否相等、==比較的是引用的變數地址是否相等。