Reputation: 21
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
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
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:
The method afterNavigateTo(String, WebDriver) of type DriverUpdate must override or implement a supertype method
Upvotes: 0