Мы рады сообщить, что как безголовый режим Chrome ( chrome --headless ), так и безголовая оболочка ( chrome-headless-shell ) теперь используют полностью настраиваемый виртуальный безголовый экран, независимый от физических дисплеев, подключенных к системе, на которой работает Chrome. Начальную конфигурацию безголового экрана можно указать с помощью параметра командной строки --screen-info. Этот параметр определяет такие свойства, как точка отсчета, размер, коэффициент масштабирования, ориентация и рабочая область для каждого дисплея.
В режиме работы Chrome без графического интерфейса виртуальные безграфические экраны можно добавлять и удалять с помощью команд протокола Chrome DevTools Protocol (CDP) Emulation.addScreen и Emulation.removeScreen .
Новые возможности Headless Chrome полностью поддерживаются Puppeteer, что позволяет автоматизировать сложные сценарии отображения в реальных условиях, которые ранее было трудно тестировать. Независимо от того, нужно ли вам проверить работу киоскового приложения в полноэкранном режиме на дисплее высокого разрешения 3K, организовать многооконные рабочие процессы на двух мониторах или обеспечить корректную адаптацию пользовательского интерфейса при внезапном отключении пользователем дополнительного экрана, Headless Chrome и Puppeteer теперь помогут вам в этом.
Проверка статических конфигураций экрана
Используйте статическую конфигурацию экрана с помощью параметра --screen-info , чтобы оценить свой веб-сайт в среде статического экрана. Ниже приведен список распространенных сценариев:
- Протестируйте поведение с помощью параметров
--start-maximizedи--start-fullscreen, учитывая рабочую область экрана и масштабный коэффициент (например, в режиме киоска). - Оцените поведение методов
element.requestFullscreen()иdocument.exitFullscreen()на экранах различных размеров и в многоэкранных конфигурациях. - Обратите внимание на поведение режима разделенного экрана, когда окно занимает несколько экранов или перемещается между ними.
- Проверьте корректность обработки различных настроек дисплея, включая масштабирование, разрешение и разрешение экранов с высоким DPI.
- Оцените открытие окон или всплывающих окон на основном и дополнительном экранах.
Конфигурация с двумя экранами
Следующий скрипт Puppeteer настраивает Chrome для работы в двухэкранном режиме с помощью ключа --screen-info . Основной экран 800x600 настроен в альбомной ориентации, а дополнительный экран 600x800, расположенный непосредственно справа от основного экрана, — в портретной ориентации.
import puppeteer from 'puppeteer-core';
const browser = await puppeteer.launch({
args: ['--screen-info={800x600 label=1st}{600x800 label=2nd}'],
});
const screens = await browser.screens();
const screenInfos = screens.map(
s => `Screen [${s.id}]`
+ ` ${s.left},${s.top} ${s.width}x${s.height}`
+ ` label='${s.label}'`
+ ` isPrimary=${s.isPrimary}`
+ ` isExtended=${s.isExtended}`
+ ` isInternal=${s.isInternal}`
+ ` colorDepth=${s.colorDepth}`
+ ` devicePixelRatio=${s.devicePixelRatio}`
+ ` avail=${s.availLeft},${s.availTop} ${s.availWidth}x${s.availHeight}`
+ ` orientation.type=${s.orientation.type}`
+ ` orientation.angle=${s.orientation.angle}`
);
console.log(`Number of screens: ${screens.length}\n` + screenInfos.join('\n'));
await browser.close();
Выход :
Number of screens: 2
Screen [1] 0,0 800x600 label='1st' isPrimary=true isExtended=true isInternal=false colorDepth=24 devicePixelRatio=1 avail=0,0 800x600 orientation.type=landscapePrimary orientation.angle=0
Screen [2] 800,0 600x800 label='2nd' isPrimary=false isExtended=true isInternal=false colorDepth=24 devicePixelRatio=1 avail=800,0 600x800 orientation.type=portraitPrimary orientation.angle=0
Тестирование динамических конфигураций экрана
Динамически настраивайте среду экрана, чтобы проверить, как ваш веб-сайт реагирует на неожиданные подключения или отключения монитора, имитируя реальные действия пользователя, такие как подключение ноутбука к настольному монитору. Эти сценарии эмулируются с помощью команд CDP , таких как Emulation.addScreen и Emulation.removeScreen . С помощью этих команд вы можете сделать следующее:
- Убедитесь, что при подключении нового монитора веб-страницы открываются в новых окнах и всплывающих окнах в рабочей области нового монитора.
- Убедитесь, что при отключении монитора во время работы веб-страницы размер и положение его окна корректно адаптируются к оставшимся дисплеям.
Откройте и разверните окно на новом экране.
Следующий скрипт Puppeteer открывает окно в стандартном положении на экране 800x600, затем перемещает и разворачивает окно на новый созданный экран. После этого он возвращает окно в его обычное состояние.
import puppeteer from 'puppeteer-core';
const browser = await puppeteer.launch({
args: ['--screen-info={800x600}'],
});
async function logWindowBounds() {
const bounds = await browser.getWindowBounds(windowId);
console.log(`${bounds.left},${bounds.top}` +
` ${bounds.width}x${bounds.height}` +
` ${bounds.windowState}`);
}
const page = await browser.newPage({type: 'window'});
const windowId = await page.windowId();
await logWindowBounds();
const screenInfo = await browser.addScreen({
left: 800,
top: 0,
width: 1600,
height: 1200,
});
await browser.setWindowBounds(windowId, {
left: screenInfo.left + 50,
top: screenInfo.top + 50,
width: screenInfo.width - 100,
height: screenInfo.height - 100,
});
await logWindowBounds();
await browser.setWindowBounds(windowId, {windowState: 'maximized'});
await logWindowBounds();
await browser.setWindowBounds(windowId, {windowState: 'normal'});
await logWindowBounds();
await browser.close();
Выход :
20,20 780x580 normal
850,50 1500x1100 normal
800,0 1600x1200 maximized
850,50 1500x1100 normal
Больше вариантов использования, примеров и возможностей.
Больше примеров кода вы найдете на pptr.dev . Если у вас возникнут проблемы, сообщите нам об этом через общедоступную систему отслеживания ошибок Puppeteer на GitHub .
Функция настройки безголового режима доступна в стабильных версиях Chrome, начиная с версии 142.