EventFiringWebDriver网页事件监听(一)

Selenium提供了很多的event listening functions来跟踪脚本执行过程中的events.

How it works? 
在注册了listener的webDriver里面,这些listener可以listen events。events可以是任何类型的event 或者 action,比如element click,改变输入框的值,甚至是exceptions。

To enable this feature: 
1. 创建用户自定义的Event listener class. 
2. 通过实现webdriver的接口,来创建一个EventFiringWebDriverObject
3. And register the Listener to the EventFiringWebDriver instance.

Q: 如何创建自己的event listener class? 
A: By 实现WebDriverEventListener 接口(不推荐)。 
或者By 继承AbstractWedDriverEventListener 类。(推荐)

首先展示实现WebdriverEventListener 接口的方式(不推荐)

package main.test.org.seleniummonster.com.demo.eventlistenerdemo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.WebDriverEventListener; 

public class EventListenerType1 implements WebDriverEventListener {
@Override
public void afterChangeValueOf(WebElement arg0, WebDriver arg1) {
// Things to be done after changing the value in the webelement argo
}
@Override
public void afterClickOn(WebElement arg0, WebDriver arg1) {
// Things to be done after clicking an element arg0
}
@Override
public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) {
// Things to be done  after findby of webelement arg1
}
@Override
public void afterNavigateBack(WebDriver arg0) {
// Things to be done after navigating back
}
@Override
public void afterNavigateForward(WebDriver arg0) {
// Things to be done after navigating forward
}
@Override
public void afterNavigateTo(String arg0, WebDriver arg1) {
// Things to be done after navigating to the given URL say, arg0
}
@Override
public void afterScript(String arg0, WebDriver arg1) {
// Things to be done after script execution
}
@Override
public void beforeChangeValueOf(WebElement arg0, WebDriver arg1) {
// Things to be done before Changing value in the webelement arg0
}
@Override
public void beforeClickOn(WebElement arg0, WebDriver arg1) {
// Things to be done before Clicking an element arg0
}
@Override
public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) {
// Things to be done before a Findby of an web element arg1
}
@Override
public void beforeNavigateBack(WebDriver arg0) {
// Things to be done before navigating back
}
@Override
public void beforeNavigateForward(WebDriver arg0) {
// Things to be done before Navigating forward
}
@Override
public void beforeNavigateTo(String arg0, WebDriver arg1) {
// Things to be done before navigating to a url arg0
}
@Override
publicvoid beforeScript(String arg0, WebDriver arg1) {
// Things to be done before javascript execution
}
@Override
public void onException(Throwable arg0, WebDriver arg1) {
System.out.println("There is an exception in the script, please find the below error description" );
arg0.printStackTrace();
}
}

在这种方法里,我们只重写了onException() ,其与方法都没做改动,但还是override了一遍。没办法啊。

然后就要介绍推荐的那种方法了。AbstractWebDriverEventListener 是一个抽象类,它实现了WebDriverEventListener接口,它override了WebDriverEventListener所有的方法(当然只是空的override了一下)。我们可以继承AbstractWebDriverEventListener class 来具体定义我们关注的方法,看如下例子:EventListenerType2.java

package main.test.org.seleniummonster.com.demo.eventlistenerdemo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.events.AbstractWebDriverEventListener;

public class EventListenerType2 extends AbstractWebDriverEventListener {
/**
* @author Selenium Monster
*/
@Override
public void onException(Throwable arg0, WebDriver arg1) {
System.out.println("There is an exception in the script, please find the below error description" );
arg0.printStackTrace();
}
}

代码简短了不少,接下来就是Registering the Listener with Webdriver instance

下面是个实例: 创建个EventFiringWebDriver 类的实例, 我们定义的listener类的实例。用register()方法把我们定义的listener注册到EventFiringWebDriver 对象上。可以注册As many listener as you whish. 
* If you have definitions for an action in all the listener, all of them will be executed.*

package main.test.org.seleniummonster.com.demo.eventlistenerdemo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;

public class EventFiringWebdriverExample {

/**

* @author Selenium Monster

*/

public static void main(String[] args) {
// 创建一个 webdriver实例
WebDriver driver = new FirefoxDriver();
// 创建EventFiringWebDriver 实例
EventFiringWebDriver eventFiringWD= new EventFiringWebDriver(driver);

// Creating instance of eventListener, that we just defined
EventListenerType2 eventListener1=new EventListenerType2();

// Register the Listener with the event firing driver
eventFiringWD.register(eventListener1);

eventFiringWD.get("https://www.google.co.in/");

eventFiringWD.findElement(By.className("nosuchclassName"));

}
}

