node.js - index - Selenium/WebdriverIO Chrome sin cabeza?
selenium-webdriver npm (5)
¿Es posible realizar pruebas automáticas del navegador con Selenium / WebdriverIO usando Chrome en modo sin cabeza?
Supuestamente Chrome - sin cabeza es una cosa ahora, pero no puedo hacer que su ejemplo funcione. ¿Esperaba que Selenium tuviera una opción para esto?
Estoy inicializando WebdriverIO así:
const WebdriverIO = require(''webdriverio'');
let driver = WebdriverIO.remote({
desiredCapabilities: {
browserName: browser, // "chrome" or "firefox"
},
});
Y estoy empezando Selenium usando selenium-standalone :
selenium-standalone start > /dev/null 2>&1
WebdriverIO
Aquí hay un ejemplo de trabajo con WebdriverIO: https://github.com/OliverJAsh/webdriverio-chrome-headless/blob/5f231990310023f63f9ea8581567e0d56e2d53ea/src/index.ts
La idea básica:
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
Aquí hay un ejemplo de trabajo con WebDriverJs (el cliente oficial de JavaScript para WebDriver): https://github.com/OliverJAsh/webdriverjs-chrome-headless/blob/554ea2f150e962257119703c2473753b90842087/src/index.ts
La idea básica:
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();
Además del controlador de unidad HTML, otro enfoque que ayuda a usar webdriver en modo no Gui es usar XVirtual frame buffer para Linux. Usándolo puede utilizar los controladores de Chrome y Firefox. A continuación se describe la solución completa, que incluye Jenkins, el controlador Selenium Firefox y Blazemeter con el uso de XVirtual frame buffer en Linux: Ejecución sin cabeza de pruebas de selenio en Jenkins . Por supuesto que puedes usar el controlador Chrome en su lugar.
Puede agregar capacidades a su controlador agregando las opciones de chrome que establecen los argumentos como una matriz de String ''--headless''
.
capabilities: [{
maxInstances: 1,
browserName: ''chrome'',
chromeOptions: {
args: [''--headless''],
},
}],
Puede usar HtmlUnitDriver () para lograr una prueba de navegador sin cabeza con Selenium.
driver = new HtmlUnitDriver();
driver.get(URL);
String title = driver.getTitle();
System.out.println(title);
Pero entiendo que quieres una prueba específica del navegador sin cabeza con Chrome, ..... Déjame intentarlo y volver a ti.
Todavía no he intentado esto, pero puedes descargar - buildless desde esta imagen de docker:
https://hub.docker.com/r/justinribeiro/chrome-headless/
o constrúyalo usted mismo (esto toma algunas horas y necesita una gran cantidad de RAM :)) http://www.zackarychapple.guru/chrome/2016/08/24/chrome-headless.html
Entonces deberías poder simplemente especificar --sin seguridad para tu script de inicio de Chrome, y usar chromedriver, de acuerdo con esta pregunta en la lista de correo de desarrolladores: https://groups.google.com/a/chromium.org/forum/#!topic/headless-dev/aAGFq8n_s6g