Selenium2自动化测试学习整理
Selenium2自动化测试学习
Selenium 2:
Selenium是用于测试 Web 应用程序用户界面 (UI) 的常用框架,它提供了一系列测试函数,用于支持Web自动化测试。这些函数非常灵活,它们能够通过多种方式定位界面元素,并可以将预期结果与系统实际表现进行比较。作为一款强大的测试工具,Selenium具有以下几个特点:
(1) 可对多种浏览器进行测试,如IE、Firefox、Safari、Chrome、Android手机浏览器等;
(2) 支持多种语言,如Java、C#、Python、Ruby、PHP等;
(3) 跨平台,如Windows、Lunix、iOS、Android等;
(4) 开源免费。
Selenium 2是由Selenium1和WebDriver合并成的,具有来自WebDriver的清晰面向对象API,并能以最佳方式与浏览器进行交互。
TestNG:
TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试,这个是TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。使用TestNG后,测试信息尤其是测试数据不再写死在测试代码中,修改测试数据时不需要在代码中修改了。
Jxl:
Jxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的操作Excel文档。
- Selenium2学习整理:
(1) 要用到的包有3个:(版本可更换)
selenium-java-2.41.0.jar
selenium-java-2.41.0-srcs.jar
selenium-server-standalone-2.41.0.jar
(2) 学习内容概述:
² 安装eclipse(也可以安装其他的集成环境);
² 导入Selenium2要用到的包;
² 选择浏览器,编写代码打开一个网站:
如打开一个IE浏览器,代码如下:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class OpenIe {
private WebDriver driver;
public void openIe() {
driver = new InternetExplorerDriver(); //创建一个InternetExplorerDriver
driver.get("http://www.baidu.com"); //打开百度首页
driver.quit(); //关闭浏览器
}
}
² 学习查找条件对象By:
可以按HTML元素的ID属性进行查找,也可以通过name,linktext,xpath等来查找,如在页面查找百度搜索文本框,其HTML代码如下:
<input id="kw1" type="text" autocomplete="off" style="width:489px;" maxlength="100" name="wd">
通过ID属性查找该文本框,主要代码如下:
driver.findElement(By.id("kw1")); //通过id查找文本框
² 学习操作页面元素WebElement:
先通过By对象定位到对应的页面元素,然后调用这个页面元素的相关方法来进行操作,如在百度首页上,向搜索文本框输入“自动化测试”,然后点击“百度一下”按钮,主要代码如下:
WebElement wd = driver.findElement(By.id("kw1"));//通过id查找文本框
wd.sendKeys("自动化测试"); //在文本框中输入”自动化测试“
driver.findElement(By.id("su1")).click(); //点击"百度一下"按钮
² 学习获取页面及页面元素的内容:
打开一个页面时,可以获取该页面的标题,网址,文本值等,如打开百度首页后,要获取页面的标题,可以用getTitle()方法,主要代码如下:
driver.getTitle();
² 学习弹出对话框的处理:
操作页面时,如果弹出一个对话框,要操作对话框的话,首先要将driver切换到该对话框,然后可以获取对话框显示的文本,点击对话框的确认,取消按钮,主要代码如下:
driver.switchTo().alert().getText(); //获取弹出窗口文本
driver.switchTo().alert().accept(); //点击弹出窗口的”确定“按钮
driver.switchTo().alert().dismiss(); //点击弹出窗口的”取消“按钮
² 学习浏览器多窗口处理:
在进行测试时,可能会弹出一些子窗口,需要在多个窗口之间进行切换操作。要在多个窗口之间进行切换,首先必须获取每个窗口的唯一标识符(句柄),通过getWindowHandles()可以获取所有打开窗口的标识符,并将其以集合的形式返回。主要代码如下:
String windowName = driver.getWindowHandle(); //获取当前窗口的句柄
Set<String> handles = driver.getWindowHandles(); //获取所有窗口的句柄
driver.switchTo().window(windowName); //切换窗口
² 学习设置管理:
可以通过Options对象对测试进行设置,设置内容包括Cookie、超时时间和浏览器窗口。
² 学习为测试操作添加事件等。
(3) 辅助工具:
FireBug:是Firefox下的一个插件,能够调试所有网站语言,如Html,Css等,我们主要用来查找和定位元素。
- TestNG学习整理:
(1) 要用到的包有1个:testng.jar
(2) 学习内容概述:
² 配置TestNG环境变量;
² 在eclipse中导入testng.jar;
² 学习TestNG的API;
² 编写测试的业务逻辑并在代码中插入TestNG annotation;
在Eclipse中创建一个TestNG的类,如下图所示:
下面是一个简单的示例,代码如下:
public class TestNgTest {
@BeforeTest // 标记指定所有测试进行前执行此方法
public void beforeAllTest(){
System.out.println("Before All Test");
}
@DataProvider(name = "test1") //提供测试数据
public Object[][] dp() {
return new Object[][] {
new Object[] { 1, "a" , 1, 1},
new Object[] { 2, "b" , 1, 1},
};
}
@Test(dataProvider = "test1") //测试方法
Public void verifyData1(Integer n1, String n2, Integer n3, Integer n4) {
System.out.println(n1 + " " + n2 + " " + n3 + " " + n4);
}
@AfterTest // 标记指定所有测试进行后执行此方法
public void afterAllTest(){
System.out.println("After All Test");
}
}
² 将测试信息添加到testng.xml文件或者build.xml中;
下面是一个简单的testng.xml代码示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<classes>
<class name="TestNgTest">
</class>
</classes>
</test>
</suite>
²
运行TestNG:可以通过类,方法,分组,包,suite运行TestNG。
- Jxl学习整理:
(1) 要用到的包有一个:jxl.jar
(2) 学习内容概述:
² 在eclipse中导入jxl.jar;
² 学习Jxl的API;
² 学习创建Excel、修改Excel、读取Excel。
创建Excel主要代码如下:
public void creatExcel() {
WritableWorkbook book = Workbook.createWorkbook(new File("F://bb.xls")); //创建一个Excel文件
WritableSheet sheet = book.createSheet( "sheet1" , 0);//创建一个工作表
book.write(); //写入数据
book.close(); //关闭文件
}
修改Excel主要代码如下:
public void modifyExcel() {
Workbook wb = Workbook.getWorkbook(new File("F://bb.xls")); //获得Excel文件
WritableWorkbook book = Workbook.createWorkbook(new File("F://bb.xls"), wb); //打开一个文件的副本,并将指定数据写回到原文件
WritableSheet sheet = book.createSheet("第一页", 0); //添加一个工作表
WritableSheet sheet1 = book.getSheet(1); //获取一个已经存在的工作表
sheet.addCell(new Label(1, 1, "第一页的测试数据")); //添加一个单元格
book.write();
book.close();
}
读取Excel主要代码如下:
public void readExcel() {
Workbook book = Workbook.getWorkbook(new File("F://测试.xls")); //获得第一个工作表对象
Sheet sheet = book.getSheet(0); //得到第一列第一行的单元格
Cell cell1 = sheet.getCell(0, 0);
String result = cell1.getContents();
System.out.println(result);
book.close();
}
实例:
(1) LoadDriver.java(初始化driver)
import java.io.File;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class LoadDriver {
public static WebDriver driver;
public static WebDriver openDriver() {
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
driver = new InternetExplorerDriver(ieCapabilities);
return driver;
}
}
(2) LoginTest.java(系统登陆测试)
import java.io.File;
import java.io.IOException;
import jxl.JXLException;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import TestNgTest.IsTextPresent;
public class LoginTest {
private WebDriver driver;
private Workbook workbook, rk;
private WritableWorkbook wk;
private Sheet login_rs;
private WritableSheet login_ws;
private static int login_row = 1;
@BeforeClass
public void loadDriver() throws Exception {
driver = LoadDriver.openDriver();
}
/*
* 在excel中读取已经准备好的测试数据,并把得到的测试结果写入excel中
*/
@BeforeClass
public void loadExcel() {
try {
//读取测试数据
rk = Workbook.getWorkbook(new File("src/SJSystem/data/inTestData.xls")); //获取excel文件
login_rs = rk.getSheet(0); //获得第一个工作表对象
//写入测试结果
String file = "src/SJSystem/data/outTestCase.xls";
workbook = Workbook.getWorkbook(new File(file));
wk = Workbook.createWorkbook(new File(file), workbook); //创建excel文件
login_ws = wk.getSheet(0); //获取名为”登陆“的工作表
}catch(IOException e) {
e.printStackTrace();
}catch(JXLException e) {
e.printStackTrace();
}
}
/*
* 传递数据
*/
@DataProvider(name = "login")
public Object[][] login() {
int colnum = login_rs.getColumns();
int row = login_rs.getRows();
Object[][] obj = new Object[row-1][colnum];
for(int i=1; i<row; i++) {
for(int j=0; j<colnum; j++) {
obj[i-1][j] = login_rs.getCell(j, i).getContents();
}
}
return obj;
}
/*
* 打开网页
*/
@Test
public void a1OpenIe() {
int col = 3;
String url = "http://195.2.199.202:8080/sjglxt/login/login.jsp";
driver.get(url);
try {
login_ws.addCell(new Label(col++, login_row++, "判断是否成功打开登录页面:" + IsTextPresent.isContentAppeared(driver, "技术支持:成都麦柯系统集成有限公司")));//通过对比页面存在的内容来判断是否成功打开了页面
}catch(RowsExceededException e) {
e.getStackTrace();
}catch(WriteException e) {
e.getStackTrace();
}
}
/*
* 登陆系统
*/
@Test(dataProvider = "login")
public void a2login(String uname, String pword) {
int col = 3;
WebElement username = driver.findElement(By.id("username"));
WebElement password = driver.findElement(By.id("password"));
username.clear();
password.clear();
username.sendKeys(uname);
password.sendKeys(pword);
driver.findElement(By.cssSelector("#btn_login > img")).click();
try {
login_ws.addCell(new Label(col++, login_row++, "判断是否成功登陆:" + IsTextPresent.isContentAppeared(driver, "当前用户")));
}catch(JXLException e) {
e.getStackTrace();
}
driver.switchTo().defaultContent();
}
@AfterClass
public void quit() {
try {
wk.write(); //写入数据
wk.close(); //关闭文件
}catch(IOException e) {
e.getStackTrace();
}catch(WriteException e) {
e.getStackTrace();
}
}
}
inTestData.xls
outTestData.xls
(3) Testing.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<classes>
<class name="SJSystem.LoginTest">
</class>
</classes>
</test>
</suite>
以上均为自己学习整理,如有错误还请大家指出!!!