2009-09-13 66 views
88

我正在使用Selenium RC自动化一些浏览器操作,但我希望浏览器不可见。这可能吗?怎么样?那么Selenium Grid呢?我还可以隐藏Selenium RC窗口吗?Selenium RC中可以隐藏浏览器吗?

+0

中的讨论可能不是可以接受的,但是像不能将浏览器从屏幕上移开(使用常规的Windows UI自动化? )像把窗口放在(-10000,-10000)? – BrainSlugs83 2014-03-23 04:24:06

+2

由于这个问题现在已经很老了,让我重定向到一个正确的最新答案[在本页底部](http://stackoverflow.com/a/23898054/1515819)。 – 2014-10-07 16:04:41

回答

83

有几个选项:

  • 从而使浏览器中打开一个完全不同的机器(或虚拟机),然后就可以通过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这样的服务,在这里你可以让你的测试在云中运行。测试完成后,您可以观看正在运行的视频。

+0

这里是关于创建bat文件来安装服务的说明: http://brantleytec.blogspot.com/2012/11/selenium-hub-and-node-as-windows-service.html – 2013-04-14 08:11:56

13

Selenium RC的+1作为Windows服务。

为了让测试完全隐藏起来,我认为如果你在windows上,你没有太多的解决方案。

我该怎么做才能使您的局域网中的计算机始终处于联机状态并运行硒RC服务器。因此,您使用该计算机的IP而不是本地主机来运行测试。例如:

browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com") 

(考虑到这是运行服务器的计算机的IP地址)。

有了这个设置,你可以在你的计算机上运行你的测试,浏览器和RC服务器窗口在另一台计算机上,一旦完成就返回给你。

4

如果您在Windows上,则有一个选项是在不同的用户帐户下运行测试。这意味着浏览器和java服务器对您自己的帐户不可见。

54

在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 
+2

在Ubuntu上像魔术一样工作。谢谢你。 – iChux 2014-04-17 08:54:45

+0

很好的解决方案,并感谢您的代码。 – SuB 2015-08-26 12:34:07

+0

当代码在虚拟浏览器中运行时,我可以在浏览器交互脚本运行时继续正常使用我的电脑吗? – Mugen 2016-07-06 18:14:19

3

这就是我如何在Linux桌面(Ubuntu)上使用maven运行我的测试。我厌倦了无法使用Firefox的webdriver始终关注焦点。

我安装xvfb的

xvfb的运行-a MVN干净的安装

完蛋了

+0

这通常是确保xvfb正在运行并由Selenium/WebDriver使用的最简单方法。 – 2014-12-17 10:12:55

12

在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 

所有浏览器窗口现在将使用虚拟显示器,将是不可见的你。

+0

'wget https:// raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh' – pic 2013-05-23 08:45:21

+0

URL更正,谢谢。 – pixelistik 2013-05-23 20:03:32

+0

此脚本有引用问题。如果我说./ephemeral-x.sh foo'*'它说“Running:foo”后跟我的目录内容。 – 2016-08-29 21:27:44

0

有一个PhantomJS相关项目,名为GhostDriver,这意味着使用webdriver wire JSON协议在Selenium Grid中运行PhantomJS实例。这可能是你正在寻找的东西,虽然这个问题现在已经4岁了。

17

我很容易设法隐藏浏览器窗口。

只是install PhantomJS。然后,改变这一行:

driver = webdriver.Firefox() 

到:

driver = webdriver.PhantomJS() 

你的代码的其余部分将不需要改变,没有浏览器将打开。出于调试目的,请在代码的不同步骤使用driver.save_screenshot('screen.png')

+5

值得一提的是,您必须放置PhantomJs.exe的路径才能使其工作。例如'driver = webdriver.PhantomJS(r“C:\\ phantomjs \ phantomjs.exe”)' – 2014-06-14 15:58:26

+1

是的,但只在Windows上。 – 2014-06-14 16:10:07

+0

只要可以从环境的$ PATH环境变量中找到,就不需要指定二进制文件的位置。 – 2017-11-10 03:59:51

0

在MacOSX上,我一直无法隐藏浏览器窗口,但至少我想出了如何将它移动到不同的显示器上,因此它不会中断我的工作流程。而Firefox正在运行的测试,只是在码头上,选择选项控制单击其图标,并分配到显示2.

0
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逻辑上将产生的浏览器需要一个功能。在开发环境中,处理不断弹出的窗口以及可能意外地使测试失败的窗口很烦人。

1

在许多情况下,PhantomJS不会完全满足您的需求,我想详细说明Dave Hunt的答案中提到的无头镀铬选项。

chrome 57刚推出此功能。您可以通过ChromeDriver传递--headless标志来使用它,更多信息请参见this question

相关问题