zoukankan      html  css  js  c++  java
  • selenium从入门到应用

    本系列所有代码 https://github.com/zhangting85/simpleWebtest

    本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下selenium的EventFiringWebDriver和监听器的使用,并提供全部代码。

    为什么要用EventFiringWebDriver?

    因为我可以用监听器监听他的所有操作。

    监听所有操作有什么用?

    1,我可以用log4j记录我的driver的所有事件。注意,我只要对每种事件写一行代码,一共撑死了10来行代码。以后就可以自动监听,自动执行这些代码,不用再写一大堆log.info,也不用面对一个没log的测试用例。开发人员转的自动化测试人员们请不要再对selenium提供的每个操作做二次封装,仅仅为了往里面塞一段log了。webdriver提供的操作数量远远多余事件数量。等你封装好,你累都累死了,读你程序的人也累死了。

    2,我可以对事件截图。不但能在出错时截图,我还可以回溯到错误前一个步骤时截图。甚至对每个步骤截图。而不必在测试用例里写一大堆screenshot的调用。

    3,我可以隐式等待。对五六个主要事件进行隐式等待。五六行的代码量换取你在测试用例里一次一次的调用等待。你也不需要再因为为了加个等待而对selenium提供的每个方法都做二次封装。(开发转的自动化测试人员特别爱干这事。)

    4,其他,你可以发挥想象力挖掘更多用法。

    最大优点:代码量非常小。

    普通我们创建一个WebDriver是:

     WebDriver driver = new FirefoxDriver();

    现在只需要改成这样创建一个EventFiringWebDriver并注册的方法:

     WebDriver driver = new EventFiringWebDriver(new FirefoxDriver()).register(new LogEventListener());

    另外我们要创建一个监听器。就是上面代码里写的LogEventListener类。你可以随意命名成其他的。

    这里我添加了一个自动记录页面跳转、输入文字、点击的log功能。

    添加了自动在findBy前隐式等待3秒的功能。(因为前端实现技术的问题,有的地方你还是要在test case里加等待。)

     1 /**
     2  * 用一个类扩展web driver自带的事件监听器,可以实现许多有趣的功能。
     3  * 比如自动log
     4  * a customer event listener
     5  */
     6 public class LogEventListener implements WebDriverEventListener {
     7     private Log log = LogFactory.getLog(this.getClass());
     8      
     9         private By lastFindBy;
    10         private String originalValue;
    11      
    12         public void beforeNavigateTo(String url, WebDriver selenium){
    13             log.info("WebDriver navigating to:'"+url+"'");
    14         }
    15      
    16         public void beforeChangeValueOf(WebElement element, WebDriver selenium){
    17             originalValue = element.getAttribute("value");
    18         }
    19      
    20         public void afterChangeValueOf(WebElement element, WebDriver selenium){
    21             log.info("WebDriver changing value in element found "+lastFindBy+" from '"+originalValue+"' to '"+element.getAttribute("value")+"'");
    22         }
    23      
    24         public void beforeFindBy(By by, WebElement element, WebDriver selenium){
    25             lastFindBy = by;
    26             //找东西前等三秒wait 3 second for every find by
    27             DriverManager.driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    28         }
    29      
    30         public void onException(Throwable error, WebDriver selenium){
    31             if (error.getClass().equals(NoSuchElementException.class)){
    32                 log.error("WebDriver error: Element not found "+lastFindBy);
    33             } else {
    34                 log.error("WebDriver error:", error);
    35             }
    36         }
    37      
    38         public void beforeNavigateBack(WebDriver selenium){}
    39         public void beforeNavigateForward(WebDriver selenium){}
    40         public void beforeClickOn(WebElement element, WebDriver selenium){}
    41         public void beforeScript(String script, WebDriver selenium){}
    42         public void afterClickOn(WebElement element, WebDriver selenium){
    43             String locator=element.toString().split("-> ")[1];
    44             log.info("WebDriver clicking on:'"+locator.substring(0, locator.length()-1)+"'");
    45         }
    46         public void afterFindBy(By by, WebElement element, WebDriver selenium){}
    47         public void afterNavigateBack(WebDriver selenium){}
    48         public void afterNavigateForward(WebDriver selenium){}
    49         public void afterNavigateTo(String url, WebDriver selenium){}
    50         public void afterScript(String script, WebDriver selenium){}
    51      
    52 
    53     
    54 }
  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/sdet/p/3648993.html
Copyright © 2011-2022 走看看