Selenium — web browserlarni dasturiy boshqarish va web applicationlarni avtomatik test qilish uchun ishlatiladigan vositalar oilasi. U browser ochish, sahifaga o‘tish, element topish, click qilish, form to‘ldirish va natijani tekshirish imkonini beradi. Selenium turli dasturlash tillari va browserlar bilan ishlashi mumkin.
Selenium ko‘pincha E2E, regression va cross-browser testlarda qo‘llanadi.
WebDriver
Seleniumning markaziy qismi WebDriver standardiga tayanadi.
Test kodi browser driver yoki browserning automation endpointi bilan aloqa qiladi.
Buyruqlar:
Browser real rendering engine bilan ishlaydi.
Browser driver
Tarixan har browser uchun alohida driver binary ishlatilgan:
- ChromeDriver;
- GeckoDriver;
- SafariDriver;
- EdgeDriver.
Driver versioni browser bilan mos bo‘lishi kerak.
Zamonaviy tooling driver managementni avtomatlashtirishi mumkin.
Language binding
Selenium API bir nechta tillarda mavjud:
- Java;
- Python;
- JavaScript;
- C#;
- Ruby;
- Kotlin orqali Java API.
Jamoa application stackiga mos tilni tanlashi mumkin.
Browser behavior tilga bog‘liq bo‘lmasligi kerak.
Session
Har test yoki test guruhi WebDriver session yaratadi.
holatini saqlaydi.
Test tugagach quit bilan session yopiladi.
Faqat window’ni close qilish driver processini qoldirishi mumkin.
Locator
Element topish usullari:
- ID;
- CSS selector;
- XPath;
- name;
- link text;
- tag.
Stabil semantic yoki test uchun maxsus atribut afzal.
DOM hierarchy’ga bog‘langan uzun XPath refactor paytida tez buziladi.
WebElement
Topilgan DOM element WebElement sifatida ifodalanadi.
Unga:
- click;
- send keys;
- text;
- attribute;
- displayed;
- enabled
operationlari qo‘llanadi.
DOM qayta render bo‘lsa oldingi reference stale bo‘lishi mumkin.
Stale element
Element topilgandan keyin DOMdan olib tashlanib, o‘rniga yangi node yaratilsa StaleElementReference xatosi yuz beradi.
Yechim ko‘pincha elementni qayta topish.
Stale xatoni ko‘r-ko‘rona ko‘p retry qilish applicationdagi doimiy rerender muammosini yashirishi mumkin.
Explicit wait
Ma’lum condition bajarilishini kutadi:
Timeout ichida polling qilinadi.
Fixed sleepdan tezroq va barqarorroq.
Implicit wait
Element topish operationlariga global kutish muddati beradi.
Explicit wait bilan aralashtirilganda kutilmagan uzun timeoutlar yuz berishi mumkin.
Ko‘p jamoa explicit waitni nazoratliroq deb tanlaydi.
Page Object
Sahifa elementlari va actionlari alohida classda saqlanadi.
Masalan:
LoginPage.login(email, password)
Test business ssenariyni o‘qiydi.
Page object ichida assertionlarni haddan tashqari yashirish test maqsadini noaniq qilishi mumkin.
Grid
Selenium Grid testlarni bir nechta machine, browser va platformada parallel bajaradi.
Asosiy tushunchalar:
Cloud browser providerlar ham remote WebDriver endpoint beradi.
Remote WebDriver
Test local browser emas, boshqa serverdagi browserga ulanadi.
Capability orqali browser, version va OS tanlanadi.
Network latency har commandga ta’sir qiladi.
Juda ko‘p mayda browser command testni sekinlashtiradi.
Headless mode
CI server uchun qulay va kamroq grafik resurs talab qiladi.
Headless va headed behavior zamonaviy browserlarda yaqin, ammo rendering, permission yoki window size farqi tekshiriladi.
Frame va iframe
Iframe ichidagi elementni topishdan oldin driver contextni frame’ga o‘tkazadi.
Keyin default contentga qaytiladi.
Nested frame’lar context stackni murakkablashtiradi.
Cross-origin iframe ichidagi browser security qoidalari saqlanadi.
Window va tab
Yangi tab yoki popup alohida window handle oladi.
Test oldingi va yangi handle farqini topib, kerakli oynaga switch qiladi.
Tab tartibiga qattiq tayanish mo‘rt.
Yopilgandan keyin mavjud handle’ga qaytiladi.
Alert
JavaScript alert, confirm va prompt DOM elementi emas.
WebDriver alert API orqali ularni accept, dismiss yoki text bilan boshqaradi.
Alert ochiq paytda oddiy DOM commandlari xato berishi mumkin.
File upload
input[type=file] elementiga local file path yuboriladi.
Remote Gridda fayl remote node’ga uzatilishi kerak.
Native OS file dialogni keyboard automation bilan boshqarishdan ko‘ra input API barqarorroq.
Screenshot va log
Failure paytida screenshot, page source, browser console va networkga oid qo‘shimcha log olinadi.
WebDriver classic API network interceptionni cheklangan darajada beradi.
Browser DevTools integratsiyasi yoki proxy qo‘shilishi mumkin.
Parallel test
Har parallel test alohida WebDriver session va test data oladi.
Shared user yoki account conflict yaratadi.
Grid capacity va application environment maksimal concurrency’ga mos bo‘ladi.
Parallelizm oshsa backendning o‘zi load testga aylanib ketishi mumkin.
Selenium va zamonaviy tool’lar
Playwright va Cypress automatic wait, network control va zamonaviy API bilan boshqa yondashuv beradi.
Selenium esa uzoq tarix, keng til va browser ekotizimiga ega.
Tanlov jamoa, legacy suite, browser matrix va infrastructurega bog‘liq.
Capability
Remote session browser name, version, platform, proxy va boshqa capabilitylar bilan yaratiladi. Grid mos node tanlaydi. Noto‘g‘ri yoki qo‘llanmaydigan capability jim e’tiborsiz qolmasligi uchun session ma’lumoti reportda tekshiriladi.
Accessibility locator
Role va accessible name asosidagi selector user interfeysining semantik sifatini ham yaxshilaydi. Faqat test IDga tayanish accessibility muammosini ko‘rsatmaydi.
Bog‘liq tushunchalar
Selenium, WebDriver, Browser automation, Selenium Grid, WebElement, Explicit wait, Page Object, Cross-browser testing, E2E testing, Remote WebDriver