当我同时执行多个测试时,我不想让Firefox浏览器窗口可见..我可以使用selenium.minimizeWindow()
将其最小化,但我不想这样做。
有没有办法隐藏Firefox窗口?我正在使用FireFox WebDriver。
答案 0 :(得分:61)
隐藏浏览器的最简单方法是install PhantomJS。然后,更改此行:
driver = webdriver.Firefox()
为:
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:How to run ghostdriver with Selenium using java
C#
How to hide FirefoxDriver (using Selenium) or put it in C#Form
答案 1 :(得分:16)
最后,我找到了那些使用Windows机器以任何方法运行测试的解决方案。好吧,实现不是Java,但你可以很容易地实现。
使用AutoIt
工具。它具有处理窗口的所有功能。这是一个免费的工具。
安装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
有不同的选项可用于匹配Windows标题。
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" + "\"");
我希望这会对你有所帮助。谢谢!
答案 2 :(得分:11)
我用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的环境中。首先,确保事情正在从命令行运行,如下所示:
$ export DISPLAY=:99
$ firefox
或只是
$ DISPLAY=:99 firefox
下面有一个帮助我的链接 http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
答案 3 :(得分:6)
只需添加以下代码即可。
import os
os.environ['MOZ_HEADLESS'] = '1'
driver = webdriver.Firefox()
答案 4 :(得分:4)
PhantomJS的默认浏览器是IE,但许多浏览器功能在那里不起作用。如果要打开无头(隐藏)Firefox窗口,可以使用new feature of Firefox 56+。
使用此功能,您可以获得headless
这样的驱动程序:
System.setProperty("webdriver.gecko.driver", firefoxDriverExePath);
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
FirefoxDriver driver = new FirefoxDriver(options);
新版Chrome还具有headless
选项。
答案 5 :(得分:3)
如果您使用的是Selenium RC或Remote WebDriver,则可以在远程或虚拟机上运行浏览器实例。这意味着您不必担心隐藏浏览器窗口,因为它们不会在本地计算机上启动。
答案 6 :(得分:2)
如果您使用的是KDE桌面,则可以使Firefox Windows最初打开时最小化。对我来说这是关于这个问题的一天。只需执行以下操作:
从现在开始,这些设置将适用于新的Firefox窗口,并且在使用Webdriver运行测试时,您不会再受到弹出窗口的困扰。
答案 7 :(得分:2)
Firefox有无头模式。如果你想使用它,你只需要在二进制选项上设置它,如下所示:
<p id="ex1" style="color: red;">red</p>
<p id="ex2">f</p>
<script type="text/javascript">
var myElement = document.getElementById('ex1');
if (myElement.style.color = red){
document.getElementById('ex2').innerHTML = 'red';
}
</script>
答案 8 :(得分:1)
我在使用ChromeDriver时遇到了类似的问题(我需要在测试运行时最小化浏览器窗口)。我找不到更好的方法,所以我最终使用键盘组合Alt + Space,N来做到这一点。这应该仅适用于Windows,该示例使用Java AWT Robot类来播放键盘快捷键:
//Alt + Space to open the window menu
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_SPACE);
robot.keyRelease(KeyEvent.VK_SPACE);
robot.keyRelease(KeyEvent.VK_ALT);
Thread.sleep(200);
// miNimize
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
答案 9 :(得分:1)
根据Stéphane的建议,我发现最简单的方法是使用PhantomJS。我下载了二进制文件并将phantomjs放在我的PATH中,在我的情况下(Mac OS)放在/ usr / bin /中。我喜欢保留选项,看看发生了什么,所以我把它包装成这样(在Python中):
def new_driver():
if 'VISIBLE_WEBDRIVER' in os.environ:
return webdriver.Firefox()
else:
return webdriver.PhantomJS()
参考文献:
http://blog.likewise.org/2013/04/webdriver-testing-with-python-and-ghostdriver/
http://www.realpython.com/blog/python/headless-selenium-testing-with-python-and-phantomjs/
答案 10 :(得分:1)
只需(Python):
opts = webdriver.FirefoxOptions()
opts.headless = True
firefox = webdriver.Firefox(options=opts)
答案 11 :(得分:1)
只需添加这些即可,如果您使用的是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')
答案 12 :(得分:0)
在Java中,您可以使用HtmlUnitDriver启动无头浏览器会话,该会话实际上不会打开浏览器。
将以下依赖项添加到您的pom.xml(或下载并参考以下内容):
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.15</version>
</dependency>
...并像测试WebDriver驱动程序一样测试它:
driver = new HtmlUnitDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("http://www.google.com");
// etc..
driver.quit();
SO中的另一个类似问题:Avoid opening browser on remote server during selenium call
答案 13 :(得分:0)
在选项中(Firefox选项,chrome选项)
通过调用set_headless方法将布尔无头设置为true。