Iniciar sesión Registro
Anuncios
Tu espacio publicitario
Reserva este slot exclusivo para el periodo elegido.
Comprar publicidad →
Logotipo de la comunidad de telegram - QA Co-pilot
Añadido 06 dic. 2025

QA Co-pilot

@qa_copilot
Número de suscriptores: 92
Fotos: 271
Enlaces: 45
Descripción:
QA Co-pilot 🚀 Ваш другий пілот у світі тестування. 👨‍💻 Для кого: Для тестувальників-практиків, які хочуть рости. 🎯 Про що: Делегуємо рутину нейромережам, прискорюємо роботу та звільняємо час на головне. ❌ Чого тут немає: Нудної теорії та води.
Fuente

QA Co-pilot | Код з душком: If/Else у тестах (або Тест із роздвоєнням особистості)Пр...

Logotipo de la comunidad de telegram - QA Co-pilot QA Co-pilot @qa_copilot
26 Vistas/Alcance 2026-05-22 07:39 Mensaje №303
💩 Код з душком: If/Else у тестах (або Тест із роздвоєнням особистості)Привіт, екіпаж! П'ятниця — традиційний час вивітрювати "смердючий" код з репозиторіїв. Сьогодні препаруємо гріх, який перетворює ваші автотести на непередбачуваний хаос. Поговоримо про умовну логіку (Conditional Testing). ☕️Знайдіть проблему в цьому тесті:// Як пишуть джуни (Антипатерн "Ворожка")test('Повинен додати товар у кошик', async ({ page }) => { await page.goto('/product/123'); // "Якщо раптом вилізе промо-банер, то закриємо його..." if (await page.locator('.promo-popup').isVisible()) { await page.locator('.close-promo').click(); } await page.locator('.add-to-cart').click();}); Чому цей код тхне:Ви щойно вбили детермінованість тесту (його передбачуваність). Метод isVisible() у Playwright не чекає! Він стріляє миттєво.Якщо ваш фронтенд на Angular рендерить цей поп-ап за 300 мілісекунд, на момент перевірки isVisible() поверне false. Тест проігнорує блок if і піде клікати на кнопку кошика. АЛЕ саме в цю мілісекунду поп-ап з'являється на екрані, перекриває кнопку, і ваш тест падає з помилкою Element is intercepted.Ви перезапускаєте тест — сервер відповідає швидше, поп-ап з'являється миттєво, if спрацьовує, тест "зелений". Вітаю, ви створили еталонний Flaky-тест! Як це виглядає після код-рев'ю Senior-інженера:Тест має бути прямою лінією. Якщо банер можна відключити (через cookie або API-мок) — відключаємо. Якщо ж це неконтрольований поп-ап, використовуємо нативну "магію" Playwright 1.42+:// Ідеально чистий код (Playwright addLocatorHandler)test('Повинен додати товар у кошик', async ({ page }) => { // 1. Вчимо Playwright автоматично реагувати на перешкоду, ЯКЩО вона з'явиться await page.addLocatorHandler( page.locator('.promo-popup'), async () => { await page.locator('.close-promo').click(); } ); await page.goto('/product/123'); // 2. Тест залишається абсолютно лінійним, ніяких if/else! await page.locator('.add-to-cart').click();}); Золоте правило: Ніколи не використовуйте if / else для синхронізації UI чи обробки випадкових елементів на сторінці. Автотест — це не алгоритм пошуку шляху, це жорсткий сценарій. Контролюйте стан додатка, а для асинхронних перешкод делегуйте роботу фреймворку.А скільки if'ів зараз заховано у вашому фреймворку? 👇🔥 — Використовую addLocatorHandler, мої тести прямі як стріла!👀 — Грішу іф-елсами, бо на проді постійно лізуть рандомні банери...🤯 — Тепер я зрозумів, чому мої тести періодично падають на кліках!