selenium - Protractor (Selenium webdriver)VS ghostdriver(phantomjs webdriver)有什么区别?

标签 selenium selenium-webdriver phantomjs protractor ghostdriver

我想澄清一下 Protractor VS ghostdriver 之间的区别。

  • 带 Protractor :
  • 启动 selenium web 服务器进行测试。
  • 多浏览器测试。
  • 每当它开始测试时,它都会打开浏览器。
  • 使用幽灵驱动程序:
  • 启动 phantomjs 网络服务器。
  • 也可以配置多个浏览器。
  • 可以与 selenium 单独运行或与 selenium 集成。

  • 我的问题是 PhantomJS webdriver 可以在没有 selenium webdriver、多个浏览器的情况下单独运行并且对 CI 有好处。为什么我们需要运行 selenium 并使用 ghostdriver 将 selenium 与 phantomjs 集成?

    最佳答案

    虽然我不完全确定我理解你的问题,但我会尽力回答。使用 WebDriver,可以通过标准化的 JSON-over-HTTP wire protocol 驱动浏览器。 .这意味着您需要一个理解有线协议(protocol)的“服务器”组件来驱动任何特定的浏览器。对于每个主要的桌面浏览器(Internet Explorer、Chrome 和 Firefox),都有一个 WebDriver 代码与之通信的服务器组件(分别为 IEDriverServer.exe、chromedriver.exe 或 Firefox 浏览器扩展)。 PhantomJS 还实现了一个理解 WebDriver 有线协议(protocol)的服务器组件,因此与其他浏览器一起使用的 PhantomJS 可以使用相同的高级 WebDriver 代码。请注意,Selenium 服务器不需要驱动本地机器上的任何浏览器。

    现在,由于使用的协议(protocol)只是通过 HTTP 传输,因此 WebDriver 有机会在一台机器上运行 WebDriver 代码,同时驱动位于完全不同机器上的浏览器。这就是 Selenium 服务器的用武之地。Selenium 服务器启动一个 HTTP 服务器,该服务器理解 WebDriver JSON 有线协议(protocol)。当该服务器接收到 WebDriver 命令时,它可以将该命令转发到另一个“服务器”组件,要么在该机器上运行(作为独立的远程服务器),要么在另一台运行 Selenium 服务器实例的机器上(在“网格“配置)。

    所以回答你的问题,是的,可以在不使用 Selenium 服务器的情况下针对 PhantomJS 执行 WebDriver 代码。它同样可以在 Internet Explorer、Firefox、Chrome、Safari 和某些版本的 Opera 上执行,所有这些都无需使用 Selenium 服务器。请注意,所有这些都是真的,而根本没有提到 Protractor。由于 Protractor 基于 WebDriverJS ,只要有一个“服务器”组件在运行,无论是 Selenium 服务器、chromedriver.exe、IEDriverServer.exe 还是 PhantomJS,驱动程序都应该能够与该浏览器通信并驱动该浏览器。查看代码,似乎 WebDriverJS(以及扩展的 Protractor)应该能够在不需要 Selenium 服务器的情况下针对 Chrome 和 PhantomJS 执行,但我对 Protractor 对 WebDriverJS 的包装了解不够,无法与权威对话。

    关于selenium - Protractor (Selenium webdriver)VS ghostdriver(phantomjs webdriver)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455958/

    相关文章:

    java - 如何处理 Selenium NoSuchElementException

    python - selenium.common.exceptions.WebDriverException : Message: connection refused

    javascript - 使用 phantom js 从 jsfiddle 截屏

    python - 使用phantomjs获取链接地址

    node.js - 如何将静态文件预加载或安装到 Highchart 的导出服务器中?

    python - Selenium Chromedriver Python - 使用 Tor 代理加载 ModHeader 扩展时为 'failed to wait for extension background page to load'

    python - 使用 Selenium 和 python 将文件下载到指定位置

    java - 验证页面上多个元素的两个字符串之一

    python - 无法在 python selenium 中使用 selenium chrome webdriver 定位元素

    c# - 从 JavaScriptExecutor 的 ExecuteScript 获取值