基於Java的Selenium


1、主要功能 

  • 測試系統功能 , 創建回歸測試檢驗軟件功能和用戶需求。
  • 測試與瀏覽器的兼容性 ,測試應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。

2、Selenium 支持的瀏覽器

 

 

 3、Selenium 的原理

 

4、Selenium2(WebDriver)的優點

  • Selenium 必須操作真實的瀏覽器,但是 WebDriver 可以使用 HtmlUnit 進行測試, 在不打開瀏覽器的情況下進行快速測試。 
  • WebDriver 基於瀏覽器的內部接口實現自動化測試,更接近用戶使用的真實情況。
  • WebDriver 提供了更簡潔的面向對象 API,提高了測試腳本的編寫效率。 
  • WebDriver 在使用過程中無須單獨啟動 Selenium Server。

5、Selenium 與 QTP 對比

 

 6、安裝瀏覽器

鏈接:https://pan.baidu.com/s/18HFsv0aGeuWOLtDcMKvyRQ
提取碼:zzhc 

安裝時,設置軟件不要自動升級

火狐瀏覽器,建議斷網安裝,安裝完成后

 

 

 

7、下載瀏覽器驅動插件

鏈接:https://pan.baidu.com/s/18HFsv0aGeuWOLtDcMKvyRQ
提取碼:zzhc

不用安裝

8、將selenium-java導入工程

 

1)

 

 2)

 

 3)

 

 4)

 

 5)

 

 

 

 

9、編寫測試代碼,控制瀏覽器

 

1)打開IE瀏覽器
System.setProperty("webdriver.ie.driver","C:\\...\\IEDriverServer.exe");
 WebDriver driver = new InternetExplorerDriver();
 2)Firefox瀏覽器, 需事先安裝對應驅動版本的瀏覽器
 System.setProperty("webdriver.gecko.driver","C:/…/geckodriver.exe");
 System.setProperty("webdriver.firefox.bin","E:/Mozilla Firefox/firefox.exe");
 WebDriver driver = new FirefoxDriver();
3)Google瀏覽器
 System.setProperty("webdriver.chrome.driver", "C:\\...\\chromedriver.exe");
 WebDriver driver = new ChromeDriver();
4)關閉瀏覽器
driver.close(); //關閉頁面
driver.quit(); // 關閉頁面 ///關閉相關進程

 

設置等待時間

 

 

打開網址

driver.get("http://localhost:1080/webtours"); 

//獲得瀏覽器網頁標題(字符串

driver.getTitle() )

 

10、識別頁面屬性

1)driver.findElement(By.屬性)

 

 

 比如:

// 用戶名        
driver.findElement(By.name("username")).sendKeys("zs");
// 密碼 driver.findElement(By.name("password")).sendKeys("123456");

driver.findElement(By.xpath("//img[@alt=\"Search Flights Button\"]")).click();

2)driver.findElements(By.屬性).get(下標)

driver.findElements(By.name("seatPref")).get(1).click();

11、操作頁面元素的方法

1) 文本框+密碼框+多行文本框

 

 2)單選按鈕+復選框

 3)下拉列表

 

 

 4) 鏈接+命令按鈕

click()  單擊

12、切換 frame 框架

 driver.switchTo().defaultContent(); 

  • 切回主文檔
  • 每次打開一個新網頁時,應使用此句

driver.switchTo().frame(1 或"body");

  • 表示進入第 2 個 frame 或名為 body 的 frame
  • 如果 frame 中有 frameset,則需要層層切換

查看元素的頁面結構

 

13、添加檢查點

 

 案例

1)登錄

 

 

2)登陸成功

 

 

 

3)預訂航班

 

 

4)選擇班次

 

 

5)用戶信息確認

 

 

 6)預訂成功

 

 源碼展示

package com01;

import java.text.ParseException;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

public class TestWebtours02 {

