基于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