0%
19-dars

Selenium WebDriver

Python bilan kod yozib brauzer'ni boshqarish. Boshlovchilar uchun sodda misollar. 18-darsda Selenium IDE'ni bilamiz - endi haqiqiy kod yozamiz!

90 daqiqa
Python kod
5 ta interaktiv

Selenium WebDriver nima?

18-darsda Selenium IDE bilan ishladik โ€” Record/Play, kod yozish kerak emas. Endi WebDriver'ga o'tamiz โ€” haqiqiy kod yozib brauzer'ni boshqaramiz.

Asosiy atama

Selenium WebDriver โ€” kod yordamida brauzer'ni boshqarish kutubxonasi. Python, Java, JavaScript va boshqa tillar uchun bor.

Oddiy qilib: Siz Python kod yozasiz - "Brauzer ochib, Login bos" deysiz, kod brauzer bilan ishlaydi, xuddi siz kabi.

๐Ÿ’ก Sodda misol
Pultli avtomashina
Selenium IDE โ€” bolalar o'yinchog'i (oddiy pult). WebDriver โ€” professional dronni kompyuter bilan boshqarish. Kuchli, lekin biroz murakkab. Lekin kuch sizda - hamma narsani qila olasiz!

Nima uchun WebDriver?

Nega Python?

Junior uchun

Bu dars juda muhim, lekin tezda hammasini tushunishga harakat qilmang. Asosiy tushunchalarni biling, keyin amalda mashq qilasiz. 3-4 hafta amaliyot kerak!

O'rnatish va tayyorgarlik

Birinchi skript yozish uchun 3 narsa kerak: Python, Selenium, brauzer driver.

1Python o'rnatish

python.org/downloads - "Download Python 3.x" bosing. Mac va Windows uchun bor.

Mac terminal'da tekshirish: python3 --version

2Selenium o'rnatish

Terminal'ni oching va yozing:

terminal pip install selenium

"Successfully installed selenium" deb chiqsa - tayyor!

3Chrome Driver (avtomatik)

Yangi Selenium versiyalari Chrome Driver'ni avtomatik yuklab oladi! Hech narsa qilish kerak emas.

Eski versiyalarda - webdriver-manager kutubxonasi yordam beradi.

Editor โ€” qaysi dasturda yozasiz?

Birinchi skript

Klassik "Hello Browser" skripti. 6 qator kod, lekin sehrli!

first_test.py # 1. Selenium kutubxonasini import qilish from selenium import webdriver # 2. Brauzer ochish (Chrome) driver = webdriver.Chrome() # 3. URL'ga o'tish driver.get("https://google.com") # 4. 5 sekund kutish (ko'rish uchun) import time time.sleep(5) # 5. Brauzerni yopish driver.quit()

Ishga tushirish

Terminal'da yozing:

terminal python3 first_test.py

Brauzer ochiladi, Google'ga o'tadi, 5 sekund kutadi, yopiladi! ๐ŸŽ‰

Tabriklayman!

Sizning birinchi automation skriptingiz! Bu kichik kod, lekin asos shu yerda. Endi har sahifa bilan ishlash mumkin.

Asosiy buyruqlar

WebDriver'ning kundalik 5 ta buyrug'i. Bularni bilsangiz - 80% ishni qila olasiz.

1. Brauzer boshqarish

basics.py from selenium import webdriver driver = webdriver.Chrome() # Brauzer ochish driver.get("https://uzum.uz") # URL'ga o'tish driver.maximize_window() # Maksimal o'lcham driver.refresh() # Sahifani qayta yuklash driver.back() # Orqaga qaytish driver.forward() # Oldinga driver.close() # Tab'ni yopish driver.quit() # Brauzerni butunlay yopish

2. Element topish

Saytda biror narsa bilan ishlash uchun avval uni topish kerak:

find_element.py from selenium.webdriver.common.by import By # ID bo'yicha (eng tez va aniq) login_btn = driver.find_element(By.ID, "login-btn") # CSS Selector bo'yicha search = driver.find_element(By.CSS_SELECTOR, ".search-box") # XPath bo'yicha button = driver.find_element(By.XPATH, "//button[text()='Kirish']")

3. Element bilan ishlash

interact.py # Bosish login_btn.click() # Matn yozish email_input.send_keys("test@uzum.uz") # Tozalash (avval bo'lgan matnni o'chirish) email_input.clear() # Matnni olish welcome_text = title.text # Attribute olish link_url = link.get_attribute("href")

