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