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ドライバーから来ているようです。
最近、SeleniumはSelenium 3を起動しました。Firefoxの最新バージョンを使用する場合は、GeckoDriverを使用する必要があります。
System.setProperty("webdriver.gecko.driver","G:\\Selenium\\Firefox driver\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
私も同じ問題に直面しており、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 リンクにアクセスできます。
問題が解決しない場合はお知らせください。
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はあなたのために魔法をかけます:
これまでのところ、WebDriverManagerはChrome
、Opera
、Internet Explorer
、Microsoft Edge
、PhantomJS
、およびFirefox
をサポートしています。
上記のソリューションは、ローカルテストおよび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の使用を無効にすることもできます。
これは、システムがfirefoxがインストールされた場所をパスに見つけられないことが原因である可能性があります。
動作するはずの次のコードを試してください。
System.setProperty("webdriver.firefox.bin","C:\\Program Files\\Mozilla Firefox\\firefox.exe");
System.setProperty("webdriver.gecko.driver","<location of geckodriver>\\geckodriver.exe");
Seleniumサーバーノードを起動するときに、.exeのパスでシステムプロパティを指定する必要があります。 Chromeドライバーを使用した Seleniumグリッドに受け入れられたanwserも参照してください(WebDriverException:ドライバー実行可能ファイルへのパスはwebdriver.chrome.driverシステムプロパティで設定する必要があります)
アーキタイプ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");
ドライバ(ファイル)には実行許可が必要(linux chmod + x geckodriver)であることを覚えておくことが重要です。
総括する:
システムプロパティを追加します。
System.setProperty("webdriver.gecko.driver", "FILE PATH");
クラスをインスタンス化して使用する
WebDriver driver = new FirefoxDriver();
やりたい放題
ドライバーを閉じる
driver.close;