webentwicklung-frage-antwort-db.com.de

Selenium/WebdriverIO Chrome headless?

Ist es möglich, automatisierte Browsertests mit Selenium / WebdriverIO mit Chrome im Headless-Modus durchzuführen?

Angeblich Chrome - headless ist jetzt eine Sache, aber ich kann ihr Beispiel nicht zum Laufen bringen. Ich hatte gehofft, Selenium hatte eine Option dafür?


Ich initialisiere WebdriverIO wie folgt:

const WebdriverIO = require('webdriverio');

let driver = WebdriverIO.remote({
    desiredCapabilities: {
        browserName: browser, // "chrome" or "firefox"
    },
});

Und ich beginne Selenium mit Selen-Standalone :

Selenium-standalone start > /dev/null 2>&1
16
mpen

WebdriverIO

Hier ist ein funktionierendes Beispiel für WebdriverIO: https://github.com/OliverJAsh/webdriverio-chrome-headless/blob/5f231990310023f63f9ea8581567e0d56e2d53ea/src/index.ts

Die Grundidee:

 import * as webdriverio from 'webdriverio';

// Headless is supported in Chrome >= 58. Not currently stable, so using dev
// build.
const CHROME_BIN_PATH = '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome';

const options = {
    desiredCapabilities: {
        browserName: 'chrome',
        chromeOptions: {
            binary: CHROME_BIN_PATH,
            args: [
                'headless',
                // Use --disable-gpu to avoid an error from a missing Mesa
                // library, as per
                // https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
                'disable-gpu',
            ],
        },
    },
};
webdriverio
    .remote(options)
    .init()
    .url('http://www.google.com')
    .getTitle().then(title => {
        console.log({ title });
    })
    .end();

WebDriverJS

Hier ist ein Arbeitsbeispiel mit WebDriverJs (dem offiziellen JavaScript-Client für WebDriver): https://github.com/OliverJAsh/webdriverjs-chrome-headless/blob/554ea2f150e962257119703c2473753b90842087/src/index.ts

Die Grundidee:

import * as webdriver from 'Selenium-webdriver';
import * as chromeDriver from 'Selenium-webdriver/chrome';

// Headless is supported in Chrome >= 58. Not currently stable, so using dev
// build.
const CHROME_BIN_PATH = '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome';

const options = new chromeDriver.Options();
options.setChromeBinaryPath(CHROME_BIN_PATH);
options.addArguments(
    'headless',
    // Use --disable-gpu to avoid an error from a missing Mesa library, as per
    // https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
    'disable-gpu',
);

const driver = new webdriver.Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();
23

Ich habe es selbst noch nicht ausprobiert, aber Sie können --headless build von diesem Docker-Image herunterladen: 

https://hub.docker.com/r/justinribeiro/chrome-headless/

oder bauen Sie es selbst (dies dauert einige Stunden und Sie benötigen viel RAM :)) http://www.zackarychapple.guru/chrome/2016/08/24/chrome-headless .html

Dann sollten Sie in der Lage sein, einfach --headless zu Ihrem Chrome-Startskript anzugeben und Chromedriver zu verwenden, indem Sie dieser Frage in der Dev-Mailingliste folgen: https://groups.google.com/a/chromium.org/forum/#! topic/headless-dev/aAGFq8n_s6g

2
cvakiitho

Sie können Ihrem Treiber Funktionen hinzufügen, indem Sie chromeOptions hinzufügen, das die Argumente als Array von String '--headless' Festlegt.

 capabilities: [{

        maxInstances: 1,

        browserName: 'chrome',
        chromeOptions: {
            args: ['--headless'],
        },

    }],
1
Biswajeet gope

Sie können Funktionen in der Datei wdio.conf.js verwenden

capabilities: [{

    maxInstances: 1,
    browserName: 'chrome',
    'goog:chromeOptions': { 
         args: ["--headless", "user-agent=...","--disable-gpu","--window-size=1440,735"]
    }
1
Mridul

Sie können HtmlUnitDriver () verwenden, um einen Headless-Browsertest mit Selenium durchzuführen.

driver = new HtmlUnitDriver();
driver.get(URL); 
String title =  driver.getTitle();
System.out.println(title);

Aber ich verstehe, dass Sie einen speziellen Headless-Browsertest mit Chrome wünschen, ..... Lassen Sie mich versuchen, sich mit Ihnen in Verbindung zu setzen.

0
Dharam

Neben dem HTML-Einheitentreiber besteht die Verwendung von XVirtual Frame Buffer für Linux als ein weiterer Ansatz, der die Verwendung des Web-Treibers im Nicht-Gui-Modus unterstützt. Sie können sowohl Chrome- als auch Firefox-Treiber verwenden. Die gesamte Lösung, die Jenkins, Selenium Firefox-Treiber und Blazemeter mit XVirtual Frame Buffer unter Linux enthält, wird hier beschrieben: Headless Ausführung von Selenium-Tests in Jenkins Natürlich können Sie stattdessen den Chrome-Treiber verwenden. 

0