Immy110
Immy110

Reputation: 21

I am getting the message 'The type EventFiringWebDriver is deprecated' in Selenium

I understand that in Selenium 4 that 'EventFiringWebDriver' has been depreciated. What is the alternative? What changes do I need to make in my code? Please see the screenshot attached of the code. Also pasting the code below:

package testcases;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.testng.annotations.Test;

import listener.DriverUpdate;

public class TC_001 {
    
    @Test
    public void tc001()
    {
        
        System.setProperty("webdriver.chrome.driver", "./Driver/chromedriver");
        WebDriver driver = new ChromeDriver();
        
        //Step 2
        EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
        
        //Step 3
        DriverUpdate listener = new DriverUpdate();
        eventDriver.register(listener);
        
        
        driver.navigate().to("http://www.theTestingWorld.com");
        
        
    }

}

I am expecting to be able to create the object of EventFiringWebDriver and then later I want to be able to register my class (Where we are inheriting EventDriver interface) with the EventDriver. But of course it won't allow me to do this, since it is depreciated.

Upvotes: 0

Views: 3514

Answers (2)

Abhay Chaudhary
Abhay Chaudhary

Reputation: 2053

In Selenium 4, I am using 4.8.3 below is how you do it

First create a Listener Class which implements WebDriverListener interface Now we will override some of its methods like below, you can override more as per your requirement

import org.openqa.selenium.support.events.WebDriverListener;

public class Listener implements WebDriverListener {

    @Override
    public void beforeAnyWebDriverCall(WebDriver driver, Method method, Object[] args) {
        System.out.println("beforeAnyWebDriverCall");
    }

    @Override
    public void afterGet(WebDriver driver, String url) {
        System.out.println("after get");
    }
}

Now in the class where you create you Webdriver you need to use EventFiringDecorator class to register your Listeners and Decorate the driver

import java.io.FileNotFoundException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.events.EventFiringDecorator;

public class EventTest {


    public static void main(String[] args) throws FileNotFoundException {
        System.setProperty("webdriver.chrome.driver", "./Driver/chromedriver");
        WebDriver original = new ChromeDriver();
        Listener listener = new Listener();//Create instance of Listener Class
        EventFiringDecorator<WebDriver> decorator = new EventFiringDecorator<>(listener); //Pass listener to constructor
         
        WebDriver decorated = decorator.decorate(original);
        decorated.get("http://www.theTestingWorld.com");
        decorated.quit();
    }
}

Now when this code runs , you will get below output,

beforeAnyWebDriverCall // printed before getURL
after get // After getURL
beforeAnyWebDriverCall // printed before Quit

you can check this good example given here in Selenium docs EventFiringDecorator

Methods Related to Navigation which you can override

 // Navigation

  default void beforeAnyNavigationCall(WebDriver.Navigation navigation, Method method, Object[] args)  {}
  default void afterAnyNavigationCall(WebDriver.Navigation navigation, Method method, Object[] args, Object result)  {}

  default void beforeTo(WebDriver.Navigation navigation, String url) {}
  default void afterTo(WebDriver.Navigation navigation, String url) {}

  default void beforeTo(WebDriver.Navigation navigation, URL url) {}
  default void afterTo(WebDriver.Navigation navigation, URL url) {}

  default void beforeBack(WebDriver.Navigation navigation) {}
  default void afterBack(WebDriver.Navigation navigation) {}

  default void beforeForward(WebDriver.Navigation navigation) {}
  default void afterForward(WebDriver.Navigation navigation) {}

  default void beforeRefresh(WebDriver.Navigation navigation) {}
  default void afterRefresh(WebDriver.Navigation navigation) {}

Upvotes: 3

Immy110
Immy110

Reputation: 21

Thank you for the reply! This really helped. So I have the class sorted, where I have created the WebDriver.

However, in the Listener Class I seem to be getting the following:

Error in Listener class

The method afterNavigateTo(String, WebDriver) of type DriverUpdate must override or implement a supertype method

Upvotes: 0

Related Questions