当我同时执行多个测试时,我不想让Firefox浏览器窗口可见。我可以使用selenium.minimizeWindow()
将其最小化,但我不想这样做。
有没有办法隐藏Firefox窗口?我正在使用FireFox WebDriver。
隐藏浏览器最简单的方法是安装PhantomJS。然后,修改这一行:
driver = webdriver.Firefox()
to:
driver = webdriver.PhantomJS()
您的代码其余部分无需更改,也不会打开任何浏览器。为了调试,请在代码的不同步骤中使用driver.save_screenshot('screen.png')
或切换回Firefox webdriver。
在Windows上,您需要指定phantomjs.exe的路径:
driver = webdriver.PhantomJS('C:\phantomjs-1.9.7-windows\phantomjs.exe')
可以看一下Ghost Driver:如何使用Java运行Selenium的Ghost Driver
C#
如何在PhantomDriver(无头浏览器)中隐藏FirefoxDriver(使用Selenium),而不会出现findElement函数错误?
flexbox
或WebGL这样的新网页功能。 - AnkoUserWarning: Selenium 对于 PhantomJS 的支持已被弃用,请改用 Chrome 或 Firefox 的 headless 版本
- Lal只需添加以下代码。
import os
os.environ['MOZ_HEADLESS'] = '1'
driver = webdriver.Firefox()
最终我找到了解决方案,适用于使用Windows机器运行任何测试的人们。虽然实现不是用Java,但你可以很容易地做到。
使用AutoIt
工具。它拥有处理Windows的所有功能,并且是免费的工具。
安装AutoIt: http://www.autoitscript.com/site/autoit/downloads/
打开编辑器并编写以下代码 隐藏任何窗口。
AutoItSetOption("WinTitleMatchMode", 2)
WinSetState("Title Of Your Window", "", @SW_HIDE)
要取消隐藏,您可以使用以下代码行。
AutoItSetOption("WinTitleMatchMode", 2)
WinSetState("Title Of Your Window", "", @SW_SHOW)
WinTitleMatchMode
有不同的选项可以用来匹配窗口标题。
1 = Match the title from the start (default)`
2 = Match any substring in the title
3 = Exact title match
4 = Advanced mode, see Window Titles & Text (Advanced)
所以,我所做的是:我创建了一个小程序的.exe文件,并将参数作为命令行参数传递,如下所示。Runtime.getRuntime().exec("C:/Diiinnovation/HideNSeek.exe 0 \"" + "Mozilla Firefox" + "\"");
下面是我在HideNSeek.exe
中使用的AutoIt代码:
AutoItSetOption("WinTitleMatchMode", 1)
if $CmdLine[0] > 0 Then
if $CmdLine[1] == 0 Then
WinSetState($CmdLine[2], "", @SW_HIDE)
ElseIf $CmdLine[1] == 1 Then
WinSetState($CmdLine[2], "", @SW_SHOW)
Else
EndIf
EndIf
$CmdLine[]
是一个数组,包含所有命令行参数...
$CmdLine[0] = number of Parameter
$CmdLine[1] = 1st Parameter after Exe Name
...
如果窗口标题中有任何空格,则必须使用双引号将其作为命令行参数传递,如上所示。
下面的代码行将执行AutoIt exe,如果我在第一个参数中传递'0',则它将隐藏窗口,如果我传递'1',则它将显示与标题匹配的窗口。
Runtime.getRuntime().exec("C:/Diiinnovation/HideNSeek.exe 0 \"" + "Mozilla Firefox" + "\"");
我希望这能对你有所帮助。谢谢!
只需执行(Python):
opts = webdriver.FirefoxOptions()
opts.headless = True
firefox = webdriver.Firefox(options=opts)
我使用xvfb解决了这个问题。
首先,安装Xvfb:
# apt-get install xvfb
在Debian/Ubuntu上;或者
# yum install xorg-x11-Xvfb
在Fedora/RedHat上,选择一个不太可能碰撞的显示器编号(即使您稍后添加了一个真正的显示器)- 像99这样高的编号应该可以。在此显示器上运行Xvfb,并关闭访问控制:
# Xvfb :99 -ac
现在在运行Selenium服务器之前,您需要确保您的显示设置为99(它本身会启动浏览器)。最简单的方法是将DISPLAY:= 99导出到Selenium的环境中。首先,请确保从命令行按如下方式工作:
现在你需要确保在运行Selenium服务器之前将你的显示器设置为99(服务器本身会启动浏览器)。最简单的方法是将DISPLAY=:99导出到Selenium的环境变量中。首先,确保从命令行正常运行Selenium:
$ export DISPLAY=:99
$ firefox
或者只是
$ DISPLAY=:99 firefox
下面有一个链接帮助了我
http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
xvfb-run
(至少在Ubuntu上是xvfb
软件包的一部分)更加简单:xvfb-run firefox
。 - David Röthlisbergerheadless
驱动程序:System.setProperty("webdriver.gecko.driver", firefoxDriverExePath);
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
FirefoxDriver driver = new FirefoxDriver(options);
headless
选项。只需添加这些代码,如果您使用Chrome浏览器则会生效,在Firefox中也很有用。
from selenium.webdriver.chrome.options import Options
'''option to make driver work background'''
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
火狐浏览器有一个无头模式,如果你想使用它,只需要在二进制选项中设置如下:
binary = FirefoxBinary("C:/Program Files/Mozilla Firefox/firefox.exe")
options = webdriver.FirefoxOptions()
# set headless mode on
options.set_headless(True)
driver = webdriver.Firefox(firefox_binary=binary,options=options)