如何隐藏Firefox窗口(Selenium WebDriver)?

当我同时执行多个testing时,我不想保持Firefox浏览器窗口可见..我可以使用selenium.minimizeWindow()尽量减less它,但我不想这样做。

有什么办法可以隐藏Firefox窗口? 我正在使用FireFox WebDriver。

python

隐藏浏览器最简单的方法是安装PhantomJS 。 然后,改变这一行:

 driver = webdriver.Firefox() 

至:

 driver = webdriver.PhantomJS() 

其余的代码将不需要更改,也不会打开浏览器。 为了进行debugging,请在代码的不同步骤使用driver.save_screenshot('screen.png') ,或者再次切换到Firefox webdriver。

在Windows上,您将不得不指定phantomjs.exe的path:

 driver = webdriver.PhantomJS('C:\phantomjs-1.9.7-windows\phantomjs.exe') 

Java的

看看Ghost Driver: 如何使用java运行Selenium的ghostdriver


C#

如何隐藏FirefoxDriver(使用Selenium)或把它放在C#表单

最后,我find了那些使用Windows机器运行testing的解决scheme。 那么,实现不是在Java中,但你可以很容易地做到这一点。

使用AutoIt工具。 它具有处理窗口的所有能力。 这是免费的工具。

  1. 安装AutoIt: http ://www.autoitscript.com/site/autoit/downloads/

  2. 打开编辑器并在下面写下隐藏任何窗口的代码。

     AutoItSetOption("WinTitleMatchMode", 2) WinSetState("Title Of Your Window", "", @SW_HIDE) 
  3. 要取消隐藏它,您可以使用下面的代码行。

     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) 

所以我在做的是:我已经创build了一个小程序的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 . . 

如果窗口标题中有任何空格,则必须使用双引号将其作为上面的命令行parameter passing。

下面的代码行将执行AutoIt exe,如果我在第一个参数中传递“0” ,那么它将隐藏窗口,如果我将传递“1”,那么将取消隐藏匹配标题的窗口。

 Runtime.getRuntime().exec("C:/Diiinnovation/HideNSeek.exe 0 \"" + "Mozilla Firefox" + "\""); 

我希望这能帮到您。 谢谢!

我用xvfb来解决这个问题。

首先,安装Xvfb:

 # apt-get install xvfb 

在Debian / Ubuntu上; 要么

 # yum install xorg-x11-Xvfb 

在Fedora / RedHat上。 然后,select一个不太可能发生冲突的显示号码(即使您以后再添加一个真实的显示器) – 像99这样高的值应该这样做。 在此显示器上运行Xvfb,并closures访问控制:

 # 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/

如果您使用的是Selenium RC或Remote WebDriver,则可以在远程或虚拟机上运行浏览器实例。 这意味着您不必担心隐藏浏览器窗口,因为它们不会在本地计算机上启动。

如果您使用的是KDE桌面,则可以使Firefox Windows最初打开时被最小化。 这让我对这个问题感到厌烦。 只要做到以下几点:

  1. 打开Firefox
  2. 点击菜单栏左上angular的Firefox图标 – >高级 – >特殊应用程序设置…
  3. 转到“大小和位置”选项卡。
  4. 点击“Minimized”并select“Apply Initialial”(YES)。

这些设置将从现在开始应用于新的Firefox窗口,并且在使用Webdriver运行testing时不会再为popup窗口而烦恼。

根据Stéphane的build议,我发现最简单的方法就是使用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/

Java的

我有一个与ChromeDriver类似的问题(我需要在testing运行时尽量减less浏览器窗口)。 我找不到一个更好的方法来做到这一点,所以我最终使用了键盘组合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); 

在Java中,您可以使用HtmlUnitDriver来启动一个不会真正打开浏览器的无头浏览器会话。

将以下依赖项添加到您的pom.xml(或下载并引用以下内容):

 <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.15</version> </dependency> 

…并testing它,你会像一个WebDriver驱动程序实例:

  driver = new HtmlUnitDriver(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get("http://www.google.com"); // etc.. driver.quit(); 

SO中的另一个类似问题: 避免在selenium呼叫期间在远程服务器上打开浏览器