为什么在Selenium2.0中不需要像IE和Chrome那样使用外部Firefox驱动程序?

4

我有两个疑问,希望您能帮助我解决:

1)为什么在运行selenium2.0时没有像IE和chrome那样的firefox驱动程序[.exe]?

2)使用selenium2.0在IE和chrome上工作时,为什么需要初始化IE和chrome驱动程序?

谢谢 Mahesh

2个回答

6
  1. FirefoxDriver是特殊的,它已经预先打包在软件中:

https://code.google.com/p/selenium/wiki/FirefoxDriver

Firefox驱动程序包含在可下载的selenium-server-standalone.jar中。该驱动程序以xpi(Firefox扩展)的形式出现,当您启动新的FirefoxDriver实例时,将其添加到Firefox配置文件中。

与Safari驱动程序非常相似:

https://code.google.com/p/selenium/wiki/SafariDriver

SafariDriver作为Safari浏览器扩展实现。该驱动程序颠倒了传统的客户端/服务器关系,并使用WebSockets与WebDriver客户端通信。

它只是与Firefox通信的扩展程序,其他浏览器和驱动程序并不遵循相同的实现方式,因此需要为其他浏览器启动驱动程序和可执行文件。

2)与我刚才说的类似。实现方式不同。

IEDriver使用非常低级别的Win32 API调用来完成一些工作,而FirefoxDriverChromeDriver则不需要这样做:

https://code.google.com/p/selenium/wiki/InternetExplorerDriver


我被问到的面试问题是:当我们使用IE/Chrome .exes时,究竟会发生什么,为什么我们需要这些exes,它们的目的是什么?谢谢! :) - Shetty's

5

1. Mozilla为Firefox v48及以上版本创建了geckodriver二进制文件。

注意:如果使用Firefox v47或更早版本,则可以忽略以下内容,因为它使用本机Firefox浏览器实现。

为了使Selenium与Firefox关联,必须在实例化WebDriver之前设置Geckodriver二进制路径系统属性。

webdriver.gecko.driver = path/to/geckodriver

以下是Java中设置属性的方式。

System.setProperty("webdriver.gecko.driver","path/to/geckodriver"); WebDriver driver = new FirefoxDriver();

自2017-03起,最新的Geckodriver必须与Selenium v3.3及更高版本一起使用。

Selenium Java - Maven Repository

2. 初始化InternetExplorerDriver和Chromedriver的原因是它们各自具有特定的浏览器选项。

此外,使用驱动程序二进制文件的另一个原因是Selenium没有Internet Explorer、Chrome和Firefox(v48及以上版本)中包含的浏览器事件的本地实现。

我能找到唯一的证据是来自如何使用GeckoDriver - ToolsQA (2016-09-28)的内容,该内容说明了从Selenium中删除本机Firefox事件。

Gecko Driver是Selenium测试和Firefox浏览器之间的链接。

GeckoDriver是用于使用W3C WebDriver兼容客户端与基于Gecko的浏览器(在这种情况下是Mozilla Firefox)交互的代理。

由于Selenium 3将不再具有FF的任何本机实现,我们必须通过Gecko Driver直接处理所有驱动程序命令。

一个合理的假设是,Selenium以前从未针对Internet Explorer或Chrome拥有本地事件,这就是为什么需要使用特定的浏览器类型的驱动程序二进制文件的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接