【问题标题】:Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: VISTA在 PATH 中找不到 firefox 二进制文件。确保已安装 Firefox。操作系统似乎是:VISTA
【发布时间】:2013-01-21 07:08:41
【问题描述】:

我无法在任何浏览器中运行我的脚本。以下是我为 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)

【问题讨论】:

标签: java eclipse firefox webdriver


【解决方案1】:
  1. 打开命令行(开始 -> 运行 -> 键入“cmd”)
  2. 输入PATH
  3. 验证你可以看到这里写的C:\Program Files\Mozilla Firefox15\Firefox.exe

它可能不在这里 - 因为这就是错误所说的。如何解决?

  1. 点击开始
  2. 右键单击“计算机”,然后单击“属性”
  3. 在左侧菜单中选择“高级系统设置”
  4. 转到“高级”选项卡并单击“环境变量...”
  5. 在下面的窗口中选择“路径”并单击“编辑...”(需要管理员权限)
  6. 在末尾添加所需路径,分号分隔
  7. 可能需要重新启动计算机

这样更改构造函数并没有帮助:

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 我需要在 Selenium 中设置 Firefox 二进制文件,因为我们的工作环境不允许我们更改 PATH 变量,所以这个很好用
  • 这个问题已经解决了,谢谢,但在这之后我又遇到了一个问题,测试失败并显示消息::org.openqa.selenium.logging.LocalLogs.getNullLogger()Lorg/openqa/selenium/日志记录/本地日志; -- 请帮帮我。
  • kumar:开始新问题总是更好的主意。在这里描述你做了什么以及你尝试了什么。否则它将在 cmets 中丢失...
  • 不需要重新启动计算机,只需重新启动 Eclipse 即可(至少在我的情况下)。此外,路径不应包含firefox.exe
  • 这实际上为我启动 firefox。这是它应该做的吗?
【解决方案2】:

由于某种原因,添加环境变量对我不起作用。

我能够在命令行节点配置中指定 Firefox 的路径,如 page (grid2) 中所述。

-browser “browserName=firefox,version=3.6,firefox_binary=c:\Program Files\Mozilla Firefox\firefox.exe ,maxInstances=3, platform=WINDOWS”

【讨论】:

  • 这对我有用。但是,我不得不删除外部引号并在 firefox_binary 路径值周围放置引号。
【解决方案3】:

