Unknown Error: Chrome启动失败:异常退出(驱动程序信息:chromedriver=2.9)

90

我正在尝试在Debian 7上运行Selenium测试,但没有成功。

错误信息如下:

unknown error: Chrome failed to start: exited abnormally   (Driver info: chromedriver=2.9.248316,platform=Linux 3.2.0-4-686-pae x86) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 60.55 seconds Build info: version: '2.33.0', revision: '4ecaf82108b2a6cc6f006aae81961236eba93358', time: '2013-05-22 12:00:17' System info: os.name: 'Linux', os.arch: 'i386', os.version: '3.2.0-4-686-pae', java.version: '1.7.0_25' Driver info: org.openqa.selenium.chrome.ChromeDriver

我使用的是chromedriver 29chrome 34.0.1847.76 beta,在Debian 7 32位上运行。我正在使用selenium-java 2.33.0

根据此链接chromedriver 29是适用于chrome 34的正确版本。而且,之前的版本由于glibc版本的问题无法在Debian 7上工作...

----------ChromeDriver v2.9(2014-01-31)----------
支持Chrome v31-34

[更新1]

我尝试使用java 7java 6,但问题仍然存在。也许我应该尝试一下java 8 ^^

[更新2]

我正在使用以下命令测试chrome驱动程序,以确保这不是与jenkins有关的问题:

curl -X POST -H "Content-Type: application/json; charset=utf-8" -d "{\"desiredCapabilities\":{\"platform\":\"ANY\",\"browserName\":\"chrome\",\"chromeOptions\":{\"args\":[],\"extensions\":[]},\"version\":\"\",\"chrome.switches\":[]}}" localhost:12495/session

我收到了相同的错误信息:

{"sessionId":"210f3f837a798ee68cd91f089976d0c2","status":13,"value":{"message":"unknown error: Chrome failed to start: exited abnormally\n  (Driver info: chromedriver=2.9.248316,platform=Linux 3.2.0-4-686-pae x86)"}}

如果能帮忙找出问题所在,将不胜感激。

谢谢


有没有人能够从Jenkins以非无头模式运行? - SaiPawan
17个回答

63

我终于成功在我的笔记本电脑(服务器)上启动了Chrome驱动程序的Selenium测试。

重要的是使用Xvfb。不要问我为什么,但一旦你接受了这个事实,请按照以下步骤进行(比@Anon答案更详细)

  • 在Jenkins设置中添加全局属性

