public class SeleniumDemo {

    /**
* @param args
*/
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
Navigation navigate = driver.navigate(); EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
//注册事件
eventDriver.register(new MyWebDriverListener()); //浏览特定网页
eventDriver.navigate().to("http://www.jd.com/"); //点击按钮
WebElement loginLink = eventDriver.findElement(By.partialLinkText("登"));
loginLink.click(); //在搜索框输入内容
eventDriver.findElement(By.id("kw")).sendKeys("诛仙剑阵"); //故意写一个错误操作, 使selenium产生异常
try{
eventDriver.findElement(By.id("番天印"));
}catch(Exception e){
e.printStackTrace();
}
}
}

下面是我自己写的监听器  MyWebDriverListener

public class MyWebDriverListener implements WebDriverEventListener{

    @Override
public void onException(Throwable throwable, WebDriver driver) {
SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String dateString = format.format(new Date()); File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); try{
File screenShot = new File("D:\\"+dateString+".png");
FileUtils.copyFile(srcFile, screenShot);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("发生异变,原因是: "+throwable.getMessage());
System.out.println("截图保存在: "+"D:\\"+dateString+".png"); } @Override
public void afterNavigateTo(String url, WebDriver driver) {
System.out.println("afterNavigateTo: "+url);
System.out.println("afterNavigateTo by driver: "+driver.getCurrentUrl());
} @Override
public void beforeClickOn(WebElement element, WebDriver driver) {
System.out.println("单机页面元素的属性: "+element.getAttribute("value")); } @Override
public void beforeFindBy(By by, WebElement element, WebDriver driver) {
System.out.println("查找元素的条件是: "+ by.toString()); } @Override
public void afterChangeValueOf(WebElement element, WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void afterClickOn(WebElement element, WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void afterFindBy(By by, WebElement element, WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void afterNavigateBack(WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void afterNavigateForward(WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void afterNavigateRefresh(WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void afterScript(String url, WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void beforeChangeValueOf(WebElement element, WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void beforeNavigateBack(WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void beforeNavigateForward(WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void beforeNavigateRefresh(WebDriver driver) {
// TODO Auto-generated method stub } @Override
public void beforeNavigateTo(String url, WebDriver driver) {
System.out.println("beforeNavigateTo: "+url);
System.out.println("beforeNavigateTo by driver : "+driver.getCurrentUrl());
} @Override
public void beforeScript(String url, WebDriver driver) {
// TODO Auto-generated method stub }
}

以上的监听器可以满足以下需求:

1.执行打开网页的操作室, 需要分别记录打开前和之后的URL地址. 
2.在查找某个页面元素时候, 查找之前和之后都需要记录查找条件 
3.在对页面进行单机操作室, 单击前需要记录元素的查找条件, 单机后记录URL地址 
4.在对页面元素的值进行更改, 需要分别记录更改前的值和更改后的值 
5.在发生异常的时候, 需要进行截图, 将截图文件保存在D:\ , 用当前日期命名文件

原文章出处:http://blog.csdn.net/slowsnowscar/article/details/52507288

EventFiringWebDriver网页事件监听(二)的更多相关文章

  1. EventFiringWebDriver网页事件监听(一)

    Selenium提供了很多的event listening functions来跟踪脚本执行过程中的events. How it works? 在注册了listener的webDriver里面,这些l ...

  2. 关于实现自定义Dialog和实现Dialog里view的事件监听的两种方法

    一.自定义dialog. 二.实现dialog里view的事件监听 1.自定义dialog比较简单.在实例化new的时候,加入样式,布局就行了.或者重写dialog. 2.实现dialog里view的 ...

  3. WebView使用详解(二)——WebViewClient与常用事件监听

      登录|注册     关闭 启舰 当乌龟有了梦想……       目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8 ...

  4. Android事件监听(二)——点击鼠标事件

    Button.ImageButton事件监听(setOnClickListener) 方法一:通过匿名内部类实现 代码如下: package com.note.demo2; import androi ...

  5. Vue学习笔记(二)动态绑定、计算属性和事件监听

    目录 一.为属性绑定变量 1. v-bind的基本使用 2. v-bind动态绑定class(对象语法) 3. v-bind动态绑定class(数组语法) 4. v-bind动态绑定style(对象语 ...

  6. taro 填坑之路(二)taro 通过事件监听 实现组件间传值

    1.组件传值的方式 2.事件监听原理 3.事件管理器 utils/event.js /** * 事件池(事件管理器) * 通过事件监听传值 */ class Event { constructor() ...

  7. Java中用得比较顺手的事件监听

    第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...

  8. .NET事件监听机制的局限与扩展

    .NET中把“事件”看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的差异. // C#someButton.Click += OnSomeB ...

  9. [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

    -->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...

随机推荐

  1. Bufferread有readline()使得字符输入更加方便

    原则:保证编解码方式的统一,才能不至于出现错误. Io包的InputStreamread称为从字节流到字符流的桥转换类.这个类可以设定字符转换方式. OutputStreamred:字符到字节 Buf ...

  2. 【UVa】Partitioning by Palindromes(dp)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=27&page=sh ...

  3. HTML 标签 参考手册

    按功能类别排列 基础 标签 描述 <!DOCTYPE>  定义文档类型. <html> 定义 HTML 文档. <title> 定义文档的标题. <body& ...

  4. ConfigParser 读写配置文件

    一.ini: 1..ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式 2.ini文件创建方法: (1)先建立一个记事本文件.(2 ...

  5. 【C++缺省函数】 空类默认产生的6个类成员函数

    1.缺省构造函数. 2.缺省拷贝构造函数. 3. 缺省析构函数. 4.缺省赋值运算符. 5.缺省取址运算符. 6. 缺省取址运算符 const. <span style="font-s ...

  6. DML语句报错是因为控制文件无法扩大还是另有原因?

    今天处理了一个很有意思的故障问题,来龙去脉是这种: 客户来电咨询控制文件无法扩展,数据库仅仅能查询但不支持DML,须要远程支持.接到电话的第一反应就是CONTROL_FILE_RECORD_KEEP_ ...

  7. laravel 添加 404 页面

    1)使用 laravel 抛出 404 头很简单 abort(404); 还可以添加描述 abort(404, '404 File Not Fund'); 2)如果想自定义 404 页面模版,直接添加 ...

  8. mac 10.9 dock在多屏幕间移动

    想要在哪个屏幕使用dock,就在这个屏幕把鼠标移动到最底部即可.神奇吧?太意外了...居然被我发现了...

  9. 【BZOJ4318】OSU! 期望DP

    [BZOJ4318]OSU! Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1 ...

  10. Angular2+ 基本知识汇总

    Angular是Google推出的Web前端开发框架,从12年发布起就受到了强烈的关注,他首次提出了双向绑定的概念,让人耳目一新. Angular 2特性 就在2016年9月中旬,时隔4年,Googl ...