《手把手教你》系列技巧篇(四十七)-java+ selenium自動化測試-判斷元素是否顯示(詳解教程)

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("//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("//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比較的是內容是否相等、==比較的是引用的變數地址是否相等。