webdriver界面和chromedriver类之间的远程webdriver的用途是什么

时间:2019-04-02 02:45:06

标签: selenium webdriver

搜索上下文是硒中最高级的接口,它由另一个称为Web驱动程序的接口扩展。

-搜索上下文和Web驱动程序接口的所有抽象方法都在Remote WebDriver类中实现。

-与浏览器相关的所有类,例如Firefox Driver,Chrome Driver等,都扩展了Remote Webdriver类。

按照上述stmt,远程Web驱动程序类如何为搜索上下文接口和Webdriver接口中定义的所有抽象方法提供定义。因为具体的实现细节因浏览器而异,例如功能

的功能driver.get / driver.title。

为什么chromedriver或firefoxdriver类不能直接扩展webdriver接口。为什么将remotedriver类保留在webdriver界面和chromedriver / firefoxdriver / iedriver类之间

1 个答案:

答案 0 :(得分:1)

虽然每个浏览器在驱动程序级别(ChildsetStatechromedriver.exe等的实现可能有所不同,但语言绑定执行命令的机制是所有浏览器都一样。因此,虽然每个浏览器特定的驱动程序类可以直接实现该接口,但每个驱动程序类中的代码都是相同的。使用geckodriver.exe作为基类可以消除重复的代码。此外,IEDriverServer.exe类还有一个额外的好处,即可以在与正在执行语言绑定代码的计算机不同的(远程)计算机上运行的浏览器上执行WebDriver命令。

此外,RemoteWebDriver接口定义了两个方法,RemoteWebDriverSearchContextfindElement接口不是唯一扩展它的接口。 findElements也是。找到已经定位的元素的子元素完全正确。考虑以下示例HTML片段:

WebDriver

使用WebElement会给我错误的元素,{我特别不想使用的<div class="foo"> I don’t want to select this div. </div> <div class="bar"> I need to do something with this div. <div class="foo"> But I also do need to select this div </div> </div> 。但是,我可以执行以下操作以获取适当的元素:

driver.findElement(By.cssSelector("div.foo"))

现在我可以操纵我想要的确切元素了。