Playwright предоставляет мощный набор инструментов для автоматизации браузеров, однако его возможности становятся особенно эффективными при интеграции с другими библиотеками и фреймворками. Это позволяет расширять функциональность тестов, улучшать отчётность и управлять сложными сценариями тестирования.
Jest и Mocha — популярные тестовые фреймворки в JavaScript. Playwright легко интегрируется с ними, позволяя создавать читаемые и структурированные тестовые сценарии.
Пример интеграции с Jest:
const { chromium } = require('playwright');
describe('Тестирование с Playwright и Jest', () => {
let browser, page;
beforeAll(async () => {
browser = await chromium.launch();
page = await browser.newPage();
});
afterAll(async () => {
await browser.close();
});
test('Проверка заголовка страницы', async () => {
await page.goto('https://example.com');
const title = await page.title();
expect(title).toBe('Example Domain');
});
});
Пример интеграции с Mocha:
const { chromium } = require('playwright');
const { expect } = require('chai');
describe('Playwright с Mocha', function() {
let browser, page;
before(async () => {
browser = await chromium.launch();
page = await browser.newPage();
});
after(async () => {
await browser.close();
});
it('Проверка заголовка страницы', async () => {
await page.goto('https://example.com');
const title = await page.title();
expect(title).to.equal('Example Domain');
});
});
Ключевой момент: Playwright может использоваться с любым тестовым фреймворком, который поддерживает асинхронные функции, что делает его гибким инструментом для интеграции.
Playwright предоставляет собственные методы проверки
(expect), но для сложных условий часто используют сторонние
библиотеки: Chai, Jest Matchers,
Should.js.
Пример использования Chai:
const { chromium } = require('playwright');
const { expect } = require('chai');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
const heading = await page.textContent('h1');
expect(heading).to.include('Example');
await browser.close();
})();
Преимущество: сочетание Playwright с мощными assertion-библиотеками позволяет писать проверки более выразительно, включая сложные условия, регулярные выражения и глубокие сравнения объектов.
Для анализа результатов тестов и генерации отчетов используют Allure, Mocha Reporter, Jest Reporter и другие.
Пример с Allure в сочетании с Mocha:
const { chromium } = require('playwright');
const { expect } = require('chai');
const allure = require('allure-mocha/runtime');
describe('Playwright и Allure', function() {
let browser, page;
before(async () => {
browser = await chromium.launch();
page = await browser.newPage();
});
after(async () => {
await browser.close();
});
it('Добавление шагов в Allure', async () => {
await allure.step('Переход на главную страницу', async () => {
await page.goto('https://example.com');
});
await allure.step('Проверка заголовка', async () => {
const title = await page.title();
expect(title).to.equal('Example Domain');
});
});
});
Преимущество: Allure позволяет структурировать тесты, добавлять скриншоты и логи, что облегчает анализ больших проектов.
Playwright можно сочетать с Axios, Got, Supertest для тестирования фронтенда и бэкенда в одном сценарии. Это полезно при проверке данных на сервере до и после взаимодействия с интерфейсом.
Пример с Axios:
const { chromium } = require('playwright');
const axios = require('axios');
const { expect } = require('chai');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
const response = await axios.get('https://jsonplaceholder.typicode.com/posts/1');
expect(response.status).to.equal(200);
await page.goto('https://example.com');
const title = await page.title();
expect(title).to.equal('Example Domain');
await browser.close();
})();
Преимущество: интеграция с HTTP-библиотеками позволяет проверять консистентность данных между интерфейсом и API, создавая полноценные end-to-end тесты.
Для контроля визуального интерфейса используют библиотеки Percy, Applitools, pixelmatch. Playwright предоставляет возможность делать скриншоты страниц или отдельных элементов, которые затем сравниваются с эталонными изображениями.
Пример интеграции с pixelmatch:
const { chromium } = require('playwright');
const fs = require('fs');
const PNG = require('pngjs').PNG;
const pixelmatch = require('pixelmatch');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
const screenshotBuffer = await page.screenshot();
const img1 = PNG.sync.read(fs.readFileSync('baseline.png'));
const img2 = PNG.sync.read(screenshotBuffer);
const { width, height } = img1;
const diff = new PNG({ width, height });
const numDiffPixels = pixelmatch(img1.data, img2.data, diff.data, width, height, { threshold: 0.1 });
console.log(`Количество различий: ${numDiffPixels}`);
fs.writeFileSync('diff.png', PNG.sync.write(diff));
await browser.close();
})();
Ключевой момент: визуальное тестирование позволяет обнаруживать изменения интерфейса, которые не всегда заметны через DOM-элементы или API-запросы.
Для работы с данными тестов используют Faker, Chance, Lodash, Moment. Это позволяет создавать динамические данные, генерировать даты, имена и случайные значения.
Пример с Faker:
const { chromium } = require('playwright');
const { faker } = require('@faker-js/faker');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com/form');
await page.fill('#name', faker.name.fullName());
await page.fill('#email', faker.internet.email());
await page.click('#submit');
await browser.close();
})();
Преимущество: динамические данные повышают надежность тестов и предотвращают зависимость от статических значений.
async/await, чтобы исключить ошибки
синхронизации и гонки данных.Интеграция Playwright с внешними библиотеками превращает его в универсальный инструмент для end-to-end тестирования, расширяет возможности анализа, управления данными и визуального контроля интерфейса, обеспечивая комплексный подход к качеству ПО.