我正在使用Selenium RC自动执行某些浏览器操作,但我希望浏览器不可见。这可能吗?怎么样?那么Selenium Grid呢?我也可以隐藏Selenium RC窗口吗?
有几个选择:
在MacOSX上,我无法隐藏浏览器窗口,但至少我想出了如何将其移动到不同的显示器,因此它不会破坏我的工作流程。当Firefox运行测试时,只需按住Control键并单击其中的图标,选择选项,然后选择分配给显示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重元素在多个站点上搜索鞋子的Web自动化机器人时使用它,节省的功率越多,程序越简单,就越容易以更快的速度运行多个进程可靠性。
在Linux上,您可以在无头(虚拟)显示中运行WebDriver来隐藏浏览器。这可以使用Xvfb(X虚拟帧缓冲区)完成。
您可以使用xvfbwrapper
:https://github.com/cgoldberg/xvfbwrapper直接从Python代码控制Xvfb
运行headless的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
我很容易设法隐藏浏览器窗口。
只是install PhantomJS。然后,更改此行:
driver = webdriver.Firefox()
至:
driver = webdriver.PhantomJS()
其余代码不需要更改,也不会打开浏览器。出于调试目的,请在代码的不同步骤中使用driver.save_screenshot('screen.png')
。
作为Windows服务,Selenium RC为+1。
为了让测试完全隐藏,我认为如果你在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
,可以方便地设置任何命令在虚拟显示器上运行。 Download it并使其可执行:
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 clean install
而已
在许多情况下,PhantomJS不能完全满足您的需求,我想详细说明Dave Hunt的答案中提到的无头镀铬选项。
chrome 57刚推出此功能。你可以通过ChromeDriver传递--headless标志来使用它,有关更多信息,请参阅this question中的讨论
有一个名为GhostDriver的PhantomJS相关项目,旨在使用webdriver wire JSON协议在Selenium Grid中运行PhantomJS实例。这可能是你正在寻找的,虽然这个问题现在已经有4年了。