Spec-Zone.ru › Playwright

Таймауты

В Playwright Test есть несколько настраиваемых таймаутов для различных задач.

Таймаут По умолчанию Описание
Таймаут теста 30 000 мс Таймаут для каждого теста
Устанавливается в конфигурации
{ timeout: 60_000 }
Переопределяется в тесте
test.setTimeout(120_000)
Таймаут ожидания 5 000 мс Таймаут для каждого утверждения
Устанавливается в конфигурации
{ expect: { timeout: 10_000 } }
Переопределяется в тесте
expect(locator).toBeVisible({ timeout: 10_000 })

Таймаут теста​

Playwright Test накладывает таймаут на каждый тест, по умолчанию 30 секунд. Время, затраченное функцией теста, настройкой фикстуры и beforeEach хуками, учитывается в таймауте теста.

Тест, который превысил таймаут, выводит следующую ошибку:

example.spec.ts:3:1 › basic test ===========================

Timeout of 30000ms exceeded.

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

То же значение таймаута также применяется к beforeAll и afterAll хукам, но они не разделяют время ни с каким тестом.

Установить таймаут теста в конфигурации​

import { defineConfig } from '@playwright/test';

export default defineConfig({
  timeout: 120_000,
});

Ссылка на API: testConfig.timeout.

Установить таймаут для отдельного теста​

import { test, expect } from '@playwright/test';

test('slow test', async ({ page }) => {
  test.slow(); // Easy way to triple the default timeout
  // ...
});

test('very slow test', async ({ page }) => {
  test.setTimeout(120_000);
  // ...
});

Ссылка на API: test.setTimeout() и test.slow().

Изменить таймаут из beforeEach хука​

import { test, expect } from '@playwright/test';

test.beforeEach(async ({ page }, testInfo) => {
  // Extend timeout for all tests running this hook by 30 seconds.
  testInfo.setTimeout(testInfo.timeout + 30_000);
});

Ссылка на API: testInfo.setTimeout().

Изменить таймаут для beforeAll/afterAll хука​

beforeAll и afterAll хуки имеют отдельный таймаут, по умолчанию равный таймауту теста. Вы можете изменить его отдельно для каждого хука, вызвав testInfo.setTimeout() внутри хука.

import { test, expect } from '@playwright/test';

test.beforeAll(async () => {
  // Set timeout for this hook.
  test.setTimeout(60000);
});

Ссылка на API: testInfo.setTimeout().

Таймаут ожидания​

Автоповторные утверждения, такие как expect(locator).toHaveText(), имеют отдельный таймаут, по умолчанию 5 секунд. Таймаут утверждения не связан с таймаутом теста. Он выводит следующую ошибку:

example.spec.ts:3:1 › basic test ===========================

Error: expect(received).toHaveText(expected)

Expected string: "my text"
Received string: ""
Call log:
  - expect.toHaveText with timeout 5000ms
  - waiting for "locator('button')"

Установить таймаут ожидания в конфигурации​

import { defineConfig } from '@playwright/test';

export default defineConfig({
  expect: {
    timeout: 10_000,
  },
});

Ссылка на API: testConfig.expect.

Указать таймаут ожидания для отдельного утверждения​

import { test, expect } from '@playwright/test';

test('example', async ({ page }) => {
  await expect(locator).toHaveText('hello', { timeout: 10_000 });
});

Глобальный таймаут​

Playwright Test поддерживает таймаут для всего выполнения теста. Это предотвращает чрезмерное использование ресурсов, когда всё пошло не так. Глобального таймаута по умолчанию нет, но вы можете установить разумный в конфигурации, например, один час. Глобальный таймаут выводит следующую ошибку:

Running 1000 tests using 10 workers

  514 skipped
  486 passed
  Timed out waiting 3600s for the entire test run

Вы можете установить глобальный таймаут в конфигурации.

import { defineConfig } from '@playwright/test';

export default defineConfig({
  globalTimeout: 3_600_000,
});

Ссылка на API: testConfig.globalTimeout.

Расширенные: таймауты низкого уровня​

Это таймауты низкого уровня, предварительно настроенные исполнителем теста, вам не нужно их изменять. Если вы оказались в этом разделе, потому что ваши тесты нестабильны, скорее всего, вам нужно искать решение где-то в другом месте.

Таймаут По умолчанию Описание
Таймаут действия нет таймаута Таймаут для каждого действия
Устанавливается в конфигурации
{ use: { actionTimeout: 10_000 } }
Переопределяется в тесте
locator.click({ timeout: 10_000 })
Таймаут навигации нет таймаута Таймаут для каждого действия навигации
Устанавливается в конфигурации
{ use: { navigationTimeout: 30_000 } }
Переопределяется в тесте
page.goto('/', { timeout: 30_000 })
Глобальный таймаут нет таймаута Глобальный таймаут для всего выполнения теста
Устанавливается в конфигурации
{ globalTimeout: 3_600_000 }
beforeAll/afterAll таймаут 30 000 мс Таймаут для хука
Устанавливается в хуке
test.setTimeout(60_000)
Таймаут фикстуры нет таймаута Таймаут для отдельной фикстуры
Устанавливается в фикстуре
{ scope: 'test', timeout: 30_000 }

Установить таймауты действий и навигации в конфигурации​

import { defineConfig } from '@playwright/test';

export default defineConfig({
  use: {
    actionTimeout: 10 * 1000,
    navigationTimeout: 30 * 1000,
  },
});

Ссылка на API: testOptions.actionTimeout и testOptions.navigationTimeout.

Установить таймаут для отдельного действия​

import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  await page.goto('https://playwright.dev', { timeout: 30000 });
  await page.getByText('Get Started').click({ timeout: 10000 });
});

Таймаут фикстуры​

По умолчанию фикстура разделяет таймаут с тестом. Однако для медленных фикстур, особенно рабочих, удобно иметь отдельный таймаут. Таким образом, вы можете поддерживать общий таймаут теста небольшим и дать медленной фикстуре больше времени.

import { test as base, expect } from '@playwright/test';

const test = base.extend<{ slowFixture: string }>({
  slowFixture: [async ({}, use) => {
    // ... perform a slow operation ...
    await use('hello');
  }, { timeout: 60_000 }]
});

test('example test', async ({ slowFixture }) => {
  // ...
});

Ссылка на API: test.extend().

© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/test-timeouts

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API