Selenium RC中可以隐藏浏览器吗?
我使用Selenium RC来自动执行一些浏览器操作,但我希望浏览器不可见。 这可能吗? 怎么样? selenium网格呢? 我可以隐藏Selenium RC窗口吗?
有几个选项:
-
您可以使用Selenium Grid,以便在完全不同的计算机(或虚拟机)上打开浏览器,然后可以通过VNC或远程桌面连接连接到浏览器。 此外,另一个选项是:如果您在该远程服务器上运行Jenkins前台进程,则可以在桌面上执行您的testing项目。
-
你可以在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那样允许我们访问桌面。
-
另一个select是使用像WebDriver HTMLUnitDriver,它不会启动一个“真正的”浏览器。 http://code.google.com/p/webdriver/ 。 还有一个PhantomJS选项,以及一个“无头的Chrome”,你可以使用。
-
当然,也可以select使用像SauceLabs这样的服务,在那里你可以让你的testing在云端运行。 testing完成后,您可以观看正在运行的video。
在Linux上,您可以在无头(虚拟)显示器中运行WebDriver以隐藏浏览器。 这可以用Xvfb(X虚拟帧缓冲区)完成。
您可以使用xvfbwrapper
从Python代码直接控制Xvfb: 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()
其余的代码将不需要更改,也不会打开浏览器。 为了进行debugging,请在代码的不同步骤使用driver.save_screenshot('screen.png')
。
Selenium RC的+1作为Windows服务。
为了让testing完全隐藏起来,我认为如果你在windows上,你没有太多的解决scheme。
我会这样做,使您的局域网内的计算机一直处于联机状态,并运行一个seleniumRC服务器。 所以你用这台计算机的IP而不是localhost来运行你的testing。 例如:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(考虑到这是运行服务器的计算机的IP)。
有了这个设置,你在电脑上运行你的testing,浏览器和RC服务器窗口在另一台电脑上,一旦完成就返回给你。
在Linux上,您可以在虚拟显示器上运行testing浏览器。 您将需要用于创build虚拟X服务器的xvfb
软件包。 在基于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创build的浏览器窗口现在都将使用虚拟显示,并且对您来说是不可见的。
如果你在Windows上,一个选项是在不同的用户帐户下运行testing 。 这意味着浏览器和Java服务器将不会显示给您自己的帐户。
这是我在Linux桌面(Ubuntu)上运行maven的testing。 我厌倦了不能与Firefox的webdriver总是工作重点。
我安装了xvfb
xvfb-run -a mvn clean install
而已
有一个PhantomJS相关的项目名为GhostDriver ,这意味着使用webdriver wire JSON协议在Selenium Grid中运行PhantomJS实例。 这可能是你正在寻找的,虽然这个问题现在是4岁。
在MacOSX上,我一直无法隐藏浏览器窗口,但至less我想出了如何将它移动到不同的显示器,所以它不会中断我的工作stream程。 当Firefox正在运行testing时,只需按住控制面板中的图标,select选项,并指定显示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所需的function,逻辑上会产生浏览器。 在开发环境中,处理不断popup的窗口以及可能无意中互相影响testing失败的窗口很烦人。
在很多情况下,PhantomJS将不会完全适合您的需求,我想详细说明Dave Hunt的答案中提到的无头镀铬选项。
铬57刚推出这个function。 您可以通过ChromeDriver传递–headless标志来使用它,更多信息请参阅这个问题的讨论