• Selenium2入门(二)WebDriver


    前文Selenium2入门(一)说到Selenium是Web 应用程序测试框架,那么如果对一个简单的web应用需求:打开浏览器,登录百度首页,输入“欧洲杯”关键词,点击搜索按钮 这一系列操作,能否用Selenium进行执行呢?可以,下面介绍的WebDriver就是可以完成这项任务的方法之一:

    Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具,它提供了一套友好的API,与Selenium 1(Selenium-RC)相比,Selenium 2的API更容易理解和使用,其可读性和可维护性也大大提高。Webdriver完全就是一套类库,不依赖于任何测试框架,除了必要的浏览器驱动,不需要启动其他进程或安装其他程序,也不必像Selenium 1那样需要先启动服务。

    另外,二者所采用的技术方案也不同。Selenium 1是在浏览器中运行JavaScript来进行测试,而Selenium 2则是通过原生浏览器支持或者浏览器扩展直接控制浏览器。

    Selenium 2针对各个浏览器而开发的,它取代了嵌入到被测Web应用中的 JavaScript。与浏览器的紧密集成,支持创建更高级的测试,避免了JavaScript安全模型的限制。除了来自浏览器厂商的支持,Selenium 2 还利用操作系统级的调用模拟用户输入。WebDriver 支持

    • Firefox (FirefoxDriver)

    • IE(InternetExplorerDriver)

    • Opera(OperaDriver)

    • Chrome (ChromeDriver)

    • 以及safari(SafariDriver)

    还支持Android(Selendroid)和iPhone(Appium)的移动应用测试。此外,Selenium 2还包括基于HtmlUnit的无界面实现,称为HtmlUnitDriver(在后面文章中会介绍),和基于webkit的无界面浏览器phantomjs。Selenium 2 API可以通过

    • Java

    • C#

    • PHP

    • Python

    • Perl

    • Ruby

    等编程语言访问,支持开发人员使用他们常用的编程语言来创建测试。

    废话不多说,使用WebDrive进行上述功能的测试,首先是开发环境的搭建:

    一、开发环境:

      1、JDK

      2、MyEclipse

      3、Selenium:selenium-java-2.53.1.zip,下载地址:http://code.google.com/p/selenium/downloads/list

    解压selenium-java包,这个包里面包含四部分,如下图:

    二、创建Java Project:

      1、把上面解压出来的jar文件(包括libs和selenium-java-2.53.1.jar)拷到新建的project目录下,目录结构如下图:

    2、添加build path,项目目录右键-->Build Path--> config build path-->Java Build Path-->Libraries-->Add JARs

      把libs文件夹下的jar包全部添加上,再添加selenium-java-2.39.0和selenium-java-2.39.0-srcs

    3、添加完之后目录结构如下图,多了Referenced Libraries,这里就是上面那一步添加进去的jar包:

    4、关联selenium源码:

    至此,环境工作准备就绪。

    三、编写测试类

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    
    public class SeleniumTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		//如果火狐浏览器没有默认安装在C盘,需要制定其路径
            //System.setProperty("webdriver.firefox.bin", "D:/Program Files/Mozilla firefox/firefox.exe"); 
            WebDriver driver = new FirefoxDriver();
            driver.get("http://www.baidu.com/");
            
            driver.manage().window().maximize();
            
            WebElement txtbox = driver.findElement(By.name("wd"));
            txtbox.sendKeys("欧洲杯");
            
            WebElement btn = driver.findElement(By.id("su"));
            btn.click();
            //为便于查看测试效果,可把关闭浏览器操作注释
            //driver.close();
    
    	}
    
    }
    

    通过这种方式,可以查看到程序会自动打开FF,自动输入欧洲杯然后出现查询结果。

    观察程序执行过程,会发现无论是打开浏览器,还是当我们模拟填入关键词,并进行点击搜索时,页面加载是需要一定时间的,而webdriver只能找到页面已有的元素,所以有些时候需要加入一个等待的时间,让页面元素完全加载出来,才能通过findelement方法找到你想要的元素。因此,最好能够在click语句后,加入一条等待语句,程序编程如下所示:

     1 import org.openqa.selenium.By;
     2 import org.openqa.selenium.WebDriver;
     3 import org.openqa.selenium.WebElement;
     4 import org.openqa.selenium.firefox.FirefoxDriver;
     5 
     6 
     7 public class SeleniumWebDriverSimpleDemo {
     8 
     9     /**
    10      * @param args
    11      */
    12     public static void main(String[] args) {
    13         // TODO Auto-generated method stub
    14         //如果火狐浏览器没有默认安装在C盘,需要制定其路径
    15         //System.setProperty("webdriver.firefox.bin", "D:/Program Files/Mozilla firefox/firefox.exe"); 
    16         WebDriver driver = new FirefoxDriver();
    17         driver.get("http://www.baidu.com/");
    18         
    19         driver.manage().window().maximize();
    20         
    21         WebElement txtbox = driver.findElement(By.name("wd"));
    22         txtbox.sendKeys("欧洲杯");
    23         
    24         WebElement btn = driver.findElement(By.id("su"));
    25         btn.click();
    26         try {
    27 
    28             Thread.sleep(3000);
    29 
    30         } catch (InterruptedException e) {
    31 
    32             // TODO Auto-generated catch block
    33 
    34             e.printStackTrace();
    35 
    36         }
    37 
    38      
    39         //为便于查看测试效果,可把关闭浏览器操作注释
    40         //driver.close();
    41 
    42     }
    43 
    44 }

    这个sleep()并不是WebDriver中自带的方法,而是java中休眠线程的一个方法,这里不是很推荐。WebDriver自带了一个智能等待的方法。

    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    

    Arg0:等待的时间长度,int 类型 ;

    Arg1:等待时间的单位 TimeUnit.SECONDS 一般用秒作为单位。

  • 相关阅读:
    自定义类似smarty模板
    PHP函数相关知识点
    cookie的使用和设置
    进程通过内核缓存区请求设备I/O的一些事情
    多线程模型和问题
    C10K问题和多进程模型
    node.js----一个httpserver提交和解析get参数的例子
    nodejs解析url参数的三种方法
    node.js http模块和fs模块上机实验·
    c++中的srand()和rand() 转载 自:http://blog.sina.com.cn/s/blog_624c2c4001012f67.html
  • 原文地址:https://www.cnblogs.com/snipergodson/p/5662837.html
Copyright © 2020-2023  润新知