Код-ревью Middle Playwright обновлено

Ревью: тест оформления заказа на Playwright

Вопрос

Найдите проблемы в тесте.

import { test, expect } from '@playwright/test';

test('оформление заказа', async ({ page }) => {
  await page.goto('https://stage.shop.local/login');
  await page.fill('#email', 'qa@example.com');
  await page.fill('#password', 'Qwerty123');
  await page.click('text=Войти');
  await page.waitForTimeout(3000);
  await page.goto('https://stage.shop.local/cart');
  await page.getByRole('button', { name: 'Оформить' }).click();
  const visible = await page.getByText('Заказ оформлен').isVisible();
  expect(visible).toBe(true);
});

Коротко

Правильная версия: авторизованный контекст из storageState, корзина наполняется через API в фикстуре, переход по относительному пути с baseURL, пароль из окружения, итоговая проверка web-first assertion.

Что должен найти ревьюер

  1. Стильстрока 4
    Полный адрес стенда в тесте: должен быть baseURL из конфига
  2. Безопасностьстрока 6
    Пароль в коде теста: брать из переменных окружения или секретов CI
  3. Производительностьстрока 7
    Логин через UI в каждом тесте: медленно, лучше storageState из setup-проекта
  4. Ошибкастрока 8
    waitForTimeout(3000) вместо ожидания состояния
  5. Ошибкастрока 9
    Корзина не подготовлена тестом: тест зависит от того, что в ней уже что-то лежит
  6. Ошибкастрока 11
    isVisible() даёт снимок без ожидания; нужен await expect(locator).toBeVisible()

Разбор

Правильная версия: авторизованный контекст из storageState, корзина наполняется через API в фикстуре, переход по относительному пути с baseURL, пароль из окружения, итоговая проверка web-first assertion.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме