mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
doc: test runner examples (#2057)
This commit is contained in:
parent
06273ef955
commit
12edf4f03f
113
docs/test-runners.md
Normal file
113
docs/test-runners.md
Normal file
@ -0,0 +1,113 @@
|
||||
# Test Runners
|
||||
|
||||
## Basic Setup
|
||||
With a few lines of code, you can hook up Playwright to your favorite JavaScript test runner.
|
||||
|
||||
### Jest / Jasmine
|
||||
|
||||
For Jest, [jest-playwright](https://github.com/playwright-community/jest-playwright) can be used. However for a light-weight solution, requiring playwright directly works fine. Jest shares it's syntax with Jasmine, so this applies to Jasmine as well.
|
||||
|
||||
```js
|
||||
const {chromium} = require('playwright');
|
||||
const expect = require('expect');
|
||||
let browser;
|
||||
let page;
|
||||
beforeAll(async () => {
|
||||
browser = await chromium.launch();
|
||||
});
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
});
|
||||
beforeEach(async () => {
|
||||
page = await browser.newPage();
|
||||
});
|
||||
afterEach(async () => {
|
||||
await page.close();
|
||||
});
|
||||
it('should work', async () => {
|
||||
await page.goto('https://www.example.com/');
|
||||
expect(await page.title()).toBe('Example Domain');
|
||||
});
|
||||
```
|
||||
|
||||
### AVA
|
||||
|
||||
Tests run concurrently in AVA, so a single page variable cannot be shared between tests. Instead, create new pages with a macro function.
|
||||
|
||||
```js
|
||||
const {chromium} = require('playwright');
|
||||
const test = require('ava').default;
|
||||
const browserPromise = chromium.launch();
|
||||
|
||||
async function pageMacro(t, callback) {
|
||||
const browser = await browserPromise;
|
||||
const page = await browser.newPage();
|
||||
try {
|
||||
await callback(t, page);
|
||||
} finally {
|
||||
await page.close();
|
||||
}
|
||||
}
|
||||
|
||||
test('should work', pageMacro, async (t, page) => {
|
||||
await page.goto('https://www.example.com/');
|
||||
t.is(await page.title(), 'Example Domain');
|
||||
});
|
||||
```
|
||||
|
||||
### Mocha
|
||||
|
||||
Mocha looks very similar to the Jest/Jasmine setup, and functions in the same way.
|
||||
|
||||
```js
|
||||
const {chromium} = require('playwright');
|
||||
const assert = require('assert');
|
||||
let browser;
|
||||
before(async() => {
|
||||
browser = await chromium.launch();
|
||||
});
|
||||
after(async () => {
|
||||
await browser.close();
|
||||
});
|
||||
let page;
|
||||
beforeEach(async() => {
|
||||
page = await browser.newPage();
|
||||
});
|
||||
afterEach(async () => {
|
||||
await page.close();
|
||||
});
|
||||
it('should work', async () => {
|
||||
await page.goto('https://www.example.com/');
|
||||
assert.equal(await page.title(), 'Example Domain');
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
## Types
|
||||
|
||||
If using TypeScript, add types to your variables like:
|
||||
```ts
|
||||
let page: import('playwright').Page;
|
||||
```
|
||||
|
||||
If using JavaScript, you can still get nice autocompletions in VSCode by using JSDOC
|
||||
```js
|
||||
/** @type {import('playwright').Page} **/
|
||||
let page;
|
||||
```
|
||||
|
||||
## Multiple Browsers
|
||||
|
||||
These simple examples can be extended to support multiple browsers using an environment variable.
|
||||
|
||||
```js
|
||||
const {chromium, webkit, firefox} = require('playwright');
|
||||
const browserName = process.env.BROWSER || 'webkit';
|
||||
let browser;
|
||||
beforeAll(async() => {
|
||||
browser = await {chromium, webkit, firefox}[browserName].launch();
|
||||
});
|
||||
```
|
||||
|
||||
Then set `BROWSER=firefox` to run your tests with firefox, or any other browser.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user