web-dev-qa-db-ja.com

Seleniumでgecko実行可能ファイルを使用する方法

Selenium 2.53でFirefox 47.0を使用しています。最近、それらはSeleniumとFirefoxの間のバグであり、コードが機能しなくなります。解決策の1つは、マリオネットドライバーを使用することです。

私はこの指示に従いました site RemotWebDriverでこの新しいドライバーを使用しましたが、エラーが発生し続けます:

警告-例外:スレッド "main"の例外org.openqa.Selenium.WebDriverException:ドライバー実行可能ファイルへのパスはwebdriver.gecko.driverシステムプロパティで設定する必要があります詳細については、 https://github.com/jgraham/wires を参照してください。最新バージョンは...からダウンロードできます。

これまでに試したコードは非常に簡単です:

public class Test {
    static WebDriver driver;
    static Wait<WebDriver> wait;
    public static void main(String[] args) throws MalformedURLException {
        System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");
        DesiredCapabilities cap = DesiredCapabilities.firefox();
        cap.setCapability("marionette", true);
        cap.setBrowserName("firefox");
        driver = new RemoteWebDriver(new URL("http://192.168.117.135:5555/wd/hub"), cap);//true to enable the JS
        wait = new WebDriverWait(driver, 3000);
        final String url = "https://www.google.com/";

        JavascriptExecutor js = (JavascriptExecutor) driver;

        try {
            driver.navigate().to(url);
        } finally {
            driver.close();
        }
    }
}

Geckodriver.exeへのパスが正しいと確信しており、どこでミスをしたかわかりません。

編集1:私は次のコードを試しました:

public class Test {
    static WebDriver driver;
    static Wait<WebDriver> wait;
    public static void main(String[] args) throws MalformedURLException {
        System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");

        driver = new MarionetteDriver();
        wait = new WebDriverWait(driver, 3000);
        final String url = "https://www.google.com/";

        JavascriptExecutor js = (JavascriptExecutor) driver;

        try {
            driver.navigate().to(url);
        } finally {
            driver.close();
        }
    }
}

そして、それは機能しています。問題はRemoteWebDriverとgeckoドライバーから来ているようです。

38
Robert Reynolds

最近、SeleniumはSelenium 3を起動しました。Firefoxの最新バージョンを使用する場合は、GeckoDriverを使用する必要があります。

