在Ubuntu上运行Chrome驱动程序时,Selenium会显示“未知错误:找不到Chrome二进制文件”。

15

我正在尝试在最新的Ubuntu[16.04]上使用chrome driver运行selenium [java]测试。

我遇到了以下错误/异常。 作为一个实验,我用我的本机“helloworldApp”替换了ChromeDriver二进制文件; 我发现Selenium正在执行我的二进制文件。

我相信打印的“Starting ChromeDriver 2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320) on port 15306”来自chrome二进制文件。但为什么Selenium抱怨无法获取二进制文件呢?

在Windows上一切正常。

请给予建议。

     [java] Starting ChromeDriver 2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320) on port 15306
     [java] Only local connections are allowed.
     [java] Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: cannot find Chrome binary
     [java]   (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.8.0-46-generic x86_64) (WARNING: The server did not provide any stacktrace information)
     [java] Command duration or timeout: 328 milliseconds
     [java] Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
     [java] System info: host: 'geo-VirtualBox', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.8.0-46-generic', java.version: '9-internal'
     [java] Driver info: org.openqa.selenium.chrome.ChromeDriver
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-internal/Native Method)
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-internal/NativeConstructorAccessorImpl.java:62)
     [java]     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(java.base@9-internal/DelegatingConstructorAccessorImpl.java:45)
     [java]     at java.lang.reflect.Constructor.newInstance(java.base@9-internal/Constructor.java:453)
     [java]     at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
     [java]     at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
     [java]     at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
     [java]     at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:249)
     [java]     at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
     [java]     at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144)
     [java]     at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:170)
     [java]     at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:138)

你能分享一下创建 ChromeDriver 的代码吗? - mrfreester
5个回答

40
我找到了问题所在。在我的Linux系统上,未安装Google Chrome浏览器。
我曾以为ChromeDriver二进制文件中包含了一个浏览器实现。现在我意识到这是错误的,ChromeDriver二进制文件是一个调用Google Chrome的Selenium包装器。
我必须说,异常信息“selenium.WebDriverException: unknown error: cannot find Chrome binary”很令人困惑。如果它告诉“Chrome浏览器未安装”或类似的东西,那么就会更容易理解。
谢谢。 乔治

在Windows上一样,需要安装Chrome才能使其正常工作。 - szab.kel
我曾经遇到过同样的问题,完全同意。错误信息不仅具有误导性,而且完全是错误的。驱动程序已安装,缺少的是 CHROME 浏览器 (.executable)。 - GIZNAJ
在排除了我的VPS上的一堆错误之后,我已经将它调整到了现在输出那个令人困惑的错误的地步,但我想也许是因为Chrome/Chromium没有安装?这是我第一次在CentOS 7 VPS上使用Selenium,更不用说我第一次使用CentOS 7和VPS了,哈哈。我为自己感到骄傲:D 希望安装Chrome/Chromium对我有用!祝我好运! - oldboy
我正在尝试在Firefox上启动E2E测试,而不是Chrome,但我仍然收到相同的错误消息。我在笔记本电脑上安装了两个版本的Firefox:普通版Firefox和Firefox开发者版。他可能找不到其中任何一个吗? - riroo

3

指向二进制位置,有助于解决问题。

更改后:

capabilities: {
    'browserName': 'chrome'
}

致:

capabilities: {
    'browserName': 'chrome',
    "chromeOptions": {
      'binary': "C:\\Program Files (x86)\\Google\\Chrome Beta\\Application\\chrome.exe",
      args: [],
      extensions: [],
  }

1

0

我在Windows 10上安装Chrome时遇到了问题。请尝试在出现问题的计算机上重新安装它。

如果这不能解决问题,请使用Gecko驱动程序和Firefox。


0

您可以通过NPM安装Chrome:

https://www.npmjs.com/package/chromium

执行以下命令安装 Chromium:
``` npm install chromium ```
然后,映射您的 Chrome 可执行文件位置:
const chromium = require('chromium');

capabilities: [
    {
        browserName: 'chrome',
        'goog:chromeOptions': {
            binary: chromium.path
        },
    },
],

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接