複数のテストを同時に実行する場合、Firefoxブラウザーウィンドウを表示したままにしたくありません。Selenium.minimizeWindow()
を使用して最小化できますが、実行したくありません。
Firefoxウィンドウを非表示にする方法はありますか? FireFox WebDriverを使用しています。
最後に、任意の方法を使用してテストを実行するためにWindows Machineを使用しているユーザー向けのソリューションを見つけました。さて、実装は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" + "\"");
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" + "\"");
これがお役に立てば幸いです。ありがとう!
ブラウザを非表示にする最も簡単な方法は、 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')
_
Ghost Driverをご覧ください: Javaを使用してSeleniumでghostdriverを実行する方法
C#
_このような問題を解決するために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/
次のコードを追加するだけで、正常に機能します。
import os
os.environ['MOZ_HEADLESS'] = '1'
driver = webdriver.Firefox()
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
オプションもあります。
これらを追加するだけで、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')
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)
Selenium RCまたはRemote WebDriverを使用している場合、リモートまたは仮想マシンでブラウザーインスタンスを実行できます。これは、ローカルマシンでブラウザウィンドウが起動されないため、ブラウザウィンドウを隠すことを心配する必要がないことを意味します。
KDEデスクトップを使用している場合は、Firefox Windowsを最小化して最初に開くようにすることができます。それがこの問題に関する私の一日でした。以下を実行してください。
これらの設定は今後、新しいFirefoxウィンドウに適用され、Webdriverでテストを実行するときにポップアップが表示されることはなくなります。
ただ(Python):
opts = webdriver.FirefoxOptions()
opts.headless = True
firefox = webdriver.Firefox(options=opts)
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/
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);
オプション(Firefoxオプション、chrome options)
set_headlessメソッドを呼び出して、ブール型のヘッドレスをtrueに設定します。
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の呼び出し中にリモートサーバーでブラウザーを開かないでください