typescript - Cum să fac ca Playwright să folosească valoarea pentru headless din fișierul meu de configurare?
Sunt nou în Playwright și, dintr-un motiv oarecare, nu reușesc să îl fac să preia fișierul meu de configurare.
Iată problemele:
- Deși am configurat fișierul de configurare să preia video, niciun video nu este scos în directorul specificat.
- Browserul rulează în modul headless, chiar dacă fișierul de configurare specifică headless ca false. Dacă setez headless ca false în fișierul de test (
const browserChromium=await chromium.launch({ headless: false });), atunci browserul nu rulează în modul headless.
Bănuiesc că toate aceste probleme sunt legate de faptul că fișierul meu de configurare nu este preluat corect (pentru că browserul rulează headless, chiar dacă headless este setat pe false.)
Sunt pe Ubuntu 20.04 prin WSL2. Playwright 1.12.2
Comandă pentru rularea testului:
npx playwright test test.ts
Acest lucru îmi arată rularea fișierului de configurare corect:
Using config at /myapp/tests/playwright/playwright.config.tsDoar pentru siguranță, am încercat de asemenea să specific fișierul de configurare manual:
npx playwright test test.ts --config=playwright.config.ts
În ambele cazuri, totuși, browserul rulează fără interfață grafică chiar dacă headless este fals în fișierul de configurare.
playwright.config.ts:
import { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = {
use: {
headless: false,
// Artifacts
screenshot: 'on',
video: 'on',
},
};
export default config;
test.ts:
// @ts-check
import {
chromium, devices, expect, test,
} from '@playwright/test';
const iPhone11 = devices['iPhone 11 Pro'];
const baseUrl = 'http://localhost:8100/';
test('Check the onboarding flow', async () => {
const browserChromium = await chromium.launch();
// Decide which browser to use.
const browser = browserChromium;
const context = await browser.newContext({
...iPhone11,
locale: 'ja-JP',
recordVideo: {
dir: 'recordings/',
},
});
const page = await browser.newPage();
// Set default navigation timeout.
page.setDefaultTimeout(10000);
// Go to baseUrl
await page.goto(baseUrl);
// Go to baseUrl/webapp/
await page.goto(`${baseUrl}webapp/`);
await page.screenshot({ path: 'test-screenshot.png' });
await context.close();
await browser.close();
});
Răspuns #1
Când folosești noul test-runner Playwright, instanțele de browser, context și pagină sunt deja create pentru tine. Există un context pentru fiecare test pentru a asigura că testele funcționează izolat, vezi aici pentru referință. Și opțiunile de context/launch sunt apoi setate în playwright.config.ts.
În scenariul tău ar însemna că ceva de genul acesta ar trebui să funcționeze:
// @ts-check
import {
expect, test,
} from '@playwright/test';
const baseUrl = 'http://localhost:8100/';
test('Check the onboarding flow', async ({ page }) => {
// Go to baseUrl
await page.goto(baseUrl);
// Go to baseUrl/webapp/
await page.goto(`${baseUrl}webapp/`);
await page.screenshot({ path: 'test-screenshot.png' });
});
opțiunile de lansare și context, le puteți seta în playwright.config.ts astfel:
import { PlaywrightTestConfig, devices } from '@playwright/test';
const config: PlaywrightTestConfig = {
use: {
...devices['iPhone 11 Pro'],
headless: false,
// Artifacts
screenshot: 'on',
video: 'on',
contextOptions: {
locale: 'ja-JP',
}
},
};
export default config;
Vezi aici pentru mai multe informații despre configurare.