4. To'liq E2E misol โ€” Login

login_test.py from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() driver.get("https://testshop.uz/login") # Email maydoniga matn yozish email = driver.find_element(By.ID, "email") email.send_keys("test@uzum.uz") # Parol maydoniga password = driver.find_element(By.ID, "password") password.send_keys("Pass123!") # Login tugmasini bosish driver.find_element(By.ID, "login-btn").click() # 3 sekund kutish (Dashboard ochilishi uchun) time.sleep(3) # Tekshirish - "Welcome" matni borligi welcome = driver.find_element(By.CLASS_NAME, "welcome-msg") assert "Welcome" in welcome.text driver.quit() print("โœ… Test muvaffaqiyatli!")

Bu - to'liq professional Login test! Email yozadi, parol yozadi, tugma bosadi, natijani tekshiradi.

๐ŸŽฏ Bog'lang

Selenium buyrug'i va vazifasini bog'lang

Har buyruq nima qiladi?

Buyruq

driver.get(url)
element.click()
element.send_keys()
driver.quit()
find_element()

Vazifa

Brauzerni butunlay yopish
URL'ga o'tish (sahifa ochish)
Sahifada elementni topish
Tugmani bosish
Matn yozish (input maydoni)
0 / 5 juft

Locator Strategy

Selenium'da elementlarni topishning 8 ta usuli bor. Lekin har biri bir xil emas โ€” qaysisini tanlash muhim!

8 ta locator turi

By.ID

ID bo'yicha. Eng tez va aniq usul. ID unikal bo'ladi.

driver.find_element(By.ID, "login-btn")

โญ Eng yaxshi - ID bor bo'lsa

By.NAME

Name attribute bo'yicha. Input maydonlar uchun yaxshi.

driver.find_element(By.NAME, "email")

โญ Yaxshi - input maydonlar uchun

By.CSS_SELECTOR

CSS selector bo'yicha. Eng moslashuvchi va tez.

driver.find_element(By.CSS_SELECTOR, ".btn-primary")

โญ Eng yaxshi - umumiy maqsadlar uchun

By.CLASS_NAME

Class bo'yicha. Lekin bir xil class ko'p elementda bo'lishi mumkin!

driver.find_element(By.CLASS_NAME, "submit-btn")

โš ๏ธ Ehtiyot - bir xil class ko'p bo'ladi

By.XPATH

XPath - eng kuchli, lekin sekin. Faqat boshqa imkonsiz bo'lganda.

driver.find_element(By.XPATH, "//button[text()='Kirish']")

โš ๏ธ Sekin - faqat oxirgi chora

By.LINK_TEXT

Link matni bo'yicha. Faqat <a> tag uchun.

driver.find_element(By.LINK_TEXT, "Bosh sahifa")

โญ Yaxshi - link'lar uchun

By.PARTIAL_LINK_TEXT

Link matnining bir qismi bo'yicha.

driver.find_element(By.PARTIAL_LINK_TEXT, "Bosh")
By.TAG_NAME

HTML tag bo'yicha. Kamdan-kam ishlatiladi.

driver.find_element(By.TAG_NAME, "button")

โš ๏ธ Ko'p element topadi

๐Ÿ“Š Locator tanlash tartibi

Eng yaxshidan eng yomonigacha
  1. By.ID โ€” bor bo'lsa, har doim bu
  2. By.NAME โ€” input maydonlar uchun
  3. By.CSS_SELECTOR โ€” universal va tez
  4. By.LINK_TEXT โ€” faqat link'lar uchun
  5. By.CLASS_NAME โ€” agar unikal bo'lsa
  6. By.XPATH โ€” faqat oxirgi chora!
Pro maslahat

Bug bo'lmasa - ID. Test ishonchli bo'lishi uchun - CSS Selector. Murakkab joy bo'lsa (matn bo'yicha) - XPath. Boshqa locator topa olmasangiz, dasturchidan ID qo'shishni so'rang!

๐ŸŽฏ Locator Classifier

Qaysi locator eng yaxshi?

1-qadam: HTML kodga qarang. 2-qadam: Eng yaxshi locator turi tanlang.

