Эмуляция
Введение
С помощью Playwright вы можете тестировать свое приложение в любом браузере, а также эмулировать реальное устройство, такое как мобильный телефон или планшет. Просто настройте устройства, которые вы хотите эмулировать, и Playwright будет симулировать поведение браузера, такое как "userAgent"
, "screenSize"
, "viewport"
и наличие "hasTouch"
. Вы также можете эмулировать "geolocation"
, "locale"
и "timezone"
для всех тестов или для конкретного теста, а также установить "permissions"
для отображения уведомлений или изменения "colorScheme"
.
Устройства
Playwright может эмулировать различные устройства, указывая параметры setDeviceScaleFactor
, setHasTouch
, setIsMobile
, setScreenSize
, setUserAgent
и setViewportSize
при создании контекста с помощью Browser.newContext().
Viewport
Viewport включен в устройство, но вы можете переопределить его для некоторых тестов с помощью Page.setViewportSize().
Тестовый файл:
То же самое работает внутри тестового файла.
// Создать контекст с заданным viewport
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setViewportSize(1280, 1024));
// Изменить размер viewport для отдельной страницы
page.setViewportSize(1600, 1200);
// Эмулировать высокое разрешение DPI
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setViewportSize(2560, 1440)
.setDeviceScaleFactor(2));
isMobile
Учитывается ли мета-тег viewport и включены ли события касания.
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.isMobile(false));
Локаль и Часовой пояс
Эмулируйте локаль и часовой пояс пользователя, которые могут быть установлены глобально для всех тестов в конфигурации и затем переопределены для конкретных тестов.
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setLocale("de-DE")
.setTimezoneId("Europe/Berlin"));

Разрешения
Разрешите приложению показывать системные уведомления.
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setPermissions(Arrays.asList("notifications")));
Разрешите уведомления для конкретного домена.
context.grantPermissions(Arrays.asList("notifications"),
new BrowserContext.GrantPermissionsOptions().setOrigin("https://skype.com"));
Отмените все разрешения с помощью BrowserContext.clearPermissions().
context.clearPermissions();
Геолокация
Предоставьте разрешения "geolocation"
и установите геолокацию для конкретной области.
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setGeolocation(41.890221, 12.492348)
.setPermissions(Arrays.asList("geolocation")));

Измените местоположение позже:
context.setGeolocation(new Geolocation(48.858455, 2.294474));
Примечание: вы можете изменить геолокацию только для всех страниц в контексте.
Цветовая схема и Медиа
Эмулируйте "colorScheme"
пользователя. Поддерживаемые значения: 'light' и 'dark'. Вы также можете эмулировать тип медиа с помощью Page.emulateMedia().
// Создать контекст с темным режимом
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setColorScheme(ColorScheme.DARK)); // или "light"
// Создать страницу с темным режимом
Page page = browser.newPage(new Browser.NewPageOptions()
.setColorScheme(ColorScheme.DARK)); // или "light"
// Изменить цветовую схему для страницы
page.emulateMedia(new Page.EmulateMediaOptions().setColorScheme(ColorScheme.DARK));
// Изменить медиа для страницы
page.emulateMedia(new Page.EmulateMediaOptions().setMedia(Media.PRINT));

User Agent
User Agent включен в устройство, и поэтому вам редко потребуется его изменять, однако если вам нужно протестировать другой user agent, вы можете переопределить его с помощью свойства userAgent
.
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setUserAgent("My user agent"));
Офлайн
Эмулируйте отключение сети.
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setOffline(true));
Включение JavaScript
Эмулируйте сценарий пользователя, в котором JavaScript отключен.
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.javaScriptEnabled(false));