【发布时间】:2014-02-06 23:26:08
【问题描述】:
我在无头 Debian 7 虚拟机上设置了最新版本的 Selenium Server、ChromeDriver 和 Chrome,通过 Screen 手动运行它,Chrome 在 Xvfb 中运行。这工作得很好,我现在想将它转移到生产 Ubuntu 12.04 VM。为了安全起见,我想以锁定用户身份运行它,并尽可能靠近守护进程,以便无人看管。
我编写了一个 Fabric 脚本来处理部署,但遇到了最后一个障碍——启动 Selenium 和 Xvfb。 Selenium 使用自定义 .screenrc 在 Screen 内运行,该 .screenrc 也会启动 Xvfb,但我怀疑 DISPLAY 变量没有正确导出 - 我已将 VNC 放入帧缓冲区并启动了我的 RemoteWebDriver 项目,该项目连接到 Selenium 并启动 ChromeDriver 和Chrome,但没有出现 Chrome 窗口,并且项目在 60 秒后超时。我在 .bashrc 中为 selenium-daemon 用户添加了以下行:
export DISPLAY=:10
在 .screenrc 中:
screen -t 'Xvfb' 0 /usr/bin/Xvfb :10 -screen 0 1366x768x24 -ac
screen -t 'Selenium' 1 /bin/bash --rcfile /home/selenium-daemon/.bashrc -c '/usr/bin/java -jar /usr/local/bin/selenium-server-standalone-2.39.0.jar -Dwebdriver.chrome.driver=/usr/local/bin/chromedriver -port 4444 > /tmp/selenium.log'
Fabric 正在启动屏幕
sudo("screen -dmS selenium -c /home/selenium-darmon/.screenrc & sleep 5", user="selenium-daemon")
我尝试显式设置 --rcfile,因为我不确定它是否被使用,但这并没有帮助。我很确定这是问题所在;在我的测试虚拟机上,我遇到了类似的问题,并通过确保正确设置了 DISPLAY 变量来解决。目前selenium-daemon 用户已被锁定,因此我无法连接到 Screen 会话。
我还发现从 Fabric 调用 Screen 会立即返回;这反过来又以某种方式阻止了屏幕启动。我通过上面的sleep 调用解决了这个问题,这让 Screen 有足够的时间来创建会话。这是预期的吗?或者这可能与我的问题有关吗?
手动运行 Fabric/Screen 命令并不能解决问题,即使它们改编自我在测试 VM 上使用的命令。有什么建议吗?
作为事后的想法,我还希望能够启动连接到 Xvfb 的x11vnc 服务器,但是如果我在 .screenrc 中对其进行工作调用,它完全不会出现。即使在启动之前调用sleep 也不会启动它:
screen -t VNC 2 /usr/bin/x11vnc -display :10 -bg -nopw -xkb -listen 127.0.0.1
编辑:我想我解决了 VNC 问题,复制粘贴命令通常是个坏主意!回去把一些标志改成:
screen -t VNC 2 /usr/bin/x11vnc -display WAIT:10 -nopw -xkb -forever -shared -listen 127.0.0.1 -logfile /tmp/x11vnc.log
取得更大的成功。我已经让 ChromeDriver 手动启动,现在正在研究是否可以使用 Fabric 启动它。
【问题讨论】:
标签: google-chrome ubuntu selenium fabric gnu-screen