System.setProperty("webdriver.gecko.driver","G:\\Selenium\\Firefox driver\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();

ここから完全なドキュメントを確認できます

30
Mukesh otwani

私も同じ問題に直面しており、1日後に解決策を得ました:

SystemはSeleniumテストケースを実行するためにGeckodriverを必要とするため、例外が発生します。このコードは、Javaのメインメソッドで試すことができます。

    System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
    DesiredCapabilities capabilities=DesiredCapabilities.firefox();
    capabilities.setCapability("marionette", true);
    WebDriver driver = new FirefoxDriver(capabilities);

詳細情報 https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver リンクにアクセスできます。

問題が解決しない場合はお知らせください。

12

WebDriverManager を使用して、Firefoxドライバーを自動的に処理できます。

このライブラリは、プラットフォーム(Mac、Windowns、Linux)に適切なバイナリ(geckodriver)をダウンロードし、必要なJava環境変数(webdriver.gecko.driver)。

JUnitテストケースとしての完全な例を見てみましょう。

public class FirefoxTest {

  private WebDriver driver;

  @BeforeClass
  public static void setupClass() {
    WebDriverManager.firefoxdriver().setup();
  }

  @Before
  public void setupTest() {
    driver = new FirefoxDriver();
  }

  @After
  public void teardown() {
    if (driver != null) {
      driver.quit();
    }
  }

  @Test
  public void test() {
    // Your test code here
  }
}

Mavenを使用している場合は、pom.xmlに配置する必要があります。

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>3.6.2</version>
</dependency>

WebDriverManagerはあなたのために魔法をかけます:

  1. WebDriverバイナリの最新バージョンを確認します
  2. システムにWebDriverバイナリが存在しない場合はダウンロードします
  3. Seleniumに必要なWebDriver Java環境変数をエクスポートします

これまでのところ、WebDriverManagerはChromeOperaInternet ExplorerMicrosoft EdgePhantomJS、およびFirefoxをサポートしています。

11
Boni García

上記のソリューションは、ローカルテストおよびJavaコードからのブラウザーの起動に適しています。後でSeleniumグリッドを起動したい場合は、このパラメーターはリモートノードを通知するために必要です geckodriverの場所:

-Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe"

Automation Javaコードで指定されている場合、ノードはgeckoドライバーを見つけることができません。

したがって、ノードwhouldの完全なコマンドは(同じマシン上にテスト目的のノードとハブがあると仮定します):

Java -Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe" -jar Selenium-server-standalone-2.53.0.jar -role node -hub http://localhost:4444/grid/register

そして、あなたはノードログで見ることを期待するべきです:

00:35:44.383 INFO - Launching a Selenium Grid node
Setting system property webdriver.gecko.driver to C:\geckodriver\geckodriver.exe

シンプルにしようとしています。 Selenium 3+を使用する場合、2つのオプションがあります。

  • Firefoxを47.0.1以降にアップグレードし、Selenium3のデフォルトのgeckodriverを使用します。

  • または、marionetteをfalseに指定してgeckodriverの使用を無効にし、レガシーFirefoxドライバーを使用します。 Seleniumを実行する簡単なコマンドはJava -Dwebdriver.firefox.marionette=false -jar Selenium-server-standalone-3.0.1.jarです。また、他の回答に記載されている他のコマンドからgeckodriverの使用を無効にすることもできます。

3
Moradnejad

これは、システムがfirefoxがインストールされた場所をパスに見つけられないことが原因である可能性があります。

動作するはずの次のコードを試してください。

System.setProperty("webdriver.firefox.bin","C:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
System.setProperty("webdriver.gecko.driver","<location of geckodriver>\\geckodriver.exe");
2
ShiyamTJ

Seleniumサーバーノードを起動するときに、.exeのパスでシステムプロパティを指定する必要があります。 Chromeドライバーを使用した Seleniumグリッドに受け入れられたanwserも参照してください(WebDriverException:ドライバー実行可能ファイルへのパスはwebdriver.chrome.driverシステムプロパティで設定する必要があります)

2
Gecki

アーキタイプmaven-archetype-quickstarで簡単なJavaアプリケーションを作成し、pom.xmlを修正します。

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>bar</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bar</name>
    <description>bar</description>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-Java</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-server</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-api</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-firefox-driver</artifactId>
            <version>3.0.0-beta3</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>bar</finalName>
    </build>
</project>

そして

package bar;

import Java.util.concurrent.TimeUnit;

import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;

public class AppTest {

    /**
     * Web driver.
     */
    private static WebDriver driver = null;

    /**
     * Entry point.
     * 
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        // Download "geckodriver.exe" from https://github.com/mozilla/geckodriver/releases
        System.setProperty("webdriver.gecko.driver","F:\\geckodriver.exe");
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("http://localhost:8080/foo/");
        String sTitle = driver.getTitle();
        System.out.println(sTitle);
    }

}

Mac OS X、Linuxでも使用します: https://github.com/mozilla/geckodriver/releases

そして

// On Mac OS X.
System.setProperty("webdriver.gecko.driver", "/Users/donhuvy/Downloads/geckodriver");
2
Do Nhu Vy

ドライバ(ファイル)には実行許可が必要(linux chmod + x geckodriver)であることを覚えておくことが重要です。

総括する:

  1. Geckoドライバーをダウンロードする
  2. 実行許可を追加する
  3. システムプロパティを追加します。

    System.setProperty("webdriver.gecko.driver", "FILE PATH");

  4. クラスをインスタンス化して使用する

    WebDriver driver = new FirefoxDriver();

  5. やりたい放題

  6. ドライバーを閉じる

    driver.close;

1
Carlos Caldas