web-dev-qa-db-ja.com

Firefoxウィンドウ(Selenium WebDriver)を非表示にする方法は?

複数のテストを同時に実行する場合、Firefoxブラウザーウィンドウを表示したままにしたくありません。Selenium.minimizeWindow()を使用して最小化できますが、実行したくありません。

Firefoxウィンドウを非表示にする方法はありますか? FireFox WebDriverを使用しています。

42
OverrockSTAR

最後に、任意の方法を使用してテストを実行するためにWindows Machineを使用しているユーザー向けのソリューションを見つけました。さて、実装は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)
    

だから、私がやったことは、小さなプログラムの.exeファイルを作成し、以下のようにコマンドライン引数としてパラメータを渡しました。

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

in 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を実行し、1番目のパラメーターに '0'を渡すと、ウィンドウが非表示になり、 '1'その後、タイトルに一致するウィンドウを再表示します。

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

これがお役に立てば幸いです。ありがとう!

16
OverrockSTAR

Python

ブラウザを非表示にする最も簡単な方法は、 install PhantomJS です。次に、この行を変更します。

_driver = webdriver.Firefox()
_

に:

_driver = webdriver.PhantomJS()
_

コードの残りの部分を変更する必要はなく、ブラウザは開きません。デバッグのために、コードのさまざまなステップでdriver.save_screenshot('screen.png')を使用するか、Firefox Webドライバーに再度切り替えます。

Windowsでは、phantomjs.exeへのパスを指定する必要があります。

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

Java

Ghost Driverをご覧ください: Javaを使用してSeleniumでghostdriverを実行する方法


_C#_

Seleniumを使用してFirefoxDriverを非表示にする方法、またはC#Formに配置する方法

63

このような問題を解決するために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/

11

次のコードを追加するだけで、正常に機能します。

import os
os.environ['MOZ_HEADLESS'] = '1'
driver = webdriver.Firefox()
10
Harriet.O

PhantomJSのデフォルトのブラウザーはIEですが、多くのブラウザー機能はそこでは動作しません。ヘッドレス(非表示)Firefoxウィンドウを開きたい場合は、 Firefox 56+の新機能 を使用できます。

この機能を使用すると、次のようなheadlessドライバーを取得できます。

System.setProperty("webdriver.gecko.driver", firefoxDriverExePath);
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
FirefoxDriver driver = new FirefoxDriver(options);

Chrome=の新しいバージョンには、headlessオプションもあります。

7
IT man

これらを追加するだけで、Firefoxでも役立つChromeを使用している場合に機能します

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')
4
shinji

Firefoxにはヘッドレスモードがあります。使用する場合は、次のようなバイナリオプションで設定するだけです。

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)
3
MSS

Selenium RCまたはRemote WebDriverを使用している場合、リモートまたは仮想マシンでブラウザーインスタンスを実行できます。これは、ローカルマシンでブラウザウィンドウが起動されないため、ブラウザウィンドウを隠すことを心配する必要がないことを意味します。

3
Dave Hunt

KDEデスクトップを使用している場合は、Firefox Windowsを最小化して最初に開くようにすることができます。それがこの問題に関する私の一日でした。以下を実行してください。

  1. Firefoxを開く
  2. メニューバーの左上隅にあるFirefoxアイコンをクリックします->詳細設定->特別なアプリケーション設定...
  3. [サイズと位置]タブに移動します。
  4. [最小化]をクリックし、[最初に適用](はい)を選択します。

これらの設定は今後、新しいFirefoxウィンドウに適用され、Webdriverでテストを実行するときにポップアップが表示されることはなくなります。

2
Clint Eastwood

ただ(Python):

opts = webdriver.FirefoxOptions()
opts.headless = True
firefox = webdriver.Firefox(options=opts)
2
Johny

Stéphaneの提案に従って、最も簡単な方法はPhantomJSを使用することであることがわかりました。バイナリをダウンロードし、私のケース(Mac OS)では/ usr/bin /にPATHにphantomjsを入れました。私は何が起こっているかを見るオプションを保持したいので、このようにラップしました(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/

1
Adam Wildavsky

Java

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);
1
vanangelov

オプション(Firefoxオプション、chrome options)

set_headlessメソッドを呼び出して、ブール型のヘッドレスをtrueに設定します。

0
rinjan

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の別の同様の質問: Seleniumの呼び出し中にリモートサーバーでブラウザーを開かないでください

0
Fuzzy Analysis