3

我有一些我经常使用的自定义查找方法,而不是 WebDriver.findElement 和 WebDriver.findElements。这些方法采用包含 By 定位器和正则表达式的自定义定位器对象,它们返回与 By 定位器匹配且其文本与正则表达式匹配的 WebElement 或 WebElement。

这些在很多场合都非常有用,我想为 WebElement.findElement 和 WebElement.findElements 提供相同的功能。我可以创建一个实现 WebElement 接口的新类,并且还包含这些新的 find 方法,但我对这是否真的有效感到困惑。毕竟,当我运行 FireFox 时,驱动程序返回的元素是 FireFoxWebElements。当我运行 IE 时,它们是 InternetExplorerElements。这两个都实现了 WebElement,但它们与我实现 WebElement 的自定义类完全无关,对吧?他们不会有这个额外的功能,他们不能被视为我的自定义类,因为他们......不是。

由于 WebDriver.findElement(s) 是 WebElements 的唯一“来源”,也就是说,它是 WebElements 到达我的代码的基本方式,然后我可以更改我的自定义 findElement(s) 方法(调用 WebDriver.findElement(s ),最终) 为任何包含我的特殊 element.find 方法的 WebElement 返回一个新的自定义包装器?这样,到达我的代码中的所有 WebElement 都将是这些自定义元素以及我想要的额外查找方法。对?如果是这样,这样的包装类会是什么样子?

4

1 回答 1

4

一种更简洁的方法是子类化该类,并为和By提供自定义实现。该架构正是为这种类型的可扩展性而设计的。然后可以将此子类作为参数传递给两者的and方法,并且没有问题。By.findElement()By.findElements()ByfindElement()findElements()WebDriverWebElement

或者,您可以重新调整自定义查找方法的用途。如果他们当前接受一个WebDriver对象,请考虑将其更改为接受一个SearchContext参数,这是一个既扩展WebDriverWebElement扩展的接口。SearchContextfindElement()andfindElements()方法的实际来源。

于 2012-10-24T21:06:47.277 回答