Skip to main content

Эмуляция

Введение

С помощью Playwright вы можете тестировать ваше приложение в любом браузере, а также эмулировать реальное устройство, такое как мобильный телефон или планшет. Просто настройте устройства, которые вы хотите эмулировать, и Playwright будет симулировать поведение браузера, такое как "userAgent", "screenSize", "viewport" и наличие поддержки "hasTouch". Вы также можете эмулировать "geolocation", "locale" и "timezone" для всех тестов или для конкретного теста, а также установить "permissions" для показа уведомлений или изменения "colorScheme".

Устройства

Playwright поставляется с реестром параметров устройств, используя playwright.devices для выбранных настольных, планшетных и мобильных устройств. Это может быть использовано для симуляции поведения браузера для конкретного устройства, такого как user agent, размер экрана, viewport и наличие поддержки touch. Все тесты будут выполняться с указанными параметрами устройства.

playwright.config.ts
import { defineConfig, devices } from '@playwright/test'; // импорт устройств

export default defineConfig({
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
{
name: 'Mobile Safari',
use: {
...devices['iPhone 13'],
},
},
],
});
playwright.dev website emulated for iPhone 13

Viewport

Viewport включен в устройство, но вы можете переопределить его для некоторых тестов с помощью page.setViewportSize().

playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
// Важно определить свойство `viewport` после деструктуризации `devices`,
// так как устройства также определяют `viewport` для этого устройства.
viewport: { width: 1280, height: 720 },
},
},
]
});

Файл теста:

tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.use({
viewport: { width: 1600, height: 1200 },
});

test('my test', async ({ page }) => {
// ...
});

То же самое работает внутри файла теста.

tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.describe('specific viewport block', () => {
test.use({ viewport: { width: 1600, height: 1200 } });

test('my test', async ({ page }) => {
// ...
});
});

isMobile

Учитывается ли мета-тег viewport и включены ли события касания.

playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
// Важно определить свойство `isMobile` после деструктуризации `devices`,
// так как устройства также определяют `isMobile` для этого устройства.
isMobile: false,
},
},
]
});

Локаль и Часовой пояс

Эмулируйте локаль и часовой пояс пользователя, которые могут быть установлены глобально для всех тестов в конфигурации и затем переопределены для конкретных тестов.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
use: {
// Эмулирует локаль пользователя.
locale: 'en-GB',

// Эмулирует часовой пояс пользователя.
timezoneId: 'Europe/Paris',
},
});
tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.use({
locale: 'de-DE',
timezoneId: 'Europe/Berlin',
});

test('my test for de lang in Berlin timezone', async ({ page }) => {
await page.goto('https://www.bing.com');
// ...
});
Bing in german lang and timezone

Разрешения

Разрешить приложению показывать системные уведомления.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
use: {
// Предоставляет указанные разрешения контексту браузера.
permissions: ['notifications'],
},
});

Разрешить уведомления для конкретного домена.

tests/example.spec.ts
import { test } from '@playwright/test';

test.beforeEach(async ({ context }) => {
// Выполняется перед каждым тестом и авторизует каждую страницу.
await context.grantPermissions(['notifications'], { origin: 'https://skype.com' });
});

test('first', async ({ page }) => {
// страница имеет разрешение на уведомления для https://skype.com.
});

Отмените все разрешения с помощью browserContext.clearPermissions().

// Библиотека
await context.clearPermissions();

Геолокация

Предоставьте разрешения "geolocation" и установите геолокацию для конкретной области.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
use: {
// Геолокация контекста
geolocation: { longitude: 12.492507, latitude: 41.889938 },
permissions: ['geolocation'],
},
});
tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.use({
geolocation: { longitude: 41.890221, latitude: 12.492348 },
permissions: ['geolocation'],
});

test('my test with geolocation', async ({ page }) => {
// ...
});
geolocation for italy on bing maps

Измените местоположение позже:

tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.use({
geolocation: { longitude: 41.890221, latitude: 12.492348 },
permissions: ['geolocation'],
});

test('my test with geolocation', async ({ page, context }) => {
// переопределить местоположение для этого теста
await context.setGeolocation({ longitude: 48.858455, latitude: 2.294474 });
});

Примечание: вы можете изменить геолокацию только для всех страниц в контексте.

Цветовая схема и медиа

Эмулируйте "colorScheme" пользователя. Поддерживаемые значения: 'light' и 'dark'. Вы также можете эмулировать тип медиа с помощью page.emulateMedia().

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
use: {
colorScheme: 'dark',
},
});
tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.use({
colorScheme: 'dark' // или 'light'
});

test('my test with dark mode', async ({ page }) => {
// ...
});
playwright web in dark mode

User Agent

User Agent включен в устройство, и поэтому вам редко потребуется его изменять, однако, если вам нужно протестировать другой user agent, вы можете переопределить его с помощью свойства userAgent.

tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.use({ userAgent: 'My user agent' });

test('my user agent test', async ({ page }) => {
// ...
});

Офлайн

Эмулируйте отключение сети.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
use: {
offline: true
},
});

Включение JavaScript

Эмулируйте сценарий пользователя, в котором JavaScript отключен.

tests/example.spec.ts
import { test, expect } from '@playwright/test';

test.use({ javaScriptEnabled: false });

test('test with no JavaScript', async ({ page }) => {
// ...
});