41

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

このサイトの指示に従って、この新しいドライバーを RemotWebDriver で使用しましたが、エラーが発生し続けます。

警告 - 例外: スレッド「メイン」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ドライバーにあるようです。ニュースをお持ちの方はいますか?

4

10 に答える 10

33

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

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

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

于 2016-08-05T05:11:24.643 に答える
12

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

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リンクにアクセスできます。

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

于 2016-08-05T03:51:20.390 に答える
12

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

このライブラリは、プラットフォーム (Mac、Windows、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>5.1.0</version>
</dependency>

WebDriverManager はあなたのために魔法を行います:

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

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

于 2016-11-15T10:27:27.077 に答える
3

I create a simple Java application by archetype maven-archetype-quickstar, then revise 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>

and

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);
    }

}

You also use on Mac OS X, Linux: https://github.com/mozilla/geckodriver/releases

and

// On Mac OS X.
System.setProperty("webdriver.gecko.driver", "/Users/donhuvy/Downloads/geckodriver");
于 2016-09-21T09:50:54.650 に答える
3

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

  • Firefox を 47.0.1 以降にアップグレードし、Selenium3 のデフォルトの geckodriver を使用してください。

  • または、false に指定して geckodriver の使用を無効にしmarionette、従来の Firefox ドライバーを使用します。Selenium を実行する簡単なコマンドは次のとおりjava -Dwebdriver.firefox.marionette=false -jar selenium-server-standalone-3.0.1.jarです。他の回答で言及されている他のコマンドから geckodriver の使用を無効にすることもできます。

于 2016-11-15T06:34:36.440 に答える
2

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

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

System.setProperty("webdriver.firefox.bin","C:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
System.setProperty("webdriver.gecko.driver","<location of geckodriver>\\geckodriver.exe");
于 2017-01-03T12:30:49.063 に答える
1

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

総括する:

  1. gecko ドライバーのダウンロード
  2. 実行権限を追加
  3. システム プロパティを追加します。

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

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

    WebDriver driver = new FirefoxDriver();

  5. やりたいことは何でもする

  6. ドライバを閉じる

    driver.close;

于 2017-02-19T13:24:26.073 に答える