๐Ÿ‘† Endi pastdagi tugmalardan birini tanlang
<button id="login-btn">Kirish</button>
ID atributi bor.
<input name="email" type="email">
Name atributi bor, ID yo'q.
<button class="btn-primary submit-form">Yuborish</button>
Faqat class bor, lekin unikal kombinatsiya.
<a href="/home">Bosh sahifa</a>
Bu link, matni unikal.
<span>1,250,000 so'm</span> (jadvaldagi narx)
ID, class yo'q. Faqat matn bo'yicha topish kerak.
๐ŸŽฏ
By.ID
๐Ÿท๏ธ
By.NAME
๐ŸŽจ
CSS
๐Ÿ”—
LINK_TEXT
๐Ÿ“
XPATH
0 / 5 to'g'ri

Wait Strategies โ€” kutish

Eng tez-tez muammo: "Element topilmadi!" xatosi. Sababi โ€” sahifa hali yuklanmagan, lekin kod element izlayapti. Yechimi โ€” kutish.

Muammo

Brauzer sekin yuklaydi. AJAX, JavaScript - sahifa keyin paydo bo'ladi. Kod esa darhol element izlaydi va xato beradi.

Yechim: Kodga "biroz kut" deyish kerak.

3 ta kutish usuli

1. time.sleep() โ€” eng oddiy (lekin yomon)

bad_wait.py import time driver.get("https://testshop.uz") time.sleep(5) # 5 sekund kutish button = driver.find_element(By.ID, "login")

โš ๏ธ Muammo: Har doim 5 sekund kutadi, hatto sahifa 1 sekundda yuklansa ham. Vaqt isrofi!

2. Implicit Wait โ€” global kutish

implicit_wait.py driver.implicitly_wait(10) # Global - 10 sek max kutadi driver.get("https://testshop.uz") button = driver.find_element(By.ID, "login")

โœ… Yaxshi: Element topilsa darhol davom etadi. Topilmasa - 10 sek kutadi.

3. Explicit Wait โ€” eng professional

explicit_wait.py from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 10 sek kut, button bosish mumkin bo'lguncha button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "login")) ) button.click()

โญ Eng yaxshi: Aniq holat kutadi (visible, clickable, vsh.). Professional QA shu usulni ishlatadi.

Qaysi qachon?

