Search
Write a publication
Pull to refresh

Comments 8

К сожалению, на практике вещь досататочно бесполезная, так как в fixture нельзя передать параметры.
Вот здесь хотелось бы задавать разное имя пользователя для каждого теста , но это невозможно сделать адекватным способом.
test('Тест с фикстурой loginPage', async ({ loginPage })

Хак с test.use({ login: 'aloha' })
не не будет работать с несколькими тестами.

Хак с передачей парамертов через tag больше похож на злую шутку.

В этом моменте согласен

Однако что насчет создания фикстур через фабрику, куда в свою очередь можно прокидывать параметры

Я собираюсь подробнее описать этот кейс во второй части статьи

А если рассматривать глобально фикстуры, то не соглашусь что это бесполезно

В большинстве кейсов они полезны и существенно уменьшают время написания тестов, а если рассмотреть их возможности настройки, в частности настройки для запуска с каждым тестом отдельно, или один раз для всего скопа тестов - тут уже фикстуры могут быть мощной штукой

Реальная задача: измерять время выполнения тестов. Не должно включаться время потраченное на SSO login и на сохранение playwright скриншотов/видео. Хотелось бы сделать с помощью fixture но login не дает.

  1. Можно сделать столько фикстур, сколько пользователей.

  2. Юзать POM и метод логина в нем + фикстуры, как в примере автора.

Не совсем понял, что значит нельзя передать параметры? При вызове фикстуры это делается легко. Так же как и при регистрации фикстуры. Вот пример, очень упрощенный:

const loginManager = (page: Page, api: string) => {
  // Возвращаем функцию, которую будем вызывать в тесте.
  // Она принимает аргумент, персональный для каждого вызова.
  return async (userId: number) => {
    await page.request.fetch(`${api}/login/${userId}`)
  }
}

// Playwright мощно задействует typescript, используем это:
export const test = base.extend<{
  loginUser: (userId: number) => Promise<void>
}>({
  async loginUser({ page }, use) {
    // Подготавливаем фикстуру.
    // Передаем аргумент, общий для всех тестов.
    await use(loginManager(page, 'https://service.ru'))
  },
})

test('Тест страницы', async ({ page, loginUser }) => {
  await loginUser(100500)
})


В Вашем примере логин происходит не внутри fixture, а внутри теста. И в логе будет отображаться внутри теста и засорять его.
Также я не могу использовать loginUser в другой fixture, todoPage , если пользователь будет определен только на уровне теста.

Пользователи требуют больше возможностей — и желательно «еще вчера».

Нет. Этого требуют менеджеры. Пользователям 95% изменений не нужны, более того - неприятны.

Интересная статья. Спасибо. В следующий раз попробую. А так все время использую import/export функций из соседнего файла. Выглядит читаемо и чисто, тобиш mission success.

Sign up to leave a comment.