【问题标题】:How can I run Chrome headless from protractor WITHOUT using a Selenium server如何在不使用 Selenium 服务器的情况下从量角器无头运行 Chrome
【发布时间】:2017-04-21 20:13:39
【问题描述】:

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

我还通过在 protractor.conf 中指定 directConnect: true 直接从量角器运行 Chromedriver。

我想做的是两者的结合,即。直接运行 chromedriver(没有 SELENIUM!),但以某种方式指示它在 DISPLAY 上无头运行:10。

在拓扑方面,一切都在开发者的 PC 上运行。不涉及服务器。在下面的评论中,我提到了一个节点服务器:它用于启动量角器,而不是更常见的从命令行启动。我希望量角器在 DISPLAY:0 上运行,这样我就可以看到它的输出、测试失败等。当它使用 chromedriver 生成 chrome 时,我希望 chrome 在 DISPLAY:10 上运行。我这样做的原因是我希望 chrome 窗口比我的物理屏幕大。背景见How can I screenshot the full height of a mobile form factor?

【问题讨论】:

  • 你好安德鲁。它不起作用,因为我不知道如何使它起作用。我找不到任何地方为启动的 chrome 实例配置目标 DISPLAY。
  • java 没有进入它。 protractor 是一个节点应用程序。节点应用程序的 DISPLAY 是 DISPLAY=:0 因为量角器正在我的 X 显示器上运行。当量角器生成 chromedriver 时,我希望 chromedriver 连接到 DISPLAY=:10
  • 抱歉,已删除令人困惑的评论。显然卡在Java模式...
  • 我在计算拓扑时遇到了麻烦。所以这一切都在一台服务器上? xvfb on :10、DISPLAY=:10、Sel 服务器、chromedriver 和节点/量角器 - 远程调用服务器/量角器的测试。那正确吗?但是你也说“节点应用程序的显示是 DISPLAY=:0”,那么节点/量角器和另一个 chromedriver 也在一个单独的盒子上吗?如果这一切都在一个盒子上,DISPLAY=:10,那么肯定所有的 graf 都会通过 xvfb 而没有额外的配置。如果没有,那么您肯定只需要节点框上的 DISPLAY=otherBox:10 ,假设您不想要单独的 xvfb 那里。
  • 如何启动无头 Chrome 实例?

标签: selenium selenium-webdriver protractor selenium-chromedriver


【解决方案1】:

我猜拓扑是这样的:

  • 框 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

【讨论】:

  • 查看我对问题的更新,只有一个框。环境变量可以特定于某个进程,例如DISPLAY=:10 protractor
  • 您是否有机会分享有关能够链接到流程的信息的链接(也许在您的回答中)?我在任何地方都找不到它的记录。
  • 对不起@Andrew,我不明白你的问题“链接到流程”。如果你能澄清一下,我很乐意提供我所拥有的任何信息。你的意思是;直接调用 chromedriver,而不是通过 Selenium 服务器?如果是这样,则记录在 github.com/angular/protractor/blob/master/docs/referenceConf.js 见第 91 行'directConnect: false,'
  • 我的错,我的意思是将 DISPLAY 链接到进程名称。主机、屏幕等。我知道,但我找不到任何关于添加 proc 名称以及如何使用它的信息。
【解决方案2】:

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

我已经将节点/量角器的标准输出(我想要在我的屏幕上)与 chrome 的 X 显示(我想要在 DISPLAY:10 上无头)混为一谈。当然它们是完全不同的!!!!

只需在量角器前加上 DISPLAY=:10 例如。

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

或者,在我的情况下,因为我正在运行一个节点服务器,而该节点服务器又会产生量角器,...

DISPLAY=:10 npm start

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多