在Selenium RC中可以隐藏浏览器吗?

94 投票
13 回答
94875 浏览
提问于 2025-04-15 14:17

我正在使用Selenium RC来自动化一些浏览器操作,但我希望浏览器是看不见的。这可能吗?怎么做?那Selenium Grid呢?我能把Selenium RC的窗口也隐藏起来吗?

13 个回答

24

我很轻松地把浏览器窗口隐藏起来了。

只需要安装 PhantomJS。然后,把这一行改成:

driver = webdriver.Firefox()

改成:

driver = webdriver.PhantomJS()

你其他的代码就不需要改动了,这样就不会打开浏览器了。为了调试方便,可以在代码的不同步骤使用 driver.save_screenshot('screen.png') 来保存屏幕截图。

59

在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
87

这里有几个选择:

  • 你可以使用Selenium Grid,这样浏览器就可以在另一台完全不同的机器(或者虚拟机)上打开。如果你想看到浏览器的界面,可以通过VNC或者远程桌面连接到那台机器。另外一个选择是,如果你在那台远程服务器上运行Jenkins的前台进程,它可以在桌面上执行你的测试项目。

  • 你可以在Linux上用无头模式运行Selenium,使用XVFB。我自己没有尝试过这个,觉得可能不太值得去做。 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这样的服务,在云端运行你的测试。测试完成后,你可以观看它们运行的视频。

撰写回答