我也遇到了同样的问题。最后我通过在功能中设置二进制值来解决它,如下所示。在运行时它使用这个值,所以必须设置。

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】:

    最简单的方法是在定义驱动程序之前使用以下代码。

    System.setProperty("webdriver.firefox.bin",
                        "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
    

    【讨论】:

    • 这相当于设置壁虎驱动程序的路径。
    【解决方案5】:

    您必须在运行程序时添加 vm 参数。这应该像

    -Dwebdriver.firefox.bin=/custom/path/of/firefox/exe
    

    在 IntelliJ IDE 中更简单的 Goto Run → Edit Configurations... 在 VM 选项中添加上述内容。

    Eclipse 还可以在运行时提供 vm 参数。这样我就可以使用带有 selenium 的便携式 Firefox。

    【讨论】:

    【解决方案6】:

    请注意,如果浏览器路径有空格(例如“...\Program Files (x86)...”),您需要在参数值中添加双引号。

    例子:

    -Dwebdriver.firefox.bin="D:\Program Files (x86)\Mozilla Firefox\firefox.exe"
    

    加双引号后全部运行成功。

    【讨论】:

      【解决方案7】:

      我也遇到了同样的问题,我花了一个多星期的时间来解决它。重新启动我的机器似乎已经修复了它,但只是暂时的。

      有一个解决方案可以通过编辑注册表文件来增加临时端口的最大数量。这似乎解决了问题,但也只是暂时的。

      有一段时间,我一直在想我是否试图访问不再可用的驱动程序,所以我尝试调用:

      driver.quit()
      

      然后重新创建浏览器实例,它只给了我:SessionNotFoundException

      我现在意识到我同时使用了System.setPropertyffCapability.setCapability 来设置二进制文件的路径。

      然后我只尝试了System.setProperty => 没有运气。

      ffCapability.setCapability => 瞧!!!到目前为止,它一直运行良好。希望当我明天、后天和后天尝试重新运行我的脚本时它会很好地工作...... :)

      底线: 只用这个

      ffCapability.setCapability("binary", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //for windows`
      

      希望对你有帮助!

      【讨论】:

        【解决方案8】:

        对我来说,只需将路径变量更改为:'C:\Program Files\Mozilla Firefox' 而不是 'C:\Program Files (x86)\Mozilla Firefox'

        【讨论】:

          【解决方案9】:

          我在 Visual Studio 中运行测试时收到此错误消息:Firefox 根本无法加载,我收到了 OP 的错误消息。

          我手动打开了 Firefox,发现它需要更新自身(它在加载之前更新)。完成后,我重新运行了测试套件,Firefox 很好地出现了,测试运行正常。如果您突然收到此错误,请在更新计算机上的任何内容之前尝试此答案。

          【讨论】:

            【解决方案10】:

            这段代码对我很有效

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

            【讨论】:

              【解决方案11】:

              我在将项目从一台计算机移动到另一台计算机时遇到了这个问题。 解决方案是从 nuget 重新加载 selenium webdriver。

              【讨论】:

                【解决方案12】:

                试试这个:

                System.setProperty("webdriver.gecko.driver", "geckodriver p");
                DesiredCapabilities capabilities = DesiredCapabilities.firefox();
                capabilities.setCapability("marionette", true);
                driver = new FirefoxDriver(capabilities);
                

                【讨论】:

                • 请不要只发布代码块,编辑您的答案并详细说明此代码块如何解决问题。
                【解决方案13】:
                File pathBinary = new File("Firefox.exe location");
                FirefoxBinary ffBinary = new FirefoxBinary(pathBinary);
                FirefoxProfile firefoxProfile = new FirefoxProfile();
                FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
                

                你需要添加浏览器的二进制文件

                最佳且永久的解决方案: 只需将 Firefox.exe 位置添加到环境变量中

                【讨论】:

                  【解决方案14】:

                  似乎 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");
                  

                  添加这个解决了我的问题

                  【讨论】:

                    【解决方案15】:

                    GeckoDriver 找不到已安装的 Firefox。首先,确保您已将 GeckoDriver.exe 与 Firefox 版本(32 位与 64 位)相匹配,并且最好让它们都是最新的。

                    如果问题仍然存在,您可以通过以下任一方式进行修复。

                    大多数解决方案已作为对此问题和重复问题的答案发布。我只是想总结所有这些并使其保持最新状态。

                    • 解决方案 1:

                      将 Firefox 安装在默认位置:

                      • C:\Program Files\Mozilla Firefox\firefox.exe 用于 64 位 Firefox 和 GeckoDriver_w64
                      • C:\Program Files\Mozilla Firefox (x86)\firefox.exe 用于 32 位 Firefox 和 GeckoDriver_w32
                    • 解决方案 2:

                      将带有firefox.exe 的文件夹添加到PATH 环境变量中。

                      在 Windows 上,打开控制面板 -> 系统 -> 高级系统设置(在最左侧) -> 环境变量 -> 路径 -> 将包含firefox.exePATH 的文件夹添加到:

                      • (当前)用户变量...如果您仅为该用户安装了 Firefox(例如 C:\Users\NAME\AppData\Mozilla Firefox)。
                      • (所有用户)系统变量...如果为所有用户安装了 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...
                      

                      还可以在 IntelliJ IDEA、Eclipse、NetBeans 等各自的运行配置中设置 VM 参数。

                    • 解决方案 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);
                      

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2014-01-23
                      • 1970-01-01
                      • 2014-01-03
                      • 2018-07-30
                      • 2017-02-13
                      • 2021-11-04
                      • 2015-04-16
                      • 1970-01-01
                      相关资源
                      最近更新 更多