首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >webdriver接口和chromedriver类之间的远程webdriver的作用是什么

webdriver接口和chromedriver类之间的远程webdriver的作用是什么
EN

Stack Overflow用户
提问于 2019-04-02 10:45:06
回答 1查看 629关注 0票数 1

Search Context是selenium中最高级的接口,它由另一个称为Web Driver的接口扩展。

在远程WebDriver类中实现了搜索上下文的抽象方法-All和Web驱动接口。

-All浏览器相关类,如Firefox Driver、Chrome Driver等,扩展了远程Webdriver类。

根据上面的stmt,远程web驱动程序类如何定义搜索上下文接口和webdriver接口中定义的所有抽象方法。因为函数driver.get/driver.title的实现细节因浏览器不同而不同,如下所示

为什么chromedriver或firefoxdriver类不能直接扩展webdriver接口?为什么remotedriver类保持在webdriver接口和chromedriver/firefoxdriver/iedriver类之间

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-03 10:02:04

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

此外,SearchContext接口定义了两个方法:findElementfindElementsWebDriver接口并不是唯一扩展它的接口;WebElement也是如此。查找已定位元素的元素子元素是完全有效的。考虑以下示例HTML片段:

代码语言:javascript
复制
<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"))会给出错误的元素,也就是我特别不想要的<div>。但是,我可以执行以下操作来获取适当的元素:

代码语言:javascript
复制
// Assume driver is a valid WebDriver instance
WebElement parent = driver.findElement(By.cssSelector("div.bar");

// Since WebElement also extends SearchContext,
// we can do this, which limits the scope of the
// find to only children of the parent element
WebElement child = parent.findElement(By.cssSelector("div.foo");

现在我可以操作我想要的元素了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55466222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档