zoukankan      html  css  js  c++  java
  • 基于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
  • 相关阅读:
    Strom在本地运行调试出现的错误
    能否通过六面照片构建3D模型?比如人脸,全身的多角度照片,生成3D模型。?
    怎么识别自己的眼型?眼型图片参照
    用opencv检测人眼并定位瞳孔位置
    仿射变换
    二维图像的三角形变换算法解释
    Labeled Faces in the Wild 人脸识别数据集
    【图像处理】计算Haar特征个数
    人脸识别技术大总结(1):Face Detection & Alignment
    基于Policy Gradient实现CartPole
  • 原文地址:https://www.cnblogs.com/ychun/p/14282422.html
Copyright © 2011-2022 走看看