key : DISPLAY
value:0:0
  • 在您的服务器上后台启动Xvfb

  •  Xvfb :0 -ac -screen 0 1024x768x24 &
    

    1
    将 export DISPLAY=:XX 添加到代码中,其中 XX 是显示器的编号,这样问题就解决了。 - Michał Ignaszewski
    1
    感谢您的帮助!另外,一个可能会对我有帮助的提示是:设置全局变量可以通过“管理Jenkins -> 配置系统 -> 全局属性”来完成。 - Robert Townley
    这应该是 value:0:0 还是 value: :0 - a2f0
    2
    Xvfb提供了一个虚拟显示器来呈现浏览器。可能在无头模式下运行测试也可以减轻渲染浏览器的需要,否则Selenium会将其生成到虚拟显示器上。 - Leo
    这是最接近我的错误。我通过ssh localhost来更新我的组而没有重新启动X会话,导致了我的X11会话无效。持续地,Firefox和Chrome以类似的方式失败。 - dothebart

    16

    您是否在传递DISPLAY参数给Jenkins作业?

    我假设您正在尝试以无头模式执行测试。因此,请设置一些 X 服务(例如 Xvfb),并将显示编号传递给作业。对我很有用。


    我没有尝试在无头模式下执行测试,因为我正在使用笔记本电脑,并且即使盖子关闭,我也设置了屏幕保持开启。但是也许我应该尝试一下无头模式? - redochka
    在一个无头服务器上遇到了这个问题,确保 DISPLAY 设置正确解决了我的问题!谢谢! - sbditto85

    15
    1. 检查您使用的Chrome版本是否对应于ChromeDriver版本
    2. 如果您处于没有图形界面的Linux上,则必须使用“无头”模式headless mode

    WebDriverSettings.java 的示例:

    ...
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("prefs", chromePrefs);
    options.addArguments("--no-sandbox");
    options.addArguments("--headless"); //!!!should be enabled for Jenkins
    options.addArguments("--disable-dev-shm-usage"); //!!!should be enabled for Jenkins
    options.addArguments("--window-size=1920x1080"); //!!!should be enabled for Jenkins
    driver = new ChromeDriver(options);
    ...
    

    1
    谢谢,那就是我所缺少的。现在完美运作。 - ShadowCrafter_01
    多么美妙!它能与Alpine Linux、Chromium 86和PHP一起工作!现在就可以。 - tranthaihoang

    11

    我尝试使用wdio在Jenkins上运行基于Mocha框架的selenium。以下是解决此问题的步骤:

    安装Google Chrome

    sudo apt-get update 
    
    sudo apt-get install google-chrome-stable
    

    安装 Chrome 驱动程序

    wget http://chromedriver.storage.googleapis.com/2.23/chromedriver_linux64.zip
    unzip chromedriver_linux64.zip
    

    运行以下命令启动Selenium Web服务器

    nohup sudo Xvfb :10 -ac
    export DISPLAY=:10
    java -jar vendor/se/selenium-server-standalone/bin/selenium-server-standalone.jar -Dwebdriver.chrome.bin="/usr/bin/google-chrome" -Dwebdriver.chrome.driver="vendor/bin/chromedriver"
    

    在此之后,使用wdio命令开始测试

    wdio wdio.conf.js
    

    5

    迈克R的解决方案对我很有效。以下是完整的命令集:

    Xvfb :99 -ac -screen 0 1280x1024x24 &
    export DISPLAY=:99
    nice -n 10 x11vnc 2>&1 &
    

    稍后您可以运行 Google Chrome:
    google-chrome --no-sandbox &
    

    或者通过Selenium驱动程序启动Google Chrome(例如):

    ng e2e --serve true --port 4200 --watch true
    

    Protractor配置文件:

    capabilities: {
        'browserName': 'chrome',
        'chromeOptions': {
            'args': ['no-sandbox']
        }
    },
    

    xvfb是一种虚拟屏幕,它在仅使用终端时非常有用:https://en.wikipedia.org/wiki/Xvfb - changtung
    1
    “somehow”的原因是浏览器是一个图形应用程序,需要显示器来渲染任何内容。 - Corey Goldberg

    3

    我在使用 Chrome 的无头模式(selenium-webdriver 3 和 Ruby on Rails)时,在 Docker 容器中使用了 no-sandbox - a2f0
    运行时,除非您使用--no-sandbox,否则不能使用root,而许多Docker容器都以root身份运行,有些(配置可怕的)Jenkins节点也可能使用root。另一个选项是添加--headless,这有助于完全避免需要Xvfb。在Docker中,您还可能需要特定的--disable-dev-shm-usage,或者需要通过--mount type=bind,source=/dev/shm,target=/dev/shm绑定挂载该设备。 - dragon788

    3
    在Linux中,将这些代码行添加到我的代码中有所帮助。
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    
    chrome_options = Options()
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--no-sandbox")
    driver = webdriver.Chrome(options=chrome_options)
    
    driver.get("www.counterviews.online")
    

    没有沙盒是问题所在,因为在Linux中,chromedriver不允许在sudo下运行而没有该命令。 - PDHide

    2
    我们在尝试从Jenkins启动Selenium测试时遇到同样的问题。我选中了 '在构建之前启动Xvfb并在之后关闭' 方框,并传入了必要的屏幕选项,但我仍然收到此错误。
    当我们在执行Shell框中传递以下命令时,最终它起作用了。 Xvfb :99 -ac -screen 0 1280x1024x24 & nice -n 10 x11vnc 2>&1 & ... killall Xvfb

    你能否在非无头模式下运行? - SaiPawan
    谢谢,第一行代码为我修复了一个Chrome驱动程序 :) - user5734311

    1
    我正在运行类似的设置:Selenium 3.40,Chrome 61,chromedriver 2.33在Ubuntu 16.04上使用xvfb运行。
    我偶尔会遇到相同的Chrome错误。似乎有时候chromedriver未能清理与Chrome配置文件相关的临时文件。
    我的解决方法是在运行测试之前清理临时文件。
    rm -rf /tmp/.org.chromium.Chromium*
    

    我希望这个问题能在未来版本的chromedriver中得到解决,但目前这种方法已经解决了我的问题。


    1

    您不需要Xvfb

    由于Chrome版本与ChromeDriver版本不匹配,启动失败。下载并安装相同版本或最新版本即可解决问题。


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