Sobes.tech
Middle

Page Object Deseni nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Page Object deseni, web uygulamalarının test otomasyonunda okunabilirliği artırmak, sürdürülebilirliği sağlamak ve kod tekrarını azaltmak için kullanılan bir tasarım desenidir. Nesne yönelimli bir yaklaşımdır ve her sayfa (veya anlamlı bileşen) web uygulamasında ayrı bir sınıf ile temsil edilir.

Page Object temel fikirleri:

  • Sayfa öğelerinin ve bunlarla yapılabilecek işlemlerin kapsüllenmesi.
  • Öğeleri bulucu konumlandırıcılar ile testlerin iş mantığının ayrılması.
  • Sayfa ile etkileşim için yüksek seviyeli bir API sağlanması.

Page Object kullanmanın avantajları:

  • Testlerin okunabilirliğinin artırılması: Testler, kullanıcı arayüzü ile etkileşim adımlarını iş diliyle tanımlayarak daha deklaratif hale gelir.
  • Bakım kolaylığı: UI değiştiğinde (örneğin, öğenin konumlandırıcısı değiştiğinde), sadece bir Page Object sınıfında değişiklik yapmak yeterlidir, bu da tüm testleri etkilemez.
  • Kod tekrarını azaltma: Sayfa ile ilgili ortak işlemler, Page Object metodlarında kapsüllenmiş olup farklı testlerde tekrar kullanılabilir.
  • Testlerin kararlılığını artırma: UI detaylarından soyutlama sayesinde.

Örnek yapı:

Varsayalım ki giriş sayfamız var. Bir LoginPage sınıfı oluşturabiliriz.

# 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")
        self.password_input = (By.ID, "password")
        self.login_button = (By.XPATH, "//button[text()='Login']")

    def set_username(self, username):
        self.driver.find_element(*self.username_input).send_keys(username)

    def set_password(self, password):
        self.driver.find_element(*self.password_input).send_keys(password)

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click()

    def login(self, username, password):
        self.set_username(username)
        self.set_password(password)
        self.click_login_button()

Testte kullanımı:

# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage

class LoginTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("http://example.com/login")

    def test_valid_login(self):
        login_page = LoginPage(self.driver)
        login_page.login("valid_user", "valid_password")
        # Başarılı giriş kontrolü

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

Burada LoginPage sınıfı giriş sayfasıyla ilgili konumlandırıcıları ve işlemleri kapsüller. test_valid_login fonksiyonu, login yüksek seviyeli metodunu kullanarak LoginPage ile etkileşime geçer. Eğer kullanıcı adı alanının konumlandırıcısı değişirse, sadece LoginPage içinde güncellenir.