如何在不使用 Selenium 服务器的情况下从量角器 运行 Chrome 无头

How can I run Chrome headless from protractor WITHOUT using a Selenium server

我 Chrome 通过 Selenium 服务器无头工作,通过 运行ning xvfb 绑定到 DISPLAY:10 然后 运行ning Selenium 与 DISPLAY=:10 webdriver-manager start。所以这一切都很好。

我还通过在我的 protractor.conf.

中指定 directConnect: true 直接从量角器获得 Chrome 驱动程序 运行ning

我想做的是将两者结合起来,即。 运行 chrome直接驱动(没有 SELENIUM!),但不知何故指示它 运行 无头显示:10。

就拓扑而言,一切都在开发者的 PC 上 运行。没有涉及服务器。在下面的评论中,我提到了一个节点服务器:它被用来启动量角器,而不是更常见的从命令行启动。我希望量角器在 DISPLAY:0 上 运行ning 以便我可以看到它的输出、测试失败等。当它使用 chrome 驱动程序生成 chrome 时,我想要 chrome 运行宁 DISPLAY:10。我这样做的原因是我希望 chrome window 比我的物理屏幕大。请参阅 了解背景信息。

我猜拓扑是这样的:

  • 方框 A:xvfbDISPLAY=:10、Selenium 服务器、chromedriver
  • B框:DISPLAY=:0,节点,量角器(directConnect: true),chromedriver
  • C 框:测试运行程序。

鉴于 DISPLAY is an environment variable,不是要传递的参数,我不知道它还能如何布局。

在这种情况下,假设您不想在 Box B 上安装单独的 xvfb,并且 A 可以从 B 访问(加上良好的连接),解决方案只需设置:

DISPLAY=boxAHost:10

在方框 B 上。

如果无法从 B 访问 A,最简单的方法可能是在 A 和 B 上复制 xvfb 设置,并在两者上设置 DISPLAY=:10

我有一个 "Doh!!!" 的禅宗时刻,整个事情比我想象的要容易得多。

我将 node/protractor 的标准输出(我希望在我的屏幕上显示)与 chrome 的 X 显示(我希望在 DISPLAY:10 上无显示)混为一谈。他们当然是完全不同的!!!!

只需在量角器前加上 DISPLAY=:10 的前缀,例如

DISPLAY=:10 protractor /installation_test/conf-c-direct-noserver.js

或者,在我的例子中,因为我是 运行 一个节点服务器,它反过来生成量角器,...

DISPLAY=:10 npm start

所以量角器在我的终端运行,我可以看到标准输出,而 DISPLAY=:10 通过调用层向下继承,最终被 Chrome 看到和理解。