Bosh sahifa Wiki Explicit wait

Explicit wait

Explicit wait — avtomatlashtirilgan testda ma’lum bir shart bajarilguncha cheklangan vaqt davomida kutish mexanizmidir. U sahifa ochilgandan keyin element paydo bo‘lishi, clickable holatga kelishi, URL o‘zgarishi yoki API natijasi UIga chiqishini sinxronlashtiradi. Fixed sleepdan farqli ravishda shart erta bajarilsa kutish ham darhol tugaydi.

Polling jarayoni

Wait deadline, polling interval va predicate dan iborat. Framework shartni davriy tekshiradi. Predicate true yoki kerakli obyektni qaytarsa jarayon davom etadi; timeoutgacha bajarilmasa aniq xato chiqariladi. Ayrim vaqtinchalik exceptionlar, masalan element hali topilmagani, polling davomida e’tiborsiz qoldirilishi mumkin.

wait = WebDriverWait(driver, 10)
button = wait.until(
    EC.element_to_be_clickable((By.ROLE, "button"))
)

Amaliy Selenium sintaksisida role locator boshqacha ifodalanishi mumkin; misolning mohiyati element mavjudligidan ko‘ra click shartini kutishdir.

Shartni tanlash

Presence element DOMda borligini, visibility uning ko‘rinishini bildiradi. Clickability ko‘pincha visible va enabled shartlarini birlashtiradi, ammo overlay yoki application lockini har doim aniqlamaydi. Text, attribute, element count, frame availability va staleness ham kutish sharti bo‘lishi mumkin.

Test keyingi amali uchun eng yaqin kuzatiladigan holatni kutadi. Login tugagach faqat spinner yo‘qolishini emas, authenticated sahifadagi aniq marker yoki URLni tekshirish ishonchliroq. Bir nechta mustaqil shartni bitta katta predicatega yashirish timeout sababini noaniq qiladi.

Timeout semantikasi

Timeout tizimning performance talabi bilan bog‘liq bo‘lishi mumkin, lekin test infratuzilmasidagi sekinlik uchun cheksiz oshirilmaydi. Juda qisqa limit sog‘lom, ammo sekin CI runnerda flaky test yaratadi. Juda uzun limit haqiqiy xatoni kech bildiradi. Default va operatsiyaga xos timeoutlar alohida boshqariladi.

Timeout xabari kutilgan shart, locator, joriy URL va foydali holatni ko‘rsatadi. Screenshot, DOM va network trace shu paytda olinadi. Faqat “element topilmadi” xabari muammo selector, navigation yoki backendda ekanini ajratmaydi.

Implicit wait bilan o‘zaro ta’sir

Implicit wait har element qidiruviga yashirin kutish qo‘shadi. U explicit wait ichidagi har polling qidiruvini ham cho‘zishi mumkin, natijada umumiy timeout kutilganidan katta bo‘ladi. Ko‘p frameworklarda ikkalasini aralashtirmaslik va sinxronlashni aniq explicit shartlar bilan boshqarish afzal.

Auto-waitli vositada action va assertionlar allaqachon retry qilinadi. Qo‘shimcha explicit wait faqat framework bilmaydigan biznes signali uchun kerak. Bir holatni ikki marta kutish testni murakkablashtiradi.

Beqarorlikni kamaytirish

Wait xatoni yashirish uchun exceptionni yutib yubormaydi. Predicate read-only bo‘lishi kerak; polling ichida click yoki ma’lumot yaratish duplicate side effectga olib keladi. Element reference DOM qayta render bo‘lganda stale bo‘lishi mumkin, shuning uchun har pollingda barqaror locator orqali qayta topiladi.

Custom condition

Frameworkdagi tayyor shart yetarli bo‘lmasa custom predicate yoziladi. U har chaqirilganda joriy DOM yoki API holatini qayta o‘qib, muvaffaqiyat mezonini qaytaradi. Predicate ichida state yig‘ish yoki elementni o‘zgartirish polling natijasini o‘ziga bog‘lab qo‘yadi. Oxirgi kuzatilgan qiymat timeout xabariga qo‘shilsa diagnostika aniqroq bo‘ladi.

Bir necha elementning barqaror sonini kutishda faqat count tengligini tekshirish yetmasligi mumkin: ro‘yxat keyin yana o‘zgaradi. Application “loading completed” signali yoki ketma-ket ikki pollingda bir xil natija kabi aniq barqarorlik mezoni tanlanadi.

Bog‘liq tushunchalar

WebDriverWait, Expected condition, Polling, Timeout, Implicit wait, Auto-wait, Flaky test