我无法在任何浏览器中运行我的脚本。以下是我为firefox获取的错误。 firefox的安装位置是正确的。不知道出了什么问题。
我正在使用Firefox 15. Selenium Java 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)
答案 0 :(得分:20)
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);
答案 1 :(得分:3)
要注意,如果浏览器的路径有空格(例如“... \ Program Files(x86)...”),则需要在参数值中添加双引号。
示例:
-Dwebdriver.firefox.bin="D:\Program Files (x86)\Mozilla Firefox\firefox.exe"
添加双引号后,所有已成功运行。
答案 2 :(得分:2)
出于某种原因,添加环境变量对我来说不起作用。
我可以在命令行节点配置中指定Firefox的路径,如page(grid2)所述。
-browser “browserName=firefox,version=3.6,firefox_binary=c:\Program Files\Mozilla Firefox\firefox.exe ,maxInstances=3, platform=WINDOWS”
答案 3 :(得分:2)
我也遇到了同样的问题。最后,我通过设置功能中的二进制值来解决它,如下所示。在运行时,它使用此值,因此必须设置。
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);
你完成了!快乐的编码:)
答案 4 :(得分:2)
最简单的方法是在定义驱动程序之前使用以下代码。
System.setProperty("webdriver.firefox.bin",
"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
答案 5 :(得分:1)
运行程序时必须添加vm参数。这应该像
-Dwebdriver.firefox.bin=/custom/path/of/firefox/exe
在IntelliJ IDE中更简单的转到运行→编辑配置...在VM选项中添加以上内容。
Eclipse还可以选择在运行时提供vm参数。这样我就可以使用带有selenium的便携式Firefox。
答案 6 :(得分:0)
我也遇到了同样的问题,我花了一个多星期来修复它。重新启动我的机器似乎已经修复了它,但只是暂时的。
有一种解决方案可以通过编辑注册表文件来增加临时端口的最大数量。这似乎解决了这个问题,但也只是暂时的。
有一段时间,我一直在想我是否正在尝试访问不再可用的驱动程序,所以我试着打电话:
driver.quit()
然后重新创建浏览器实例,它只给了我: SessionNotFoundException 。
我现在意识到我曾使用BOTH System.setProperty
以及ffCapability.setCapability
来设置二进制文件的路径。
然后我尝试了System.setProperty
=&gt;那里没有运气。
仅ffCapability.setCapability
=&gt;瞧!到目前为止它一直很好。希望当我尝试明天以及后一天和后一天重新运行我的脚本时它会很好用...:)
<强>底线:强> 仅使用此
ffCapability.setCapability("binary", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //for windows`
希望它有所帮助!
答案 7 :(得分:0)
对我来说,只需将路径变量更改为:'C:\ Program Files \ Mozilla Firefox'而不是'C:\ Program Files(x86)\ Mozilla Firefox'
答案 8 :(得分:0)
我在Visual Studio中运行测试时收到此错误消息:Firefox根本无法加载,我收到了OP的错误消息。
我手动打开Firefox并发现它需要自我更新(它在加载之前就这样做了)。完成后我重新尝试了测试套件,Firefox很好地显示,测试运行正常。如果您突然收到此错误,请在更新机器上的任何内容之前尝试此答案。
答案 9 :(得分:0)
这段代码对我来说很简单
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);
答案 10 :(得分:0)
将项目从一台计算机移动到另一台计算机时出现此问题。 解决方案是从nuget重新加载selenium webdriver。
答案 11 :(得分:0)
尝试一下:
System.setProperty("webdriver.gecko.driver", "geckodriver p");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
driver = new FirefoxDriver(capabilities);
答案 12 :(得分:0)
File pathBinary = new File("Firefox.exe location");
FirefoxBinary ffBinary = new FirefoxBinary(pathBinary);
FirefoxProfile firefoxProfile = new FirefoxProfile();
FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
您需要添加浏览器的二进制文件
或
最佳和永久的解决方案: 只需将Firefox.exe位置添加到环境变量中
答案 13 :(得分:0)
似乎Firefox已安装在App数据文件夹中
路径C:\Users\users\AppData\Local\Mozilla Firefox
因此您可以按如下所示设置firefox bin属性
System.setProperty("webdriver.firefox.bin", "C:\\Users\\*USERNAME*\\AppData\\Local\\Mozilla Firefox\\Firefox.exe");
添加此内容可以为我解决问题
答案 14 :(得分:0)
GeckoDriver 找不到安装的 Firefox。首先,确保您已将 GeckoDriver.exe 与 Firefox 版本(32 位与 64 位)相匹配,并且最好使它们都是最新的。
如果问题仍然存在,您可以通过以下任一方式进行修复。
大多数解决方案已作为对此问题和重复问题的答案发布。我只是想总结所有这些内容并使其保持最新状态。
解决方案 1:
在默认位置安装 Firefox:
C:\Program Files\Mozilla Firefox\firefox.exe
用于 64 位 Firefox 和 GeckoDriver_w64C:\Program Files\Mozilla Firefox (x86)\firefox.exe
用于 32 位 Firefox 和 GeckoDriver_w32解决方案 2:
将带有 firefox.exe
的文件夹添加到 PATH
环境变量中。
在 Windows 上,打开控制面板 -> 系统 -> 高级系统设置(在左外) -> 环境变量 -> 路径
-> 将包含 firefox.exe
的文件夹添加到 PATH
到:
C:\Users\NAME\AppData\Mozilla Firefox
)。C:\Program Files\Mozilla Firefox
中)。您必须重新启动 IDE 和 GeckoDriver.exe
进程才能使更改生效。
解决方案 3:
当您运行 Java 虚拟机时,您可以将 firefox.exe
的路径添加为系统属性 (-D
):
java.exe -Dwebdriver.firefox.bin="C:\Users\NAME\AppData\Mozilla Firefox\firefox.exe" ...other_params...
解决方案 4:
在您的 Java 程序中全局使用(在您实例化 FirefoxDriver 之前)。
理想情况下,作为 main()
方法中的第一行代码。
System.setProperty("webdriver.firefox.bin", "C:\Program Files\Mozilla Firefox\firefox.exe");
解决方案 5:
在您的 Java 程序中,位于单个 Firefox WebDriver 实例的本地:
System.setProperty("webdriver.gecko.driver", "C:\\Java-Training\\Selenium\\geckodriver.exe");
FirefoxOptions options = new FirefoxOptions();
File pathToFirefoxBinary = new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
FirefoxBinary ffBinary = new FirefoxBinary(pathToFirefoxBinary);
options.setBinary(ffBinary);
browser = new FirefoxDriver(options);