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


92

我正在使用Selenium RC自动执行一些浏览器操作,但我希望浏览器不可见。这可能吗?怎么样?硒网格呢?我也可以隐藏Selenium RC窗口吗?


可能不可接受,但是就像您不能只是将浏览器从屏幕上移开(使用常规的Windows UI自动化?)一样,将窗口放置在(-10000,-10000)上吗?
BrainSlugs83 2014年

2
由于这个问题现在已经很老了,让我将您重定向到此页面底部的正确最新答案。
斯特凡Bruckert

Answers:


87

有几种选择:

  • 您可以使用Selenium Grid,以便在完全不同的计算机(或虚拟机)上打开浏览器,然后如果您想查看浏览器,则可以通过VNC或远程桌面连接连接到该计算机。另外,还有一个选择:如果您在该远程服务器上运行Jenkins前台进程,则它可以在桌面上执行测试项目。

  • 您可以在XVFB中的Linux上“无头运行” Selenium。我从未尝试过这样做,并且怀疑这样做是否值得。http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

  • 您可以将Selenium RC包装在Windows服务中。http://support.microsoft.com/kb/137890。除了对更高版本的Windows的权限限制之外,Selenium可能会阻止Selenium访问桌面,例如Windows 2000允许我们这样做。

  • 另一个选择是使用WebDriver HTMLUnitDriver之类的东西,它不会启动“真实”浏览器。http://code.google.com/p/webdriver/ 。还有一个PhantomJS选项以及一个可以使用的“无头Chrome”。

  • 当然,还可以使用诸如SauceLabs之类的服务,您可以在其中使测试在云中运行。测试完成后,您可以观看它们正在运行的视频。


下面是创建一个批处理文件来安装服务的说明: brantleytec.blogspot.com/2012/11/...
布兰特利·布兰查德

58

在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

当代码在虚拟浏览器中运行时,在运行浏览器交互脚本时能否正常使用PC?
Mugen

资源被占用,您的机器将变慢!
Tim Long

22

我轻松地设法隐藏了浏览器窗口。

只需安装PhantomJS即可。然后,更改此行:

driver = webdriver.Firefox()

至:

driver = webdriver.PhantomJS()

您的其余代码无需更改,也不会打开浏览器。为了进行调试,请driver.save_screenshot('screen.png')在代码的不同步骤中使用。


5
值得一提的是,您必须放置PhantomJs.exe的路径才能使其正常工作。示例driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG 2014年

1
是的,但仅在Windows上。
斯特凡Bruckert

1
只要您可以从环境的$ PATH环境变量中找到二进制文件,就无需指定二进制文件的位置。
科里·戈德堡

13

+1作为Windows服务的Selenium RC。

对于完全隐藏的测试,如果您使用的是Windows,我认为您没有太多解决方案。

我要做的是使局域网中的计算机始终保持在线状态,并运行硒RC服务器。因此,您使用该计算机的IP而不是本地主机来运行测试。例如:

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

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

完成该设置后,您可以在计算机中运行测试,浏览器和RC服务器窗口位于另一台计算机中,完成后返回到您的计算机。


12

在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创建的所有浏览器窗口现在都将使用虚拟显示,并且对您不可见。


该脚本存在报价问题。如果我说./ephemeral-x.sh foo'*',它说“ Running:foo”,后跟目录的内容。
Nick Retallack,


3

这就是我在Linux桌面(Ubuntu)上使用Maven运行测试的方式。我受够了无法始终专注于firefox webdriver的工作。

我安装了xvfb

xvfb-run -a mvn全新安装

而已


这通常是确保Selenium / WebDriver运行和使用xvfb的最简单方法。
Samuli Pahaoja 2014年

1

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

chrome 57刚刚启动了此功能。您可以通过ChromeDriver传递--headless标志,以获得更多信息使用它看在讨论这个问题,


0

有一个与PhantomJS相关的项目,称为 GhostDriver,该旨在使用Webdriver Wire JSON协议在Selenium Grid中运行PhantomJS实例。尽管这个问题已有4年的历史了,但这可能正是您要寻找的东西。


0

在MacOSX上,我无法隐藏浏览器窗口,但至少我想出了如何将其移动到其他显示器上,以免对我的工作流程造成太大干扰。在Firefox运行测试时,只需按住Control键并在扩展坞中单击其图标,选择“选项”,然后分配给Display 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的开发人员都需要的功能,该功能从逻辑上将产生浏览器。在开发环境中,处理不断弹出的窗口很烦人,您可能会不小心进行交互以使测试失败。


0

使用无头Chrome可能是最好的选择,或者您可以直接发布到网站上与之交互,这将为其他事物/过程节省大量计算能力。在测试使用cpu重元素在多个站点上搜索鞋子的Web自动化机器人时,会使用此功能,这样可以节省更多电量,并且程序越简单,一次运行多个进程的速度就越高,速度越快,可靠性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.