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);

加監聽的最大目的,就是減少維護腳本所花的力氣, 讓報錯的信息,更容易定位到問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM