基于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("	");
            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
原文地址:https://www.cnblogs.com/ychun/p/14282422.html