Selenium/WebdriverIO Chrome без головы?
Возможно ли автоматическое тестирование браузера с помощью Selenium/WebdriverIO с использованием Chrome в режиме безголовых?
Предположительно Chrome --headless теперь вещь, но я не могу заставить их работать. Я надеялся, что у Селена есть выбор для этого?
Я инициализирую WebdriverIO так:
const WebdriverIO = require('webdriverio');
let driver = WebdriverIO.remote({
desiredCapabilities: {
browserName: browser, // "chrome" or "firefox"
},
});
И я начинаю Selenium, используя selenium-standalone:
selenium-standalone start > /dev/null 2>&1
Ответы
Ответ 1
WebdriverIO
Вот рабочий пример с WebdriverIO: https://github.com/OliverJAsh/webdriverio-chrome-headless/blob/5f231990310023f63f9ea8581567e0d56e2d53ea/src/index.ts
Основная идея:
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
Вот рабочий пример с WebDriverJs (официальный клиент JavaScript для WebDriver): https://github.com/OliverJAsh/webdriverjs-chrome-headless/blob/554ea2f150e962257119703c2473753b90842087/src/index.ts
Основная идея:
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();
Ответ 2
Я еще не пробовал это, но вы можете скачать --headless build из этого изображения докеры:
https://hub.docker.com/r/justinribeiro/chrome-headless/
или создайте его самостоятельно (это занимает несколько часов, и вам нужно много оперативной памяти:))
http://www.zackarychapple.guru/chrome/2016/08/24/chrome-headless.html
Затем вы можете просто указать --headless для вашего запуска chrome script и использовать хромированный рекордер, соответствующий этому вопросу в списке рассылки dev:
https://groups.google.com/a/chromium.org/forum/#!topic/headless-dev/aAGFq8n_s6g
Ответ 3
Вы можете добавить возможности в свой драйвер, добавив chromeOptions, который устанавливает аргументы в виде массива строки '--headless'
.
capabilities: [{
maxInstances: 1,
browserName: 'chrome',
chromeOptions: {
args: ['--headless'],
},
}],
Ответ 4
Вы можете использовать возможности в файле wdio.conf.js
capabilities: [{
maxInstances: 1,
browserName: 'chrome',
'goog:chromeOptions': {
args: ["--headless", "user-agent=...","--disable-gpu","--window-size=1440,735"]
}
Ответ 5
Вы можете использовать HtmlUnitDriver() для достижения безгласного теста браузера с помощью Selenium.
driver = new HtmlUnitDriver();
driver.get(URL);
String title = driver.getTitle();
System.out.println(title);
Но я понимаю, что вам нужен конкретный браузер без браузера с хром,... позвольте мне попытаться вернуться к вам.
Ответ 6
Помимо драйвера HTML Unit, другой подход, который помогает использовать webdriver в режиме не Gui, заключается в использовании буферного фрейма XVirtual для Linux. Используя его, вы можете использовать как Chrome, так и Firefox. Здесь описывается все решение, включающее Jenkins, Selenium Firefox и Blazemeter с использованием буферного фрейма XVirtual на Linux: Безгласное выполнение тестов селена в Jenkins. Конечно, вместо этого вы можете использовать драйвер Chrome.