虽然我不完全确定我理解你的问题,但我会尽力回答它。使用 WebDriver,驱动浏览器是通过标准化的JSON-over-HTTP 有线协议完成的。这意味着您需要一个理解有线协议的“服务器”组件来驱动任何特定的浏览器。对于每个主要的桌面浏览器(Internet Explorer、Chrome 和 Firefox),都有一个 WebDriver 代码与之通信的服务器组件(分别为 IEDriverServer.exe、chromedriver.exe 或 Firefox 浏览器扩展)。PhantomJS 还实现了一个理解 WebDriver 有线协议的服务器组件,因此与其他浏览器一起使用的 PhantomJS 可以使用相同的高级 WebDriver 代码。请注意,Selenium 服务器不需要驱动本地机器上的任何浏览器。
现在,由于使用的协议只是通过 HTTP 传输,因此 WebDriver 有机会在一台机器上运行 WebDriver 代码,同时驱动位于完全不同机器上的浏览器。这就是 Selenium 服务器的用武之地。Selenium 服务器启动一个 HTTP 服务器,该服务器理解 WebDriver JSON 有线协议。当该服务器接收到 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 的包装了解不够,无法与权威对话。