невідома помилка: Chrome не вдалося запустити: вийшов аномально (інформація про драйвер: chromedriver = 2.9


77

Я намагаюся запустити тести на селен на Debian 7, але безуспішно.

Помилка:

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 29 з chrome 34.0.1847.76 beta, що працює на Debian 7 32 біт . Я використовую селен-Java 2.33.0

За цим посиланням , chromedriver 29 - правильна версія для chrome 34 . І як би там не було, попередні версії не працюють на Debian 7 через версію glibc ...

---------- ChromeDriver v2.9 (31.01.2014) ----------
Підтримує Chrome v31-34

[оновлення 1]

Я пробував як з Java 7, так і з Java 6 , все ще та сама проблема. Можливо, мені слід спробувати з java 8 ^^

[оновлення 2]

Я використовую цю команду для тестування драйвера chrome, щоб переконатися, що це не проблема з jenkins:

curl -X POST -H "Тип вмісту: application / json; charset = utf-8" -d "{\" бажані можливості \ ": {\" платформа \ ": \" БУДЬ-ЯКИЙ \ ", \" Ім'я браузера \ ": \ "chrome \", \ "chromeOptions \": {\ "args \": [], \ "розширення \": []}, \ "версія \": \ "\", \ "chrome.switches \" : []}} "localhost: 12495 / сесія

Я отримую те саме повідомлення про помилку:

{"sessionId": "210f3f837a798ee68cd91f089976d0c2", "status": 13, "value": {"message": "невідома помилка: Не вдалося запустити Chrome: аномально вийшов \ n (Інформація про драйвер: chromedriver = 2.9.248316, платформа = Linux 3.2.0-4-686-pae x86) "}}

Будемо вдячні за будь-яку допомогу, щоб дізнатись, що відбувається.

Дякую


Будь-хто, хто може бігати в безголовому режимі від дженкінів
SaiPawan

Відповіді:


61

Нарешті мені вдалося пройти тести на селен, запустивши драйвер Chrome на своєму ноутбуці (сервері).

Найважливіший біт - використовувати Xvfb. Не питайте мене, чому, але як тільки ви приймете цей факт, виконайте такі дії (більш детально, ніж відповідь @Anon)

  • У вас налаштування Дженкінса додають глобальну властивість

    key : DISPLAY
    value:0:0
    
  • На вашому сервері запустіть Xvfbу фоновому режимі:

     Xvfb :0 -ac -screen 0 1024x768x24 &
    

1
Додавання експорту DISPLAY =: XX, де XX - це кількість проблем, що вирішують проблему дисплея, для мене
Міхал Ігнашевський

1
Дякую за допомогу! Крім того, примітка, яка могла б мені допомогти: Встановлення глобальних змінних здійснюється за допомогою "Керування Дженкінсом -> Налаштування системи -> Глобальні властивості"
Роберт Таунлі

Це має бути value:0:0чи value: :0?
dps

1
Xvfb забезпечує віртуальний дисплей для відображення браузера. Можливо, запуск тестів у безголовому режимі також може пом'якшити необхідність надання браузеру, що селен інакше нереститься на віртуальний дисплей.
Лев

15

Ви передаєте параметр DISPLAY на свою роботу Дженкінса?

Я припускаю, що ви також намагаєтесь виконати тести в безголовому режимі. Тож налаштуйте якусь службу x (тобто Xvfb) і передайте номер ДИСПЛЕЯ на своє завдання. Працював у мене.


Я не намагаюся виконувати тести в безголовому режимі, тому що я використовую ноутбук, і я встановив, щоб екран залишався включеним, навіть коли кришка закрита. Але, може, мені слід спробувати в безголовому режимі?
редочка

Виникла ця проблема на безголовому сервері, переконавшись, що DISPLAY був встановлений правильно, вирішено мою проблему! Дякую!
sbditto85,

10

Я намагався запустити селен на Дженкінса з фреймворком Mocha за допомогою wdio. Ось такі кроки для вирішення цієї проблеми: -

Встановіть 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

Виконайте наступні команди, щоб запустити веб-сервер селену

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

Рішення Mike R працює для мене. Це повний набір команд:

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

Пізніше ви можете запустити google-chrome:

google-chrome --no-sandbox &

Або запустіть google chrome через драйвер селену (наприклад):

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

Файл Protractor.conf:

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

xvfb - це віртуальний екран, так чи інакше допомагає, якщо ви використовуєте лише термінал: en.wikipedia.org/wiki/Xvfb
changtung

1
"якимось чином" тому, що браузер - це графічна програма, яка вимагає відображення будь-чого
Корі Голдберг,

3

Передача без-пісочниці в exec здається важливим для дженкінів на вікнах на передньому плані або як послуга. Ось моє рішення

chromedriver виходить з ладу на windows jenkins slave, що працює на передньому плані


Я використовував no-sandbox , використовуючи хром у контейнері докера в безголовому режимі (селен-веб-драйвер 3 і Рубін на рейках).
dps

Запуск його як root не працює, якщо ви не використовуєте, --no-sandboxі багато контейнерів Docker запускають речі як root, а деякі (страшно налаштовані) вузли Jenkins також можуть використовувати root. Ви можете додати ще один варіант, --headlessякий допомагає повністю уникнути потреби у Xvfb. Вам також може знадобитися --disable-dev-shm-usageспеціально в Docker, або вам потрібно буде прив'язати кріплення цього пристрою під час запуску --mount type=bind,source=/dev/shm,target=/dev/shm.
dragon788

3

У нас була та ж проблема під час спроби запустити тести на селен від Дженкінса. Я вибрав поле " Запустити Xvfb перед збіркою та вимкнути його після " і передав необхідні параметри екрана, але ця помилка все ще з'являлася.

Врешті-решт це спрацювало, коли ми передали наступні команди у поле Виконати оболонку.

Xvfb :99 -ac -screen 0 1280x1024x24 & nice -n 10 x11vnc 2>&1 & ... killall Xvfb


Чи можете ви працювати в режимі без голови
SaiPawan,

Дякую, перший рядок виправив для мене сценарій chrome driver :)
Кріс Г

3
  1. Переконайтеся, що ви використовуєте версію ChromeDriver, яка відповідає вашій версії Chrome
  2. Якщо ви працюєте на Linux без графічного інтерфейсу, потрібно використовувати режим "без голови"

Приклад 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

Я запускаю подібну установку: Selenium 3.40, Chrome 61, chromedriver 2.33, що працює з xvfb на ubuntu 16.04.

Я періодично отримував ту саму помилку Chrome. Здається, що іноді chromedriver не вдається очистити тимчасові файли, пов’язані з профілем Chrome.

Обхідний шлях для мене - це очищення тимчасових файлів перед запуском тестів:

rm -rf /tmp/.org.chromium.Chromium*

Я сподіваюсь, це буде вирішено в наступних версіях chromedriver, але наразі це вирішує проблему в моєму випадку.


1

Я давно боровся з цією проблемою, і буквально за день я придумав, як її усунути, і сьогодні я можу запустити 50 потокових процесів із викликом селену, не бачачи цієї проблеми більше, а також припинити збій моєї машини з пам'яттю проблема із занадто великою кількістю відкритих процесів хромедрівера.

  1. Я використовую селен 3.7.1, chromedrive 2.33, java.version: '1.8.0', redhat ver '3.10.0-693.5.2.el7.x86_64', версія браузера chrome: 60.0.3112.90;
  2. запуск відкритого сеансу з екраном, щоб переконатися, що мій сеанс ніколи не вмирає,
  3. працює Xvfb: nohup Xvfb -ac: 15 -екран 0 1280x1024x16 &
  4. експортувати ДИСПЛЕЙ: 15 з .bashsh / .profile

ці 4 пункти є базовим параметром, який би вже всі знали, тепер з’являється код, де всі зробили велику різницю для досягнення успіху:

public class HttpWebClient {
    public static ChromeDriverService service;
    public ThreadLocal<WebDriver> threadWebDriver = new ThreadLocal<WebDriver>(){
    @Override
    protected WebDriver initialValue() {
        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("permissions.default.stylesheet", 2);
        profile.setPreference("permissions.default.image", 2);
        profile.setPreference("dom.ipc.plugins.enabled.libflashplayer.so", "false");
        profile.setPreference(FirefoxProfile.ALLOWED_HOSTS_PREFERENCE, "localhost");
        WebDriver driver = new FirefoxDriver(profile);
        return driver;
    };
};

public HttpWebClient(){
    // fix for headless systems:
    // start service first, this will create an instance at system and every time you call the 
    // browser will be used
    // be sure you start the service only if there are no alive instances, that will prevent you to have 
    // multiples chromedrive instances causing it to crash
    try{
        if (service==null){
            service = new ChromeDriverService.Builder()
            .usingDriverExecutable(new File(conf.get("webdriver.chrome.driver"))) // set the chromedriver path at your system
            .usingAnyFreePort()
            .withEnvironment(ImmutableMap.of("DISPLAY", ":15"))
            .withSilent(true)
            .build();
            service.start();
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

// my Configuration class is for good and easy setting, you can replace it by using values instead.
public WebDriver getDriverForPage(String url, Configuration conf) {
    WebDriver driver = null;
    DesiredCapabilities capabilities = null;
    long pageLoadWait = conf.getLong("page.load.delay", 60);

    try {
            System.setProperty("webdriver.chrome.driver", conf.get("webdriver.chrome.driver"));
            String driverType = conf.get("selenium.driver", "chrome");

        capabilities = DesiredCapabilities.chrome();
        String[] options = new String[] { "--start-maximized", "--headless" };
        capabilities.setCapability("chrome.switches", options);

                    // here is where your chromedriver will call the browser
                    // I used to call the class ChromeDriver directly, which was causing too much problems 
                    // when you have multiple calls
        driver = new RemoteWebDriver(service.getUrl(), capabilities);

        driver.manage().timeouts().pageLoadTimeout(pageLoadWait, TimeUnit.SECONDS);
        driver.get(url);

                    // never look back

    } catch (Exception e) {
        if (e instanceof TimeoutException) {
            LOG.debug("Crawling URL : "+url);
            LOG.debug("Selenium WebDriver: Timeout Exception: Capturing whatever loaded so far...");
            return driver;
        }
        cleanUpDriver(driver);
        throw new RuntimeException(e);
    }
    return driver;
}

public void cleanUpDriver(WebDriver driver) {
    if (driver != null) {
        try {
                            // be sure to close every driver you opened
            driver.close();
            driver.quit();
            //service.stop(); do not stop the service, bcz it is needed
            TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

}

Удачі, і я сподіваюся, ви більше не бачите цієї проблеми зі збоями

Прокоментуйте ваш успіх

З найкращими побажаннями,


1

У 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")

0

Експорт DISPLAYзмінної - це, безумовно, рішення, але залежно від налаштувань вам, можливо, доведеться зробити це дещо по-іншому.

У моєму випадку у мене два різні процеси: перший запускає Xvfb, другий запускає тести. Отже, мої знання сценаріїв оболонки трохи іржаві, але я з’ясував, що експорт DISPLAYзмінної з першого процесу не зробив її доступною у другому процесі.

На щастя, Selenium WebDriver дозволяє вам «перевизначити» своє середовище. Це моя функція для створення драйвера для Chrome в JS. Впевнений, що еквівалент існує для вашої мови програмування:

const caps = require('selenium-webdriver/lib/capabilities');
const chrome = require('selenium-webdriver/chrome');
const chromedriver = require('chromedriver');

module.exports = function (cfg) {
    let serviceBuilder = new chrome.ServiceBuilder(chromedriver.path);
    let options = chrome.Options.fromCapabilities(caps.Capabilities.chrome());
    let service;
    let myENV = new Map();

    // 're-export' the `DISPLAY` variable
    myENV.set('DISPLAY', ':1');
    serviceBuilder.setEnvironment(myENV);

    service = serviceBuilder.build();

    options.addArguments('disable-setuid-sandbox');
    options.addArguments('no-sandbox');
    options.addArguments('allow-insecure-localhost');
    options.excludeSwitches('test-type');

    return chrome.Driver.createSession(options, service);
};

Ви можете виконати свій початковий скрипт xvfb у поточному контекстному контексті оболонки ( stackoverflow.com/questions/16618071/… ):. xvfb.sh
Мілсо

0

У мене була подібна проблема з тестами maven на x86 linux, які я використовував у терміналі. Я входив до Linux за допомогою ssh . Я розпочав свої тести Java на селен від

mvn -DargLine="-Dbaseurl=http://http://127.0.0.1:8080/web/" install

За винятком мого додатка, після запуску цих тестів я отримав помилку в журналах:

unknown error: Chrome failed to start: exited abnormally

Я запускав ці тести як користувач root. До цієї помилки я отримав, що ChromeDriver відсутній. Я просунувся вперед, встановивши двійковий файл ChromeDriver і додавши його до PATH. Але тоді мені довелося встановити браузер google-chrome - одного лише ChromeDriver недостатньо для запуску тестів. Отже, помилка полягає в проблемі, можливо, з буфером екрану у вікні терміналу, але Ви можете встановити Xvfb, який є віртуальним буфером екрану. Важливо те, що ви повинні запускати свої тести не як root, тому що ви можете отримати чергову помилку браузера Chrome. Так ні, як root я запускаю:

export DISPLAY=:99
Xvfb :99 -ac -screen 0 1280x1024x24 &

Тут важливо, що в моєму випадку число, пов’язане з DISPLAY, повинно бути однаковим із параметром Xvfb: NN. 99 у такому випадку. У мене була інша проблема, тому що я запустив Xvfb з іншим значенням DISPLAY, і я хотів, щоб він зупинився. Щоб перезапустити Xvfb:

ps -aux | grep Xvfb
kill -9 PID
sudo rm /tmp/.X11-unix/X99

Тож знайдіть PID процесу за допомогою grep. Убити процес Xvfb. А ще є блокування в /tmp/.X11-unix/XNN, тож видаліть цей замок, і ви зможете знову запустити сервер. Якщо ви запускаєте не з правами root, встановлюєте схожі дисплеї, встановлюєте google-chrome, тоді за допомогою maven ви можете розпочати тестування на селен. Мої тести відповідали цим правилам та операціям.


0

Не впевнений, що це зупиняє всіх інших, але я вирішив це, оновивши chromedriver, а потім переконавшись, що це місце було в місці, з якого міг читати мій користувач (здається, багато людей, які стикаються з цим, бачать це з причин дозволу, як я) .

На Ubuntu 16.04: 1. Завантажте chromedriver (версія 2.37 для мене) 2. Розпакуйте файл 3. Встановіть його десь розумно (я вибрав / usr / local / bin / chromedriver)

Навіть не потрібно володіти моїм користувачем, якщо він виконується у всьому світі ( sudo chmod +x /usr/local/bin/chromedriver)


0

Я збільшую максимальну пам’ять для запуску node-chrome -Xmx3g, і це працює для мене


0

Вам не потрібен Xvfb

Не вдається запустити через невідповідність версії chrome та версії chromedriver. Завантаження та встановлення однакових версій або найновіших версій вирішить проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.