搜索上下文是硒中最高级的接口,它由另一个称为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类之间
答案 0 :(得分:1)
虽然每个浏览器在驱动程序级别(Child
,setState
,chromedriver.exe
等的实现可能有所不同,但语言绑定执行命令的机制是所有浏览器都一样。因此,虽然每个浏览器特定的驱动程序类可以直接实现该接口,但每个驱动程序类中的代码都是相同的。使用geckodriver.exe
作为基类可以消除重复的代码。此外,IEDriverServer.exe
类还有一个额外的好处,即可以在与正在执行语言绑定代码的计算机不同的(远程)计算机上运行的浏览器上执行WebDriver命令。
此外,RemoteWebDriver
接口定义了两个方法,RemoteWebDriver
和SearchContext
。 findElement
接口不是唯一扩展它的接口。 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"))
现在我可以操纵我想要的确切元素了。