为什么不直接使用EventFiringWebDriver对象而不是包装WebDriver对象然后使用它呢?

时间:2018-07-01 13:12:59

标签: selenium webdriver

我正在学习WebDriver侦听器。要侦听并采取相应的措施,我们首先必须创建一个WebDriver实例,然后将其传递给EventFiringWebDriver实例。

所以代码会像

WebDriver wdriver = new FirefoxDriver();
EventFiringWebDriver driver = new EventFiringWebDriver(wdriver);

我已经知道EventFiringWebDriver类是WebDriver的包装,它添加了侦听事件并调用WebDriverEventListener的重写方法的功能。

所以现在的代码就像

OverrideClass oc = new OverrideClass();
driver.register(oc);

从现在开始,我们像以前使用FirefoxDriver一样进行编码。 例如,打开一个网址

driver.get("https://www.facebook.com");

找到一个元素

driver.findElement(By.id("email"));

,依此类推。

因此,我可以推断FirefoxDriver和EventFiringWebDriver都具有相同的方法,但实现方式不同。

例如,使用findElement。 在FirefoxDriver中,它实现为“查找元素并返回WebElement类型的对象”。

在EventFiringWebDriver中,其实现为“查找元素。如果找不到该元素,则调用被覆盖的方法' onException ”。如果找到,则返回WebElement类型的对象。” / p>

如果我错了,请纠正我。

现在我的疑问是,如果我们要在EventFiringWebDriver中使用方法,为什么不只创建它的实例并使用它的方法呢?

EventFiringWebDriver driver = new EventFiringWebDriver();
driver.get("https://www.facebook.com");
driver.findElement(By.id("email"));

我没有提出任何建议。我只想知道先包装WebDriver对象然后使用EventFiringWebDriver对象的逻辑。

我知道

EventFiringWebDriver driver = new EventFiringWebDriver();

是不可能的,因为没有这样的构造函数。

我只想了解先包装WebDriver对象的逻辑,然后再使用EventFiringWebDriver对象进行脚本编写。

谢谢。

1 个答案:

答案 0 :(得分:0)

很好的问题,我也在研究同一主题,并且希望分享我的观点。希望我能为您提供直接的答案或进一步调试的线索。

点:

NetworkPolicy

如您所说,您不能使用这种方式,因为它没有任何实现或构造函数

EventFiringWebDriver中的Webdriver方法的实现仍使用ChromeDriver或Firefox的Wrapper对象来执行findelements或getcurrenturl等。此EventFiringWebDriver的不同之处在于,它在执行操作之前和之后使用AbstractWebDriverListner日志的Implementation类。

示例:

EventFiringWebDriver driver = new EventFiringWebDriver();
driver.get("https://www.facebook.com");
driver.findElement(By.id("email"));