如何隐藏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
工具。 它具有处理窗口的所有能力。 这是免费的工具。
-
安装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)
所以我在做的是:我已经创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最初打开时被最小化。 这让我对这个问题感到厌烦。 只要做到以下几点:
- 打开Firefox
- 点击菜单栏左上angular的Firefox图标 – >高级 – >特殊应用程序设置…
- 转到“大小和位置”选项卡。
- 点击“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呼叫期间在远程服务器上打开浏览器