【问题标题】:What is the difference between Selenium Webdriver and GeckoDriver?Selenium Webdriver 和 GeckoDriver 有什么区别?
【发布时间】:2021-02-16 01:27:54
【问题描述】:

我每 5 年左右使用一次 Selenium,而且每次它都变得面目全非。我刚刚开始了一个新的 Selenium 项目,在 Google 上搜索了一些快速入门指南,例如 https://www.toolsqa.com/selenium-webdriver/run-selenium-test/(写于 2020 年 9 月)和 https://www.guru99.com/first-webdriver-script.html(© 2020),它们似乎都使用 WebDriver,例如,通过使用 WebDriver driver = new FirefoxDriver(); 启动他们的示例,尽管后者有一个免责声明,从 Firefox 35(我有 82 个)起,您应该使用 Geckodriver。

我使用从https://www.selenium.dev/downloads/ 下载的 Selenium for Java 3.141.59,但它只有两个对 Geckodriver 的引用(至少这是在我的 IDE 中输入Ge 和自动完成时显示的全部内容),GeckoDriverInfoGeckoDriverService(作为比较,有九个引用 WebDriver)。

我已经阅读了https://github.com/mozilla/geckodriver 此处的信息,但这并没有让我变得更聪明,https://en.wikipedia.org/wiki/Selenium_(software)#Selenium_WebDriver 也没有(*页面上甚至没有提到 Geckodriver)。

  1. Webdriver 和 Geckodriver 有什么区别?
  2. 为什么,如果一个人下载所有内容的最新/当前版本,如果 Geckodriver 是几年 (?) 年以来一直推荐的工具,为什么不包括在内?
  3. 如果 Geckodriver 是可行的方法,为什么最近编写的指南使用 Webdriver?

我认为在提出这个问题之前我已经进行了相当多的研究,但请随时提出改进建议,因为我真的很困惑。

【问题讨论】:

    标签: java selenium selenium-webdriver geckodriver


    【解决方案1】:
    1. webdriver,是 ChromeDriver(来自 chrome)、GeckoDriver(FireFox)、IEDriver 和 RemoteDriver 的父级。如果支持的话,可能会更多。因此,GeckoDriver 用于控制 FireFox 浏览器实例,但它实现了 WebDriver 接口中提到的方法。
    2. GeckoDriver 不包括在内,因为它仅适用于 FireFox,其他用户可能想要使用其他浏览器。
    3. 保持为不同浏览器换出实现的灵活性。 :)

    【讨论】:

    • 所以我需要从上面的链接下载 WebDriver 和 GeckoDriver?这就引出了另一个问题:我只下载了 WD 并制作了一个快速脚本,在 Firefox 中启动新窗口没有问题。怎么会?
    • WebDriver 通常已经存在于 selenium 模块中(至少在 python 和 java 中),您只需要下载 GeckoDriver。你能告诉我你下载了什么和你的代码吗?
    【解决方案2】:

    WebDriver 是 specification。它定义了 UI 界面自动化的方式。 GeckoDriver 就是这种规范的实现——它是 Firefox 浏览器的 WebDriver 实现。

    所以基本上,WebDriver 是一个服务器,它向一侧公开 REST API,并且知道如何控制另一侧的浏览器。

    以下是 E2E 流程的简短说明(适用于 Firefox 和 Java):

    1. 您下载 Selenium java 库。它提供用于与 Web 驱动程序交互的 Java 客户端
    2. 你下载 GeckoDriver
    3. 在您的 Java 代码中,您调用 WebDriver driver = new FirefoxDriver();
    4. Selenium 库以 OS 本机方式启动 GeckoDriver 可执行文件
    5. 在您的 Java 代码中,您调用 driver.get("http://my.url")
    6. Selenium 库形成对使用 GeckoDriver 启动的服务器的 REST 调用。它根据this section of specification调用端点。
    7. GeckoDriver 然后将此命令翻译成 Firefox 可以理解的内容,以便浏览器导航到所需的页面。

    所以基本上你需要 3 件事来让一切正常工作:

    • Selenium Java 库,基本上是 WebDriver REST API 的 Java 客户端
    • GeckoDriver(根据 WebDriver 规范实现 REST API 并将其转换为 Firefox 浏览器可以理解的命令)
    • 火狐浏览器

    【讨论】: