Middle
Page Object Deseni nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Page Object (PO) deseni, web arayüzlerinin otomatik testleri için tasarım kalıbıdır ve web sayfalarını sınıflar olarak temsil eder. Her PO sınıfı, belirli bir sayfada kullanıcının yaptığı öğeleri ve eylemleri kapsüller.
Kullanım avantajları:
- Okunabilirlik: Test kodu, sayfalar ve öğeleriyle yüksek seviyeli metodlar aracılığıyla etkileşime girerek daha anlaşılır hale gelir.
- Bakım kolaylığı: Sayfadaki öğelerin konumlayıcıları değiştiğinde, sadece ilgili Page Object sınıfında düzenleme yapmak yeterlidir, bu sayede bu öğeleri kullanan testleri yeniden yazmaya gerek kalmaz.
- Yeniden kullanılabilirlik: Page Object metodları ve öğeleri, farklı test senaryolarında kullanılabilir.
- Sorumlulukların ayrılması: UI öğeleriyle etkileşim mantığı, test senaryosu mantığından ayrılmıştır.
Ana bileşenler:
- Sayfa sınıfları: Belirli bir web sayfasının soyutlamasını temsil eder.
- Web öğeleri: Sayfa sınıfı içinde, locatorlar (XPath, CSS seçiciler, ID vb.) kullanılarak tanımlanır.
- Metodlar: Sayfada gerçekleştirilebilecek eylemleri temsil eder (örneğin,
login(),addToCart(),search()). Bu metodlar, web öğeleriyle etkileşir.
Yapı örneği:
# login_page.py
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "username") # Kullanıcı adı giriş alanı locatoru
self.password_input = (By.ID, "password") # Şifre giriş alanı locatoru
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Giriş butonu locatoru
self.error_message = (By.CSS_SELECTOR, ".error-message") # Hata mesajı locatoru
def open(self, url):
self.driver.get(url) # Sayfayı açar
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Kullanıcı adını girer
self.driver.find_element(*self.password_input).send_keys(password) # Şifreyi girer
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Giriş butonuna tıklar
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Hata mesajını alır
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object sınıfını içe aktar
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # WebDriver’ı başlat
self.login_page = LoginPage(self.driver) # Page Object örneği oluştur
def tearDown(self):
self.driver.quit() # WebDriver’ı kapat
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Sayfayı aç
self.login_page.enter_credentials("valid_user", "valid_password") # Veri gir
self.login_page.click_login_button() # Butona tıkla
# Başarılı giriş sonrası ek kontroller
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Sayfayı aç
self.login_page.enter_credentials("invalid_user", "wrong_password") # Veri gir
self.login_page.click_login_button() # Butona tıkla
error_text = self.login_page.get_error_message() # Hata mesajını al
self.assertIn("Geçersiz kimlik bilgileri", error_text) # Hata mesajını doğrula
if __name__ == "__main__":
unittest.main()
Bu örnekte, LoginPage giriş sayfası için bir Page Object olarak temsil edilir. test_login.py içindeki testler, bu sınıfın metodlarını kullanarak, öğelerle etkileşimin detaylarından soyutlanmıştır.
Page Object deseni, web arayüzü testlerinin otomasyonunda, bakım ve okunabilirlik avantajları nedeniyle yaygın olarak kullanılan bir standarttır.