我有两个疑惑,请帮助我解决这些问题
1)为什么运行selenium2.0没有像IE和Chrome这样的firefox驱动程序[.exe] ..?
2)为什么我们需要在selenium2.0中使用IE和chrome时初始化IE和Chrome驱动程序..?
由于 马赫什
答案 0 :(得分:5)
FirefoxDriver
很特别,它预先捆绑在包中:https://code.google.com/p/selenium/wiki/FirefoxDriver
Firefox驱动程序包含在下载中提供的selenium-server-stanalone.jar中。驱动程序以xpi(firefox扩展名)的形式出现,当你启动FirefoxDriver的新实例时,它会添加到firefox配置文件中。
与Safari驱动程序的工作方式非常类似:
https://code.google.com/p/selenium/wiki/SafariDriver
SafariDriver实现为Safari浏览器扩展。驱动程序反转传统的客户端/服务器关系,并使用WebSockets与WebDriver客户端进行通信。
它只是一个扩展,用于与Firefox,其他浏览器和其他浏览器进行通信。驱动程序根本不遵循相同的实现,因此,您需要启动驱动程序&其他人的可执行文件。
2)与我刚才所说的相似。实施方式不同。
IEDriver
使用非常低级别的Win32 API调用来完成其中的一些工作,FirefoxDriver
或ChromeDriver
不需要执行此操作:
https://code.google.com/p/selenium/wiki/InternetExplorerDriver
答案 1 :(得分:4)
1。 Mozilla创建了geckodriver
二进制文件,用于Firefox v48及更高版本。
注意:如果使用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及更高版本开始)。
我可以找到的唯一证据来自How to Use 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的原生事件,这就是为什么它需要为每种浏览器类型使用特定的驱动程序二进制文件。