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