我正在使用 Selenium RC 自动执行一些浏览器操作,但我希望浏览器不可见。这可能吗?如何?Selenium 网格呢?我也可以隐藏 Selenium RC 窗口吗?
12 回答
有几个选项:
您可以使用 Selenium Grid,以便在完全不同的机器(或虚拟机)上打开浏览器,然后如果您想查看浏览器,您可以通过 VNC 或远程桌面连接连接到该机器。另外,另一种选择:如果您在该远程服务器上运行 Jenkins 前台进程,它可以在桌面上执行您的测试项目。
您可以在 XVFB 中的 Linux 上运行 Selenium 'headless'。我从来没有尝试过这样做,并且怀疑它是否真的值得付出努力。http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
您可以将 Selenium RC 包装在 Windows 服务中。http://support.microsoft.com/kb/137890。除了更高版本的 Windows 上的权限限制可能会阻止 Selenium 访问桌面,就像 Windows 2000 过去允许我们做的那样。
另一种选择是使用 WebDriver HTMLUnitDriver 之类的东西,它不会启动“真正的”浏览器。http://code.google.com/p/webdriver/ 。还有一个 PhantomJS 选项以及您可以使用的“无头 Chrome”。
当然,您也可以选择使用像 SauceLabs 这样的服务,您可以在其中让您的测试在云中运行。测试完成后,您可以观看他们运行的视频。
在 Linux 上,您可以在无头(虚拟)显示器中运行 WebDriver 以隐藏浏览器。这可以通过 Xvfb(X 虚拟帧缓冲区)来完成。
您可以使用以下命令直接从 Python 代码控制 Xvfb xvfbwrapper
:
https ://github.com/cgoldberg/xvfbwrapper
无头运行的 Python 代码如下所示:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
在 Debian/Ubuntu 上安装依赖项:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
我很容易设法隐藏浏览器窗口。
只需安装 PhantomJS。然后,更改此行:
driver = webdriver.Firefox()
到:
driver = webdriver.PhantomJS()
您的其余代码无需更改,也不会打开任何浏览器。出于调试目的,driver.save_screenshot('screen.png')
请在代码的不同步骤中使用。
+1 将 Selenium RC 作为 Windows 服务。
为了让测试完全隐藏起来,我认为如果你在 Windows 上,你没有太多的解决方案。
我会做的是让你的局域网中的一台计算机一直在线并运行一个 selenium RC 服务器。因此,您使用该计算机的 IP 而不是 localhost 来运行您的测试。例如:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(考虑到这是运行服务器的计算机的 ip)。
有了这个设置,你在你的计算机上运行你的测试,浏览器和 RC 服务器窗口在另一台计算机上,一旦完成就回到你的。
在 Linux 上,您可以在虚拟显示器上运行测试浏览器。您将需要xvfb
用于创建虚拟 X 服务器的包。在基于 Debian 的发行版上,只需运行
sudo apt-get install xvfb
有一个很好的工具ephemeral-x.sh
可以方便地设置任何命令以在虚拟显示器上运行。下载并使其可执行:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
然后你可以简单地使用它来启动 Selenium 服务器:
./ephemeral-x.sh java -jar selenium-standalone.jar
Selenium 创建的所有浏览器窗口现在都将使用虚拟显示器,并且对您不可见。
如果您在 Windows 上,一种选择是在不同的用户帐户下运行测试。这意味着您自己的帐户将看不到浏览器和 java 服务器。
这就是我在 linux 桌面 (Ubuntu) 上使用 maven 运行测试的方式。我厌倦了无法使用始终专注的 Firefox webdriver。
我安装了xvfb
xvfb-run -a mvn 全新安装
就是这样
在许多情况下,PhantomJS 不能完全满足您的需求,我想详细说明 Dave Hunt 的回答中提到的 headless chrome 选项。
chrome 57 刚刚推出了这个功能。您可以通过 ChromeDriver 传递 --headless 标志来使用它,有关更多信息,请参阅此问题中的讨论
有一个名为GhostDriver的 PhantomJS 相关项目,旨在使用 webdriver 有线 JSON 协议在 Selenium Grid 中运行 PhantomJS 实例。这可能就是您正在寻找的,尽管这个问题现在已经 4 岁了。
在 MacOSX 上,我无法隐藏浏览器窗口,但至少我想出了如何将其移动到不同的显示器,这样它就不会过多地干扰我的工作流程。在 Firefox 运行测试时,只需按住 Control 并单击 Dock 中的图标,选择选项,然后分配给显示器 2。
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
顺便说一句,这是任何运行 e2e 的开发人员都需要的功能,它在逻辑上会产生浏览器。在开发环境中,处理不断弹出的窗口以及您可能意外交互导致测试失败的窗口是很烦人的。
使用无头 Chrome 将是您最好的选择,或者您可以直接发布到该站点以与之交互,这将为其他事物/进程节省大量计算能力。我在测试使用 cpu 重元素在多个站点上搜索鞋子的网络自动化机器人时使用它,您节省的功率越多,程序越简单,一次运行多个进程就越容易,而且速度更快,并且可靠性。