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

问题描述 投票:89回答:12

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

python selenium selenium-rc
12个回答
85
投票

有几个选择:

  • 您可以使用Selenium Grid,以便在完全不同的计算机(或虚拟机)上打开浏览器,然后如果要查看浏览器,则可以通过VNC或远程桌面连接进行连接。另外,另一个选择是:如果在该远程服务器上运行Jenkins前台进程,它可以在桌面上执行您的测试项目。
  • 你可以在XVFB的Linux上运行Selenium'headless'。我从来没有尝试过这样做,并怀疑这是值得的。 http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
  • 您可以在Windows服务中包装Selenium RC。 http://support.microsoft.com/kb/137890。除了对更高版本的Windows的权限限制可能会阻止Selenium访问桌面,就像Windows 2000曾经允许我们这样做。
  • 另一个选择是使用像WebDriver HTMLUnitDriver这样的东西,它不会启动“真正的”浏览器。 http://code.google.com/p/webdriver/。还有一个PhantomJS选项以及你可以使用的“无头Chrome”。
  • 当然,也可以选择使用像SauceLabs这样的服务,在那里你可以让你的测试在云端运行。测试完成后,您可以观看他们正在运行的视频。

0
投票

在MacOSX上,我无法隐藏浏览器窗口,但至少我想出了如何将其移动到不同的显示器,因此它不会破坏我的工作流程。当Firefox运行测试时,只需按住Control键并单击其中的图标,选择选项,然后选择分配给显示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自动化机器人时使用它,节省的功率越多,程序越简单,就越容易以更快的速度运行多个进程可靠性。


57
投票

在Linux上,您可以在无头(虚拟)显示中运行WebDriver来隐藏浏览器。这可以使用Xvfb(X虚拟帧缓冲区)完成。

您可以使用xvfbwrapperhttps://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

21
投票

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

只是install PhantomJS。然后,更改此行:

driver = webdriver.Firefox()

至:

driver = webdriver.PhantomJS()

其余代码不需要更改,也不会打开浏览器。出于调试目的,请在代码的不同步骤中使用driver.save_screenshot('screen.png')


13
投票

作为Windows服务,Selenium RC为+1。

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

我要做的就是让你的局域网中的计算机一直在线,并运行selenium RC服务器。因此,您使用该计算机的IP而不是localhost来运行测试。例如:

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,可以方便地设置任何命令在虚拟显示器上运行。 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创建的所有浏览器窗口现在都将使用虚拟显示,并且对您来说是不可见的。


4
投票

如果您使用的是Windows,则可以选择在其他用户帐户下运行测试。这意味着您自己的帐户将无法看到浏览器和Java服务器。


3
投票

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

我安装了xvfb

xvfb-run -a mvn clean install

而已


1
投票

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

chrome 57刚推出此功能。你可以通过ChromeDriver传递--headless标志来使用它,有关更多信息,请参阅this question中的讨论


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.