1. 程式人生 > >章節十二、2-如何封裝一個查詢單個或多個元素的通用方法

章節十二、2-如何封裝一個查詢單個或多個元素的通用方法

從這一節開始,不講基本的頁面操作了,開始為搭建框架做準備,例如如何封裝查詢元素的通用方法,這個方法封裝好後其它類中都可以使用封裝好的這個方法來查詢元素,提高程式碼的複用性,方便後期維護。

 

一、首先我們需要封裝一個能夠定位單個或多個元素的類

 1 package usefulmethods;
 2 
 3 import java.util.List;
 4 
 5 import org.openqa.selenium.By;
 6 import org.openqa.selenium.WebDriver;
 7 import org.openqa.selenium.WebElement;
 8 
 9 public class GenericMethods {
10     
11     WebDriver driver;
12 //    建立一個構成方法,用於初始化物件
13     public GenericMethods(WebDriver driver) {
14         this.driver = driver;
15     }
16     
17 //    查詢單個元素
18     public WebElement getElement(String type,String locator) {
19         if(type.equals("id")) {
20             System.out.println("用id查詢元素:"+locator);
21             return this.driver.findElement(By.id(locator));
22         }else if(type.equals("xpath")) {
23             System.out.println("用xpath查詢元素:"+locator);
24             return this.driver.findElement(By.xpath(locator));
25         }else if(type.equals("name")) {
26             System.out.println("用name查詢元素:"+locator);
27             return this.driver.findElement(By.name(locator));
28         }else if(type.equals("cssSelector")) {
29             System.out.println("用cssSelector查詢元素:"+locator);
30             return this.driver.findElement(By.cssSelector(locator));
31         }else if(type.equals("cssSelector")) {
32             System.out.println("用cssSelector查詢元素:"+locator);
33             return this.driver.findElement(By.cssSelector(locator));
34         }else if(type.equals("linkText")) {
35             System.out.println("用linkText查詢元素:"+locator);
36             return this.driver.findElement(By.linkText(locator));
37         }else if(type.equals("partialLinkText")) {
38             System.out.println("用partialLinkText查詢元素:"+locator);
39             return this.driver.findElement(By.partialLinkText(locator));
40         }else if(type.equals("tagName")) {
41             System.out.println("用tagName查詢元素:"+locator);
42             return this.driver.findElement(By.tagName(locator));
43         }else {
44             System.out.println("定位的路徑不支援");
45             return null;
46         }
47     }
48     
49 //    查詢多個元素
50     public List<WebElement> getElementList(String type,String locator) {
51         if(type.equals("id")) {
52             System.out.println("用id查詢元素:"+locator);
53             return this.driver.findElements(By.id(locator));
54         }else if(type.equals("xpath")) {
55             System.out.println("用xpath查詢元素:"+locator);
56             return this.driver.findElements(By.xpath(locator));
57         }else if(type.equals("name")) {
58             System.out.println("用name查詢元素:"+locator);
59             return this.driver.findElements(By.name(locator));
60         }else if(type.equals("cssSelector")) {
61             System.out.println("用cssSelector查詢元素:"+locator);
62             return this.driver.findElements(By.cssSelector(locator));
63         }else if(type.equals("cssSelector")) {
64             System.out.println("用cssSelector查詢元素:"+locator);
65             return this.driver.findElements(By.cssSelector(locator));
66         }else if(type.equals("linkText")) {
67             System.out.println("用linkText查詢元素:"+locator);
68             return this.driver.findElements(By.linkText(locator));
69         }else if(type.equals("partialLinkText")) {
70             System.out.println("用partialLinkText查詢元素:"+locator);
71             return this.driver.findElements(By.partialLinkText(locator));
72         }else if(type.equals("tagName")) {
73             System.out.println("用tagName查詢元素:"+locator);
74             return this.driver.findElements(By.tagName(locator));
75         }else {
76             System.out.println("定位的路徑不支援");
77             return null;
78         }    
79     }
80 }

 

二、對圖中的單個輸入框進行操作,輸入“測試”(圖中的頁面是本地的網頁,小夥伴們如果需要可以加入555191854下載或者找其它的網站進行練習)

package usefulmethods;

import java.util.concurrent.TimeUnit;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

class GenericMethodsDemo {
    private WebDriver driver;
    private String url;
//    建立一個GenericMethods類的引用
    private GenericMethods gm;

    @BeforeEach
    public void setUp() throws Exception {
        driver = new ChromeDriver();
//        例項化查詢元素的方法
        gm = new GenericMethods(driver);
        url = "C:\\\\Users\\\\acer\\\\eclipse-workspace\\\\SeleniumPractise\\\\PracticePage.html";
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
    }

    @Test
    public void test() {
        driver.get(url);
//        通過呼叫GenericMethods類中的getElement方法,傳入查詢元素的方式和路徑
        WebElement el = gm.getElement("cssSelector", "#name");
        el.sendKeys("測試");
    }
    
    @AfterEach
    public void tearDown() throws Exception {
        Thread.sleep(2000);
        driver.quit();
    }
}

執行結果為:

 

三、定位多個輸入框

 1 package usefulmethods;
 2 
 3 import java.util.List;
 4 import java.util.concurrent.TimeUnit;
 5 
 6 import org.junit.jupiter.api.AfterEach;
 7 import org.junit.jupiter.api.BeforeEach;
 8 import org.junit.jupiter.api.Test;
 9 import org.openqa.selenium.WebDriver;
10 import org.openqa.selenium.WebElement;
11 import org.openqa.selenium.chrome.ChromeDriver;
12 
13 class GenericMethodsDemoList {
14     private WebDriver driver;
15     private String url;
16 //    建立一個GenericMethods類的引用
17     private GenericMethods gm;
18 
19     @BeforeEach
20     public void setUp() throws Exception {
21         driver = new ChromeDriver();
22 //        例項化查詢元素的方法
23         gm = new GenericMethods(driver);
24         url = "C:\\\\Users\\\\acer\\\\eclipse-workspace\\\\SeleniumPractise\\\\PracticePage.html";
25         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
26         driver.manage().window().maximize();
27     }
28 
29     @Test
30     public void test() {
31         driver.get(url);
32 //        通過呼叫GenericMethods類中的getElementList方法,傳入查詢元素的方式和路徑
33         List<WebElement> el = gm.getElementList("xpath", "//input[@type='text']");
34         int size = el.size();
35         System.out.println("獲取到的元素長度為:"+size);
36     }
37     
38     @AfterEach
39     public void tearDown() throws Exception {
40         Thread.sleep(2000);
41         driver.quit();
42     }
43 }

執行結果:

 

 

如果有不明白的小夥伴可以加群“555191854”問我,群裡都是軟體行業的小夥伴可以相互一起學習討