解除注册的方法:

eventFiringWD=eventFiringWD.unregister(eventListener1);

加监听的最大目的,就是减少维护脚本所花的力气, 让报错的信息,更容易定位到问题。

时间: 2024-12-27 17:00:31

EventFiringWebDriver网页事件监听(一)的相关文章

EventFiringWebDriver网页事件监听(二)

public class SeleniumDemo { /** * @param args */ public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); Navigation navigate = driver.navigate(); EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver); //注册事件 eve

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

登录|注册     关闭 启舰 当乌龟有了梦想-- 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8月书讯      每周荐书:Java Web.Python极客编程(评论送书) WebView使用详解(二)--WebViewClient与常用事件监听 2016-05-28 11:24 20083人阅读 评论(13) 收藏 举报  分类: 5.andriod开发(148)  版权声明:本文为博主原创文章,未经博主

移动端touch触屏滑动事件、滑动触屏事件监听!

移动端touch触屏滑动事件.滑动触屏事件监听! 一.触摸事件 ontouchstart.ontouchmove.ontouchend.ontouchcancel 目前移动端浏览器均支持这4个触摸事件,包括IE.由于触屏也支持MouseEvent,因此他们的顺序是需要注意的:touchstart → mouseover → mousemove → mousedown → mouseup → click1 Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小

html学习 - javascript事件监听以及addEventListener参数分析

事件监听 在Javascript中事件的监听是用来对某些操作做出反应的方法.例如监听一个按钮的pressdown, 或者获取鼠标左键按下时候鼠标的位置.这些都需要使用监听来完成.监听的函数很简单:addEventListener. 这里解释一下一个网页的嵌套关系:最外层:window 包含:document 包含:html 包含: body 包含:div等等... addEventListener监听方法 按钮监听事件响应 首先我们需要获取一个按钮的handle,获取的方法很简单,代码如下: v

[转]添加事件监听

我们在制作网页时,常常要制作一些js控件.各js控件虽然制作出来后,但有时要在一起使用时,调用到同样的事件就会引起冲突. 如editselectunit和editselectrole控件同时使用到了document的onclick事件.此时,如果在这两个事件的<script language='javascript'></script>处分别编写如下document.onclick = function() { alert('unit');}; documnet.onclick=f

时间绑定和事件监听!

一般在网页上回有不少节点的数据是根据数据库进行更新的,这种节点都是由js代码控制动态生成的,那么绑定各种事件比如点击事件的代码块会比生成节点的代码块先执行,那后生成的节点就不会被绑定上事件,这时候需要用刀监听的方法: 比如 jQuery中$('el').click()这个方式就是事件绑定, 而$('el').on('click',function(){}) 就是事件监听:

storage 事件监听

在公司的一次内部分享会上, 偶然知道了这个H5的新事件, 解决了我之前的一个bug. 事情是这样的, 第A网页上显示的数量的总和, 点击去是B页面, 可以进行管理, 增加或者删除, 当用户做了增删操作之后, 返回到A页面的时候不会更新数量, 这个问题困扰了很久 终于等到storage事件, 据说淘宝的购物车就是这么实现的 所以, localStorage的例子运行需要如下条件 同一个浏览器打开了两个同源网页 其中一个网页修改了localStorage 另一个网页注册了storage事件 例子 A

关于事件监听的那些事

1.事件的概念: JavaScript使我们有能力创建动态页面,网页中的每一个元素都可以产生某些触发JavaScript函数的事件.我们可以认为事件是可以被JavaScript侦测到的一种行为; 2. 事件分为DOM0级事件和Dom 2级事件,DOM2级事件也叫做事件监听.DOM 0级事件的缺点是如果事件相同 后者的事件会覆盖前者的事件 如上图,点击的时候则只会显示弹出2,而不会显示弹出1; 清楚事件的时候只要使用代码div.onclick = null则可. 3.DOM2级事件,又叫做事件监听

js--事件概念和事件监听

事件概念和事件监听 事件的概念 JavaScript使我们有能力创建动态页面,网页中的每个元素都可以产生某些可以触发JavaScript函数的事件.我们可以认为事件是可以被JavaScript侦测到的一种行为. 使用返回值改变HTML元素的默认行为 HTML元素大都包含了自己的默认行为,例如:超链接.提交按钮等.我们可以通过在绑定事件中加上return false来阻止它的默认行为 1.绑定HTML元素属性 <input type="button" value="cli