私は今セレンを学んでいて、問題に遭遇しました。
Seleniumは、ドライバーなしでデフォルトで古いバージョンのFirefoxをサポートしていたことを認識しています。 Firefoxの最近のバージョンでは、ドライバーをダウンロードして、System.setProperty
を使用して定義する必要があります。
これによると link 、Firefox 45および46の場合、開始ドライバーコードは次のようになります。
WebDriver driver = new FirefoxDriver();
私のFirefoxはバージョン45.5.1です。しかし、上記のコードはまだ動作しません。したがって、これに応じて link を追加しました。
System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
そしてそれは働いた。
それから、コンピューターにgeckodriver.exe
をインストールしていないことに気付きました。それがどうなるかを見るために、以下のコードに変更しました。
System.setProperty("webdriver.firefox.marionette","");
まだ機能します。
だから、ここに私の最初の問題が来ます:何が起こったのですか?私の環境にはgeckodriver.exe
が存在しないと確信しています。場所が指定されていない場合、プロパティを設定する必要があるのはなぜですか?
また、私は次のようなコードを見てきました:
System.setProperty("webdriver.gecko.driver", "/tools/marionette/wires.exe");
2番目の質問は、webdriver.gecko.driver
とwebdriver.firefox.marionette
またはwires.exe
とgeckodriver.exe
の違いは何ですか?
バージョン45(バージョン47にプッシュ)まで、Firefoxの自動化に使用されたドライバーは各クライアントに含まれる拡張機能でした。ただし、おそらくすべての拡張機能がMozillaによって署名されるようになったポリシーの変更により、この拡張機能は削除されました。
Marionetteは、Firefoxに同梱/含まれている新しいドライバーです。このドライバーには、Selenium/WebDriverプロトコルと直接互換性のない独自のプロトコルがあります。
Geckoドライバー(以前の名前付きワイヤー)は、Selenium/WebDriverプロトコルを実装するアプリケーションサーバーです。 Seleniumコマンドを変換し、マリオネットドライバーに転送します。
Javaクライアントの場合、デフォルトの動作はGeckoドライバーを使用することですが、レガシー拡張機能をwebdriver.firefox.marionette
プロパティを持つドライバーとして使用するためにオーバーライドできます。
System.setProperty("webdriver.firefox.marionette", "false");
またはmarionette
を介してFirefoxOptions
機能を使用して:
FirefoxOptions options = new FirefoxOptions()
.setLegacy(true);
WebDriver driver = new FirefoxDriver(options);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, options.toDesiredCapabilities());
またはDesiredCapabilities
で直接:
DesiredCapabilities capa = DesiredCapabilities.firefox();
capa.setCapability("marionette", false);
WebDriver driver = new FirefoxDriver(capa);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, capa);
また、Geckoドライバーの場所を定義するには、PATH
環境変数にあるフォルダーにドライバーを配置するか、プロパティwebdriver.gecko.driver
で場所を定義します。
System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
または、コマンドラインで割り当てられたプロパティでリモートサーバーを起動します。
Java -Dwebdriver.gecko.driver="C:\\geckodriver.exe" -jar Selenium-server-standalone-3.4.0.jar
Firefox 47.xがリリースされるまで、レガシードライバはFirefox拡張機能として実装されていました。この拡張機能は、WebDriverがFirefoxを起動するたびにドライバーが使用するプロファイルにインストールされました。
したがって、次を使用しました。
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Firefox 48はブラウザ拡張機能を無効にし、WebDriverを導入しました。それ以来、GeckoDriver
は、Mozillaによって開発および保守されているMarionetteベースのソリューションは、Mozilla Firefoxブラウザを自動化するためのものです。
Mozillaの公式ドキュメント on developer.mozilla.org によると。 マリオネットは自動化ドライバーです。 UIを制御できるFirefoxのリモートプロトコルを使用します。マリオネットはリクエストを受け入れ、Geckoで実行します。また、クライアントがあります。クライアントはサーバーに指示を送信し、サーバーはブラウザー内で指示を実行します。
したがって、マリオネットの使用を開始しました。
System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
実行可能ファイルの名前を「wires.exe」に変更し、パスに追加するための参照がいくつかあります。したがって、次のものが使用されました。
System.setProperty("webdriver.firefox.marionette","C:\\wires.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
GeckoDriverは、システム内でダウンロードし、テストケースの実行中にスクリプト/プログラムでその場所を指定する必要がある実行可能ファイルです。次にGeckoDriverがMozilla Firefoxブラウザーを起動します。
これらの抜粋は、Jim Evanの質問に対する壮大な回答 から削除されました古いSelenium FirefoxDriverの代わりに、 Selenium tester? これにより、GeckoDriverおよびMarionetteがどのように実用化されたかを詳細に理解できます。
そのため、geckodriver.exeの使用を開始しました。
System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
現在のシナリオでは、従来のFirefox 47.xブラウザーと最近のFirefox 53.xブラウザーのリリースでもオートメーションを実行するオプションがあります。
従来のFirefox 47.xブラウザを使用する場合、次のようにDesiredCapabilitiesクラスを介して「marionette」を明示的にfalseに設定する必要があります。
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("firefox_binary", "C:\\Program Files\\Mozilla Firefox47\\firefox.exe");
dc.setCapability("marionette", false);
WebDriver driver = new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
従来のFirefox 47.xブラウザを使用する場合、「マリオネット」の設定をfalseにスキップするか、「マリオネット」の設定をtrueにすると、IllegalStateException
が表示されます。
Firefox 53.xブラウザーを使用する場合、次のように「マリオネット」をtrueに設定することをスキップして、マリオネットINFOログを表示できます。 Marionette INFO Listening on port 11105
:
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
Firefox 53.xブラウザーを使用する場合、DesiredCapabilitiesクラスを介して明示的に「marionette」をtrueに設定すると、Marionette WARNログも表示されます。 WARN TLS certificate errors will be ignored for this session
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
Firefox 53.xブラウザを使用している場合、DesiredCapabilitiesクラスを介して「マリオネット」を強制的にfalseに設定すると、UnreachableBrowserException
が表示されます。
マリオネットは、最新のFirefoxバージョンに同梱/含まれている新しいドライバーです。
ただし、Geckodriverは、W3C WebDriver互換クライアントを使用してGeckoベースのブラウザーと対話するためのプロキシです。 Geckodriverは、WebDriverプロトコルで記述されたHTTP APIを提供し、47以上のFirefoxバージョンなどのGeckoブラウザーと通信します。
System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
それでも問題が発生する場合(FFバージョンの非互換性のため)、次の機能を使用できます。
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);