😺

PlaywrightのTimeoutの時間を変更する

2023/09/06に公開
Error: Timed out 5000ms waiting for expect(received).toHaveURL(expected)

Playwrightでテストを実行すると、上記のようにたまにtimeoutでこけてしまうことがあるので、timeoutの時間を変更して、timeoutしないようにしたいと思います。

まずは公式を確認。
https://playwright.dev/docs/test-timeouts

デフォルトのtimeoutは下記のようになっています。

Timeout デフォルト
Test timeout 30000 ms (30秒)
Expect timeout 5000 ms (5秒)

Test関数とExpect関数でタイムアウトの時間が違うようです。

timeoutの時間を変更するにはconfigで全体のタイムアウトの時間を変更する方法と、関数内で単一のtimeoutの時間を変更する方法の2通りあります。

configで全体のtimeoutの時間を変更

playwright.config.ts
import { defineConfig } from '@playwright/test';  
  
export default defineConfig({  
+ timeout: 5 * 60 * 1000,  // testのtimeoutの時間を変更

+ expect: {  
+   timeout: 10 * 1000,   // expectのtimeoutの時間を変更
+ },
});

関数内で単一のtimeoutの時間を変更

Test Timeout

example.spec.ts
import { test, expect } from '@playwright/test';  
    
test('very slow test', async ({ page }) => {  
test.setTimeout(120000);  // timeoutの時間を変更
// ...  
});

またtest.slow()でtimeoutの時間をデフォルトの 3 倍の時間にすることもできます。

example.spec.ts
import { test, expect } from '@playwright/test';  
    
test('slow test', async ({ page }) => {  
test.slow(); // timeoutの時間をデフォルトの3倍に変更
// ...  
});

Expect Timeout

example.spec.ts
import { test, expect } from '@playwright/test';  
  
test('basic test', async ({ page }) => {  
// timeoutの時間を変更
await expect(page.getByRole('button')).toHaveText('Sign in', { timeout: 10000 });   
});

Discussion