    /**
     * 訂票程序,添加檢查點
     * ***/
    public static void main(String[] args) throws InterruptedException, ParseException {
        // TODO Auto-generated method stub

        // 打開瀏覽器
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\blue\\Desktop\\driver\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        // driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Thread.sleep(3000);
        // 打開網址
        driver.get("http://localhost:1080/webtours");
        // 獲取當前網頁標題
        System.out.println(driver.getTitle());
        //判斷是否成功進入頁面
        testSuccess(driver,"body","info","是否成功進入頁面:","Welcome to the Web Tours site.");
        // 進入frame navbar
        driver.switchTo().defaultContent();
        driver.switchTo().frame("body");
        driver.switchTo().frame("navbar");
//        // 識別元素
//        // 用戶名
        driver.findElement(By.name("username")).sendKeys("zs");
//        // 密碼
        driver.findElement(By.name("password")).sendKeys("123456");
//        // 點擊登錄
        driver.findElement(By.name("login")).click();
        Thread.sleep(3000);
        //是否登錄成功
        testSuccess(driver,"body","info","是否登錄成功:","Welcome");
//        // 切換frame 進入購票
        driver.switchTo().defaultContent();
        driver.switchTo().frame("body");
        driver.switchTo().frame("navbar");
//        // 點擊進入購票
        driver.findElement(By.xpath("//img[@alt=\"Search Flights Button\"]")).click();
        Thread.sleep(3000);
        testSuccess(driver,"body","info","是否進入購票界面::","Departure City :");
//        // 切換frame 進入購票
        driver.switchTo().defaultContent();
        driver.switchTo().frame("body");
        driver.switchTo().frame("info");
//        //出發地
        new Select(driver.findElement(By.name("depart"))).selectByVisibleText("Paris");
    
//        //目的地
        new Select(driver.findElement(By.name("arrive"))).selectByVisibleText("London");
    
//        //出發時間
        driver.findElement(By.name("departDate")).sendKeys(MyUtils.getNextDay(1));
//        //返回時間
        driver.findElement(By.name("returnDate")).sendKeys(MyUtils.getNextDay(2));
//        //乘客數 
        driver.findElement(By.name("numPassengers")).clear();
        driver.findElement(By.name("numPassengers")).sendKeys("1");
//        //是否訂飯程機票 
        driver.findElement(By.name("roundtrip")).click();
//        //靠邊 
        driver.findElements(By.name("seatPref")).get(1).click();
//        //挑選座位
        driver.findElements(By.name("seatType")).get(1).click();
//        //點擊確定 
        driver.findElement(By.name("findFlights")).click();
        Thread.sleep(3000);
        //判斷訂單是否提交  
        testSuccess(driver,"body","info","判斷訂單是否提交 :","Flight departing from");
//        //選取航班  outboundFlight   returnFlight
        driver.findElements(By.name("outboundFlight")).get(1).click();
        driver.findElements(By.name("returnFlight")).get(1).click();
//        //點擊確定 reserveFlights
        driver.findElement(By.name("reserveFlights")).click();
        Thread.sleep(3000);        
        //判斷是否進入確認個人信息 
        testSuccess(driver,"body","info","判斷是否進入確認個人信息:","Payment Details");
//        //點擊確定buyFlights
        driver.findElement(By.name("buyFlights")).click();
        Thread.sleep(3000);
        //訂票成功,展示訂單詳情     Thank you for booking through Web Tours
        testSuccess(driver,"body","info","訂票成功,展示訂單詳情:","Thank you for booking through Web Tours.");
//        定另外一張 
        driver.findElement(By.name("Book Another")).click();
        Thread.sleep(3000);
        //再訂一張
        testSuccess(driver,"body","info","再訂一張:","Departure City :");
        
//        //關閉窗口
        driver.close();
        driver.quit();
            
    }

    
    public  static void testSuccess(WebDriver driver,String location_1,String location_2,String message,String info) {
        driver.switchTo().defaultContent();
        driver.switchTo().frame(location_1);
        driver.switchTo().frame(location_2);
        
        //判斷是否加載網頁成功
        Boolean res = driver.findElement(By.tagName("body")).getText().contains(info);
        System.out.println(message+res);
        
    } 
}

元素頁面結構

 

 

 

14、參數化

1) Java 讀文件

 

 2)輸入數據參數化

 

 例如

package com01;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.Select;

public class TestWebtours03 {

    /**
     * 訂票程序,讀取配置文件進行下單
     * @throws IOException 
     * ***/
    public static void main(String[] args) throws InterruptedException, ParseException, IOException {
        // 打開瀏覽器
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\blue\\Desktop\\driver\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        // driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Thread.sleep(3000);
        // 打開網址
        driver.get("http://localhost:1080/webtours");
        // 獲取當前網頁標題
        System.out.println(driver.getTitle());
        // 進入frame navbar
        driver.switchTo().defaultContent();
        driver.switchTo().frame("body");
        driver.switchTo().frame("navbar");
        // 識別元素
        // 用戶名
        driver.findElement(By.name("username")).sendKeys("zs");
        // 密碼
        driver.findElement(By.name("password")).sendKeys("123456");
        // 點擊登錄
        driver.findElement(By.name("login")).click();
        Thread.sleep(3000);
        // 切換frame 進入購票
        driver.switchTo().defaultContent();
        driver.switchTo().frame("body");
        driver.switchTo().frame("navbar");
        // 點擊進入購票
        driver.findElement(By.xpath("//img[@alt=\"Search Flights Button\"]")).click();
        Thread.sleep(3000);
//        -------------------------------------------------
       BufferedReader br = new BufferedReader(new FileReader("d:/flights.txt")); String line = null; while((line=br.readLine())!=null) {
            String str[] = line.split("\t");
            String depart=str[0];
            String arrive=str[1];
            // 切換frame 進入購票
            driver.switchTo().defaultContent();
            driver.switchTo().frame("body");
            driver.switchTo().frame("info");
            
            //出發地
            new Select(driver.findElement(By.name("depart"))).selectByVisibleText(depart);
            //目的地
            new Select(driver.findElement(By.name("arrive"))).selectByVisibleText(arrive);    
            //出發時間
            driver.findElement(By.name("departDate")).sendKeys(MyUtils.getNextDay(1));
            //返回時間
            driver.findElement(By.name("returnDate")).sendKeys(MyUtils.getNextDay(2));
            //乘客數 
            driver.findElement(By.name("numPassengers")).clear();
            driver.findElement(By.name("numPassengers")).sendKeys("1");
            //是否訂飯程機票 
            driver.findElement(By.name("roundtrip")).click();
            //靠邊 
            driver.findElements(By.name("seatPref")).get(1).click();
            //挑選座位
            driver.findElements(By.name("seatType")).get(1).click();
            //點擊確定 
            driver.findElement(By.name("findFlights")).click();
            Thread.sleep(3000);
            //選取航班  outboundFlight   returnFlight
            driver.findElements(By.name("outboundFlight")).get(1).click();
            driver.findElements(By.name("returnFlight")).get(1).click();
            //點擊確定 reserveFlights
            driver.findElement(By.name("reserveFlights")).click();
            Thread.sleep(3000);        
            //點擊確定buyFlights
            driver.findElement(By.name("buyFlights")).click();
            Thread.sleep(3000);
            //定另外一張 
            driver.findElement(By.name("Book Another")).click();
            Thread.sleep(3000);
            
        }
        
        
//        -------------------------------------------------
        
        //關閉窗口
        driver.close();
        driver.quit();
            
    }

}

flights.txt文件

Paris    London
Denver    Los Angeles
Portland    San Francisco

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM