Зачем снимать визуальные доказательства?
Когда тест падает, самый частый вопрос — «как выглядел экран в момент падения?» Стек-трейс говорит, какая проверка упала, но скриншот показывает реальное состояние приложения. Видеозапись идёт дальше — показывает всю последовательность событий до падения.
Снятие скриншотов
Playwright
export default defineConfig({
use: {
screenshot: 'only-on-failure',
},
});
test('поток оформления', async ({ page }) => {
await page.goto('/cart');
await page.screenshot({ path: 'screenshots/cart.png' });
await page.click('#checkout');
await page.screenshot({ path: 'screenshots/checkout.png', fullPage: true });
});
Cypress
module.exports = defineConfig({
screenshotOnRunFailure: true,
screenshotsFolder: 'cypress/screenshots',
});
cy.screenshot('страница-корзины');
Selenium
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshot, new File("screenshots/failure.png"));
Видеозапись
Playwright
export default defineConfig({
use: {
video: 'retain-on-failure',
},
});
Cypress
module.exports = defineConfig({
video: true,
videoCompression: 32,
});
Playwright Trace Viewer
use: {
trace: 'on-first-retry',
}
// npx playwright show-trace test-results/trace.zip
Интеграция CI/CD
Артефакты GitHub Actions
- name: Запуск тестов Playwright
run: npx playwright test
continue-on-error: true
- name: Загрузка артефактов
uses: actions/upload-artifact@v4
if: always()
with:
name: доказательства-тестов
path: |
test-results/
playwright-report/
retention-days: 30
Пошаговые доказательства
test('полный поток покупки', async ({ page }) => {
await page.goto('/products');
await page.screenshot({ path: 'evidence/01-страница-товаров.png' });
await page.click('[data-testid="add-to-cart"]');
await page.screenshot({ path: 'evidence/02-добавлено-в-корзину.png' });
await page.goto('/cart');
await page.screenshot({ path: 'evidence/03-корзина.png' });
await page.click('#checkout');
await page.screenshot({ path: 'evidence/04-форма-оплаты.png' });
await page.click('#submit-payment');
await expect(page.locator('.confirmation')).toBeVisible();
await page.screenshot({ path: 'evidence/05-подтверждение.png' });
});
Лучшие практики
- Всегда снимать при падении — минимальное требование
- Снимать полную страницу — частичные скриншоты теряют контекст
- Описательные имена файлов — включать имя теста, шаг и время
- Политики хранения — 30 дней типично
- Сжимать видео — баланс между качеством и размером
- Использовать Playwright traces — дают гораздо более богатые данные отладки
Упражнения
Упражнение 1: Стратегия скриншотов
Настройте автоматические скриншоты при падении и на ключевых шагах. Запустите тесты, проверьте доказательства.
Упражнение 2: Видеозапись
Включите запись в Playwright или Cypress. Внесите намеренную ошибку и используйте видео для диагностики.
Упражнение 3: CI/CD-пайплайн доказательств
Настройте пайплайн для захвата скриншотов, видео и traces. Загрузите как артефакты с хранением 30 дней.