Selenium 4中EventFiringWebDriver已弃用,求替代方案及代码修改方法
Selenium 4 中 EventFiringWebDriver 的替代方案及代码修改指南
替代方案说明
Selenium 4 弃用了EventFiringWebDriver和WebDriverEventListener,官方推荐使用EventFiringDecorator类配合WebDriverListener接口实现驱动事件监听。WebDriverListener是基于默认方法的接口,你只需重写需要监听的事件方法,无需实现所有抽象方法,灵活性更强。
具体修改步骤
1. 调整自定义监听器类(DriverUpdate)
原DriverUpdate继承的WebDriverEventListener已弃用,需改为实现WebDriverListener接口。示例代码如下:
package listener; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.events.WebDriverListener; public class DriverUpdate implements WebDriverListener { // 重写需要监听的事件,比如页面跳转完成后的逻辑 @Override public void afterNavigateTo(String url, WebDriver driver) { System.out.println("页面加载完成,当前URL:" + url); } // 根据业务需求,可添加其他事件监听方法,如beforeClickOn、afterFindElement等 }
2. 修改测试类代码
移除EventFiringWebDriver的使用,改用EventFiringDecorator包装原WebDriver实例,注册监听器后使用包装后的驱动执行操作(必须用包装后的驱动,监听器才会生效)。修改后的测试类代码:
package testcases; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.events.EventFiringDecorator; import org.openqa.selenium.support.events.WebDriverListener; import org.testng.annotations.Test; import listener.DriverUpdate; public class TC_001 { @Test public void tc001() { // Selenium 4.6+ 支持自动驱动管理,可移除手动设置驱动路径的代码 // System.setProperty("webdriver.chrome.driver", "./Driver/chromedriver"); WebDriver originalDriver = new ChromeDriver(); // 创建监听器实例 WebDriverListener listener = new DriverUpdate(); // 用EventFiringDecorator包装原驱动并注册监听器 WebDriver driver = new EventFiringDecorator(listener).decorate(originalDriver); // 使用包装后的驱动执行操作,触发监听器事件 driver.navigate().to("http://www.theTestingWorld.com"); // 后续所有操作都使用包装后的driver对象 driver.quit(); } }
额外注意事项
- Selenium 4.6及以上版本内置自动驱动管理机制,无需手动调用
System.setProperty指定驱动路径,可直接删除该行代码。 - 务必使用
EventFiringDecorator包装后的WebDriver实例执行操作,否则监听器不会触发任何事件。
内容的提问来源于stack exchange,提问作者Immy110
相关产品推荐
相关产品推荐

