1. ホーム
  2. java

[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。

2022-01-26 23:22:01

質問

Mozillaを起動しようとしているのですが、このエラーが発生します。

スレッド "main" java.lang.IllegalStateException で例外が発生しました。ドライバ実行ファイルのパスは、webdriver.gecko.driver システムプロパティによって設定される必要があります。 https://github.com/mozilla/geckodriver . 最新版は以下からダウンロードできます。 https://github.com/mozilla/geckodriver/releases

を使っています。 Selenium 3.0.01 ベータ版と Mozilla 45 . で試してみました。 Mozilla 47 でも、やはり同じです。

解決方法は?

その Selenium クライアントバインディングは geckodriver システムから実行可能な PATH . 実行ファイルを含むディレクトリをシステムパスに追加する必要があります。

  • について Unix をシステムの検索パスに追加するには、bash 互換のシェルを使用している場合、次のようにします。

    export PATH=$PATH:/path/to/geckodriver
    
    
  • について ウィンドウズ を使用する場合は、システム変数 Path を更新して、実行ファイルへのフルディレクトリパスを追加する必要があります。原理はUnixと同じです。

任意のプログラミング言語バインディングを使用して最新のFirefoxを起動するための以下のすべての構成は、以下のものに適用されます。 Selenium2 で明示的にMarionetteを有効にしてください。Selenium 3.0 以降では、Marionette はデフォルトで有効になっているので、何もする必要はないでしょう。

Marionette をテストに使用するには、希望する機能を更新する必要があります。

ジャワ :

この例外は、最新版をダウンロードする必要があることを明確に示しています。 geckodriver.exe から ここで を設定し、ダウンロードした geckodriver.exe という変数で、システムプロパティとして、コンピュータに存在するパスを指定します。 webdriver.gecko.driver 以下のように、Marionetteドライバを起動し、Firefoxを起動する前に:-)

//if you didn't update the Path system variable to add the full directory path to the executable as above mentioned then doing this directly through code
System.setProperty("webdriver.gecko.driver", "path/to/geckodriver.exe");

//Now you can Initialize marionette driver to launch firefox
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new MarionetteDriver(capabilities); 

そして Selenium3 として使用します。

WebDriver driver = new FirefoxDriver();

もし、まだ問題があるようなら、このリンクも参照してください。

.NET :

var driver = new FirefoxDriver(new FirefoxOptions());

パイソン :

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.FIREFOX

# Tell the Python bindings to use Marionette.
# This will not be necessary in the future,
# when Selenium will auto-detect what remote end
# it is talking to.
caps["marionette"] = True

# Path to Firefox DevEdition or Nightly.
# Firefox 47 (stable) is currently not supported,
# and may give you a suboptimal experience.
#
# On Mac OS you must point to the binary executable
# inside the application package, such as
# /Applications/FirefoxNightly.app/Contents/MacOS/firefox-bin
caps["binary"] = "/usr/bin/firefox"

driver = webdriver.Firefox(capabilities=caps)

ルビー :

# Selenium 3 uses Marionette by default when firefox is specified
# Set Marionette in Selenium 2 by directly passing marionette: true
# You might need to specify an alternate path for the desired version of Firefox

Selenium::WebDriver::Firefox::Binary.path = "/path/to/firefox"
driver = Selenium::WebDriver.for :firefox, marionette: true

JavaScript (Node.js) :

const webdriver = require('selenium-webdriver');
const Capabilities = require('selenium-webdriver/lib/capabilities').Capabilities;

var capabilities = Capabilities.firefox();

// Tell the Node.js bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.set('marionette', true);

var driver = new webdriver.Builder().withCapabilities(capabilities).build();

使用方法 RemoteWebDriver

を使用したい場合は RemoteWebDriver をどの言語でも使用できるようになります。 MarionetteSelenium グリッド

パイソン :

caps = DesiredCapabilities.FIREFOX

# Tell the Python bindings to use Marionette.
# This will not be necessary in the future,
# when Selenium will auto-detect what remote end
# it is talking to.
caps["marionette"] = True

driver = webdriver.Firefox(capabilities=caps)

ルビー :

# Selenium 3 uses Marionette by default when firefox is specified
# Set Marionette in Selenium 2 by using the Capabilities class
# You might need to specify an alternate path for the desired version of Firefox

caps = Selenium::WebDriver::Remote::Capabilities.firefox marionette: true, firefox_binary: "/path/to/firefox"
driver = Selenium::WebDriver.for :remote, desired_capabilities: caps

ジャワ :

DesiredCapabilities capabilities = DesiredCapabilities.firefox();

// Tell the Java bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.setCapability("marionette", true);

WebDriver driver = new RemoteWebDriver(capabilities); 

.NET

DesiredCapabilities capabilities = DesiredCapabilities.Firefox();

// Tell the .NET bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.SetCapability("marionette", true);

var driver = new RemoteWebDriver(capabilities); 

Note : 他のブラウザベンダーから Selenium に提供されている他のドライバのように、Mozilla はブラウザと一緒に動作する実行ファイルをリリースしています。フォローする これ をご覧ください。

最新のFirefoxに対応した最新のgeckodriverの実行ファイルは、こちらからダウンロードできます。