time.sleep() - hech qachon (test sekin bo'ladi). Implicit Wait - kichik loyihalarda. Explicit Wait - professional, aniq holat kutish kerak bo'lganda.

๐Ÿ›  Code Builder

Selenium kod yarating

Vazifani tanlang va Selenium kod ko'ring:

๐ŸŽฌ Haqiqiy stsenariy
Click loyihasida birinchi automation skripti

Dushanba, 09:00. Click QA Lead Aziz aka sizga keldi: "Login funksiyamiz har release oldidan tekshiriladi - 8 ta brauzer ร— 5 ta scenario = 40 ta test. Manualda 4 soat ketadi."

Sizdagi vazifa: Selenium WebDriver bilan Login automation yozish.

Quyidagi locator'larni ko'ryapsiz: id="email", id="password", id="login-btn". Birinchi kod qatorlari qanday bo'ladi?

Eng to'g'ri kod boshlanishi qaysi?
โšก Tezkor tekshiruv
Sayt yuklanadi, lekin element 2-3 sekund keyin ko'rinadi (AJAX). Eng yaxshi yondashuv qaysi?

Birinchi Selenium skriptingiz

Endi nazariyani amaliyotga qo'llaymiz. 3 ta vazifa - sodda, lekin amaliy.

๐Ÿ

Python + Selenium

Bepul. Mac, Windows, Linux uchun. Asosiy kutubxona.

๐Ÿš€ Python yuklab olish

Sizning vazifalaringiz:

1
Python va Selenium o'rnatish
python.org'dan Python o'rnating. Terminal'da pip install selenium yozing. VS Code'ni ham yuklab oling.
2
"Hello Browser" skripti
first_test.py fayl yarating. Brauzer ochish, Google ochish, 5 sek kutish, yopish. Ishga tushiring va natijani ko'ring.
3
TestShop Login skripti
login_test.py - TestShop saytida login qiling. Email, parol, tugma. Dashboard ochilishini tekshiring (assert).
๐Ÿ’ก Portfolio uchun

3 ta Python+Selenium skripti + GitHub'ga upload + ekran yozuv (gif) โ€” Junior portfoliongiz uchun zo'r dalil. Intervyu'da: "Mana mening 1-Selenium skriptlarim, GitHub'da" โ€” deb ko'rsatasiz!

Intervyu savollari

Selenium WebDriver โ€” Junior+ va Middle QA intervyusining asosiy mavzusi. 7 ta professional javob.

๐Ÿ’ก Har savol ustiga bosing โ€” javobni ko'rasiz.

Q1Selenium IDE va WebDriver farqi?+

Javob:

  • Selenium IDE โ€” brauzer extension, Record/Play, kodsiz. Boshlovchilar uchun.
  • Selenium WebDriver โ€” kod yozish kerak. Python/Java/JS bilan. Kuchli, professional.

Pro javob: "Men ikkalasini ham ishlataman. IDE - tez prototip uchun, WebDriver - real automation uchun. Productionda doimo WebDriver."

Q2Locator strategiyasi qanday?+

Javob: "Locator tanlash - eng muhim qaror. Tartibim:"

  • By.ID โ€” bor bo'lsa har doim. Tez va aniq.
  • By.NAME โ€” input maydonlar uchun
  • By.CSS_SELECTOR โ€” universal, tez
  • By.XPATH โ€” faqat oxirgi chora, sekin

Pro javob: "Boshqa locator topa olmasangiz, dasturchidan ID qo'shishni so'rang. Bu - jamoa bilan ishlash."

Q3Wait Strategy nima va qachon ishlatasiz?+

Javob: "Sayt asinxron yuklanadi (AJAX). Element keyin ko'rinadi. Wait - bu muammoni hal qiladi."

  • time.sleep() โ€” yomon, har doim kutadi (vaqt isrofi)
  • Implicit Wait โ€” global, oddiy. Element yo'q bo'lsa N sek kutadi.
  • Explicit Wait โ€” eng yaxshi. WebDriverWait + expected_conditions.

Pro javob: "Men Explicit Wait ishlataman. Aniq holat kutaman: visible, clickable, present. Bu professional yondashuv."

Q4find_element va find_elements farqi?+

Javob:

  • find_element โ€” birinchi mos elementni topadi (1 ta). Topa olmasa - NoSuchElementException xatosi.
  • find_elements โ€” barcha mos elementlarni topadi (list qaytaradi). Topa olmasa - bo'sh list.

Misol: Sahifada 10 ta mahsulot. find_elements(By.CLASS_NAME, "product") - 10 ta element list qaytaradi.

Q5Element topilmadi - nima qilasiz?+

Sabablar va yechimlari:

  • Sahifa hali yuklanmagan โ†’ Wait qo'shing (Implicit yoki Explicit)
  • iframe ichida โ†’ driver.switch_to.frame()
  • Locator noto'g'ri โ†’ DevTools'da tekshiring
  • Element dynamic ID โ†’ CSS yoki XPath partial
  • Sahifa o'zgargan โ†’ DOM'ni qayta tekshiring
Q6Selenium WebDriver arxitekturasi?+

Javob: "WebDriver 3 qismdan iborat:"

  • Client (sizning kodingiz) โ€” Python/Java skript yozasiz
  • WebDriver Protocol โ€” JSON Wire Protocol
  • Browser Driver โ€” ChromeDriver, GeckoDriver, vsh.
  • Browser โ€” Chrome, Firefox, Edge - haqiqiy ishlaydi

Sizning kodingiz โ†’ Driver โ†’ Browser tartibida ishlaydi.

Q7Birinchi automation loyihangizni tushuntiring+

Pro javob (siz aytasiz):

"Men birinchi automation loyihasini Python + Selenium WebDriver bilan yaratganman. TestShop saytining Login funksiyasini automationtirgandim:"

  • Setup: Python 3.x, selenium kutubxona, VS Code
  • Locators: By.ID asosan (login-btn, email, password)
  • Wait: Explicit Wait dashboard yuklanishini kutish
  • Assert: "Welcome" matnini tekshirish
  • GitHub: Kodni saqlaganman, README bilan

Bu - mening Junior+ darajasidagi tajribam. Hozir Pytest framework bilan loyihalarimni kengaytirayapman.

3 ta asosiy fikr

Bu darsdan eslab qolishingiz kerak bo'lgan eng muhim g'oyalar

01
Setup โ†’ Code โ†’ Test
Python + Selenium + Driver. Birinchi 6 qator kod - "Hello Browser". Asoslarni tezda o'rganasiz.
02
Locator - asosiy san'at
By.ID eng yaxshi. CSS Selector universal. XPath - oxirgi chora. Bu tartibni eslab qoling.
03
Explicit Wait - professional
time.sleep() - hech qachon. Explicit Wait - aniq holat kutish. Test ishonchli bo'ladi.
๐Ÿ† Darsni muvaffaqiyatli tugatdingiz!