FirefoxでWebサイトを実行してテストを実行しようとしていますが、「ドライバ実行可能ファイルへのパスはwebdriver.gecko.driverシステムプロパティで設定する必要があります。」というエラーが発生します。パスを正しく設定しましたが、問題の場所がわかりません。これが私のコードです:
if (browsers.equalsIgnoreCase("Firefox"))
{
String driverPath = System.getProperty("user.dir") + "\\src/test/Java\\drivers\\geckodriver.exe";
System.setProperty("webdriver.firefox.marionette", "false");
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
} else if (browsers.equalsIgnoreCase("Chrome")) {
// String driverPath = System.getProperty("user.dir") +
// "\\src\\Drivers\\chromedriver";
// System.setProperty("webdriver.chrome.driver", driverPath);
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
これが私のコードの失敗トレースです:
FAILED CONFIGURATION: @BeforeClass launchBrowser
org.openqa.Selenium.SessionNotCreatedException: Unable to find a matching set of capabilities
Build info: version: '3.8.0', revision: '924c4067df', time: '2017-11-30T11:36:59.109Z'
System info: Host: 'DSCHD-PC-180', ip: '192.168.6.122', os.name: 'Windows 7', os.Arch: 'AMD64', os.version: '6.1', Java.version: '1.8.0_161'
Driver info: driver.version: FirefoxDriver
remote stacktrace:
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at Java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.Selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.Java:57)
at org.openqa.Selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.Java:104)
at org.openqa.Selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.Java:123)
org.openqa.Selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.Java:126)
at org.openqa.Selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.Java:73)
at org.openqa.Selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.Java:142)
at org.openqa.Selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.Java:83)
at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:601)
at org.openqa.Selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.Java:219)
at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:142)
at org.openqa.Selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.Java:120)
at Utility.UtilityMethods.openBrowser(UtilityMethods.Java:26)
at TestCases.LoginTestCase.launchBrowser(LoginTestCase.Java:35)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.Java:124)
at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.Java:59)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.Java:455)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.Java:222)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.Java:142)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.Java:168)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.Java:105)
at org.testng.TestRunner.privateRun(TestRunner.Java:648)
at org.testng.TestRunner.run(TestRunner.Java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.Java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.Java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.Java:415)
at org.testng.SuiteRunner.run(SuiteRunner.Java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.Java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.Java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.Java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.Java:1137)
at org.testng.TestNG.runSuites(TestNG.Java:1049)
at org.testng.TestNG.run(TestNG.Java:1017)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.Java:114)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.Java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.Java:77)
SKIPPED CONFIGURATION: @AfterClass quitBrowser
SKIPPED: registration
Selenium Client v3.11.0およびFirefox v37を使用しているため、物事をシンプルに保つには、最新のGeckoDriverから mozilla/geckodriverをダウンロードする必要があります。 して、システム内の任意の場所に保存します。次にSystem.setProperty()
行内でKeywebdriver.gecko.driverをValueas GeckoDriverの絶対パスおよび最後にDesiredCapabilitiesクラスを介してmarionatteをfalseに設定し、FirefoxOptionsのインスタンスにマージしますインスタンスを開始するFirefoxブラウザは次のように:
System.setProperty("webdriver.gecko.driver", "C:/path/to/geckodriver.exe");
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("marionatte", false);
FirefoxOptions opt = new FirefoxOptions();
opt.merge(dc);
FirefoxDriver driver = new FirefoxDriver(opt);
driver.get("https://stackoverflow.com");
System.out.println("Application opened");
System.out.println("Page Title is : "+driver.getTitle());
driver.quit();
コメントの更新に従って、GeckoDriver v0.20.1を使用しています。
しかし、GeckoDriver v0.18.のリリースノートを振り返ると、次のようにはっきりと述べています。
geckodriver now recommends Firefox 53 and greater
したがって、GeckoDriver v0.18.以上を使用するには、Firefox 53以降を使用する必要があります。この制約を取り除くには、次のいずれかのバージョンにダウングレードできます。
これは、システムプロパティの設定方法です。
System.setProperty("webdriver.gecko.driver", "C:\\...\\geckodriver.exe");
コードを更新しました。最新のFirefoxドライバーの場合は、setProperty
とユーザーwebdriver.gecko.driver
の間にドライバーパスを設定する必要があります。
if (browsers.equalsIgnoreCase("Firefox")) {
String driverPath = System.getProperty("user.dir") + "\\src\\test\\Java\\drivers\\geckodriver.exe";
System.setProperty("webdriver.firefox.driver", "driverPath");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("marionette", false);
FirefoxOptions options = new FirefoxOptions();
options.merge(capabilities);
FirefoxDriver driver = new FirefoxDriver(options);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
else if (browsers.equalsIgnoreCase("Chrome")) {
// String driverPath = System.getProperty("user.dir") +
// "\\src\\Drivers\\chromedriver";
// System.setProperty("webdriver.chrome.driver", driverPath);
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
お知らせ下さい。
あなたが使用しているser.dirこれは基本的には次のことを意味します:現在の作業ディレクトリ
以下は、Seleniumを使用してFirefoxブラウザーを初期化できるコードです。
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\\your\\gecko\\driver\\path\\geckodriver.exe");
driver = new firefoxDriver();
それでおしまい ! Firefoxドライバを使用して、次のようないくつかの操作を実行できます。
1. driver.get(String args0);
2. driver.getCurrentUrl();
3. driver.getPageSource();
4. driver.getTitle();
5. driver.findElememt(By args0);
6. driver.findElements(By args0);
7. driver.naviagate();
8. driver.manage();
9. driver.close();
10. driver.quit();
11. driver.switchTo();
12. driver.getWindowHandle();
13. driver.getWindowHandles();
この件に関してご不明な点がありましたらお知らせください。