どのブラウザでもスクリプトを実行できません。以下は、Firefoxで発生するエラーです。 firefoxがインストールされている場所は正しいです。何が悪いのか分からない。
Firefox 15を使用しています。SeleniumJava 2.2.0およびEclipse Juno
私のテストケースは次のとおりです。
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.openqa.Selenium.firefox.FirefoxProfile;
public class FirstTest {
private WebDriver _driver;
@Before
public void setUp() throws Exception {
System.setProperty("webdriver.firefox.driver","C:\\Program Files\\Mozilla Firefox15\\Firefox.exe");
FirefoxProfile firefoxProfile = new FirefoxProfile();
_driver = new FirefoxDriver(firefoxProfile);
}
@Test
public void Login() throws Exception {
_driver.get("https://www.google.co.in/");
assertEquals("Google", _driver.getTitle());
_driver.findElement(By.id("lst-ib")).clear();
_driver.findElement(By.id("lst-ib")).sendKeys("Selenium");
_driver.findElement(By.name("btnG")).click();
_driver.findElement(By.linkText("Selenium - Web Browser Automation")).click();
assertEquals(" ", _driver.getTitle());
assertEquals("Selenium - Web Browser Automation", _driver.getTitle());
}
@After public void tearDown() throws Exception {
_driver.quit();
}
}
以下は私が得るエラーです:
org.openqa.Selenium.WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: Vista
Build info: version: '2.20.0', revision: '16008', time: '2012-02-27 19:03:59'
System info: os.name: 'Windows 7', os.Arch: 'x86', os.version: '6.1', Java.version: '1.6.0_26'
Driver info: driver.version: FirefoxDriver
at org.openqa.Selenium.firefox.internal.Executable.<init>(Executable.Java:52)
at org.openqa.Selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.Java:56)
at org.openqa.Selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.Java:52)
at org.openqa.Selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.Java:88)
at FirstTest.setUp(FirstTest.Java:16)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:42)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.Java:27)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.Java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:300)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.Java:50)
at org.Eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.Java:38)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:467)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)
Java.lang.NullPointerException
at FirstTest.tearDown(FirstTest.Java:31)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:42)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.Java:36)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:300)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.Java:50)
at org.Eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.Java:38)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:467)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)
PATH
C:\Program Files\Mozilla Firefox15\Firefox.exe
それはおそらくここにはないでしょう-それはエラーが言うことだからです。修正方法
それは彼がこのようにコンストラクタを変更するのに役立ちません:
File pathToBinary = new File("C:\\Program Files\\Mozilla Firefox15\\Firefox.exe");
FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
FirefoxProfile firefoxProfile = new FirefoxProfile();
FirefoxDriver _driver = new FirefoxDriver(ffBinary,firefoxProfile);
ブラウザへのパスにスペースがある場合(例: "...\Program Files(x86)...")、paramの値に二重引用符を追加する必要があることに注意してください。
例:
-Dwebdriver.firefox.bin="D:\Program Files (x86)\Mozilla Firefox\firefox.exe"
二重引用符を追加すると、すべてが正常に実行されました。
最も簡単な方法は、ドライバーを定義する前に以下のコードを使用することです。
System.setProperty("webdriver.firefox.bin",
"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
プログラムの実行中にvm引数を追加する必要があります。これは
-Dwebdriver.firefox.bin=/custom/path/of/firefox/exe
IntelliJでIDEはるかに簡単な[実行]→[設定の編集...]でVMオプションは上記を追加します。
Eclipseには、実行中にvm引数を指定するオプションもあります。このように、SeleniumでポータブルFirefoxを使用しています。
何らかの理由で、環境変数を追加しても機能しませんでした。
この page (grid2)で説明されているように、コマンドラインノード構成でFirefoxへのパスを指定できました。
-browser “browserName=firefox,version=3.6,firefox_binary=c:\Program Files\Mozilla Firefox\firefox.exe ,maxInstances=3, platform=WINDOWS”
私も同じ問題に苦しんでいました。最後に、以下に示すように機能にバイナリ値を設定することで解決しました。実行時にこの値を使用するため、設定する必要があります。
DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setCapability("platform", Platform.ANY);
capability.setCapability("binary", "/ms/dist/fsf/PROJ/firefox/16.0.0/bin/firefox"); //for linux
//capability.setCapability("binary", "C:\\Program Files\\Mozilla Firefox\\msfirefox.exe"); //for windows
WebDriver currentDriver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
これで完了です!!!ハッピーコーディング:)
このコードは単に私のために働いた
System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox 54\\firefox.exe");
String Firefoxdriverpath = "C:\\Users\\Hp\\Downloads\\geckodriver-v0.18.0-win64\\geckodriver.exe";
System.setProperty("webdriver.gecko.driver", Firefoxdriverpath);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
driver = new FirefoxDriver(capabilities);
プロジェクトをあるコンピューターから別のコンピューターに移動するときにこの問題が発生しました。解決策は、nugetからSelenium Webdriverをリロードすることでした。
Visual Studioでテストを実行しているときにこのエラーメッセージが表示されました。Firefoxがロードされず、OPのエラーメッセージが表示されました。
Firefoxを手動で開いたところ、Firefox自体を更新する必要があることがわかりました(ロードする前に更新しました)。終了したら、テストスイートを再実行し、Firefoxがうまく表示され、テストは適切に実行されました。突然このエラーが発生した場合は、マシン上の何かを更新する前にこの回答を試してください。
File pathBinary = new File("Firefox.exe location");
FirefoxBinary ffBinary = new FirefoxBinary(pathBinary);
FirefoxProfile firefoxProfile = new FirefoxProfile();
FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
ブラウザのバイナリを追加する必要があります
または
永遠に最良のソリューション:環境変数にFirefox.exeの場所を追加するだけ
私も同じ問題に直面しており、それを修正するのに一週間以上を費やしました。マシンを再起動すると修正されたようですが、一時的なものです。
レジストリファイルを編集して、一時ポートの最大数を増やす解決策がありました。これで問題は修正されたようですが、それも一時的なものです。
しばらくの間、使用できなくなったドライバーにアクセスしようとしているかどうかを考え続けていたので、電話しようとしました:
driver.quit()
そして、ブラウザインスタンスを再作成しました。これにより、SessionNotFoundExceptionのみが提供されました。
バイナリのパスを設定するために、System.setProperty
とffCapability.setCapability
の両方を使用していたことがわかりました。
それからSystem.setProperty
=>だけで試しました。
ffCapability.setCapability
=>出来上がり!!!これまでのところ、うまく機能しています。明日、翌日、翌日、スクリプトを再実行しようとしたときにうまく機能することを願っています... :)
Bottomline:これのみを使用
ffCapability.setCapability("binary", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //for windows`
それが役に立てば幸い!
これを試して:
System.setProperty("webdriver.gecko.driver", "geckodriver p");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
driver = new FirefoxDriver(capabilities);
私にとっては、パス変数を「C:\ Program Files(x86)\ Mozilla Firefox」ではなく「C:\ Program Files\Mozilla Firefox」に変更するだけでした。