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文档。

 

  1. 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等,我们主要用来查找和定位元素。

  1. 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。

  1. 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>

以上均为自己学习整理,如有错误还请大家指出!!!

posted @ 2015-09-14 10:52  snolia  阅读(480)  评论(1编辑  收藏  举报