Sayfa Nesne Modeli ve Fabrikası Selenium

⚡ Akıllı Özet

Sayfa Nesne Modeli ve Sayfa Fabrikası Selenium Sağlam ve sürdürülebilir test otomasyon çerçeveleri oluşturmak için yapılandırılmış bir tasarım deseni tanımlar. WebElement'leri ve davranışlarını kapsayan sayfaya özgü sınıflar oluşturmaya odaklanır, böylece tekrarlamayı azaltır ve okunabilirliği ve ölçeklenebilirliği artırır. Selenium komut dosyalarını test edin.

  • Temel Konsept: Her uygulama sayfası, hem WebElement'leri hem de bunlar üzerinde gerçekleştirilen eylemleri içeren özel bir Sayfa Sınıfına karşılık gelir; bu da kullanıcı arayüzü yapısı ve test mantığı arasında net bir ayrım sağlar.
  • Uygulama Odağı: POM, yeniden kullanılabilir ve merkezileştirilmiş öğe yönetimini destekler; sayfa öğelerinde yapılan değişiklikler, birden fazla komut dosyası yerine yalnızca bir sınıfta güncelleme gerektirir.
  • Tasarım Avantajı: Bu model, daha temiz, modüler ve araçtan bağımsız nesne depoları sağlayarak, aşağıdaki gibi çerçevelerle entegre olabilme olanağı sunar. TestNG, JUnit, Cucumberveya JBehave.
  • Adlandırma kuralı: Sayfa Sınıfları içindeki Metotlar, gerçek kullanıcı arayüzü eylemlerini yansıtmalıdır (örneğin, gotoHomePage()Bu durum, otomasyon iş akışlarında anlamsal netliği güçlendirir.
  • Gelişmiş Yapı: Page Factory, POM'u aşağıdaki yöntemlerle iyileştirir: @FindBy açıklamalar ve PageFactory.initElements() Otomatik WebElement başlatma için, tekrarlayan işlemleri ortadan kaldırır. findElement çağırır.
  • Verim iyileştirmesi: AjaxElementLocatorFactory Tembel yüklemeyi (lazy loading) devreye sokarak, öğelere yalnızca erişildiğinde yer yüklenmesini sağlar; bu da yürütme verimliliğini artırır ve dinamik sayfa davranışını sorunsuz bir şekilde yönetir.
  • Sonuç: Bütünleşik yaklaşım, modern standartlara uygun, sürdürülebilir, okunabilir ve ölçeklenebilir bir test otomasyon mimarisiyle sonuçlanır. Selenium uygulamaları.

Sayfa Nesne Modeli

Sayfa Nesne Modeli (POM) nedir? Başlıca bileşenleri nelerdir?

Sayfa Nesne Modeli (POM) Web arayüzü öğeleri için bir Nesne Deposu oluşturan ve test otomasyonunda yaygın olarak kullanılan bir tasarım desenidir. Bu modelin avantajı, kod tekrarını azaltması ve test bakımını iyileştirmesidir.

Bu modelde, uygulamadaki her web sayfası için karşılık gelen bir Sayfa Sınıfı olmalıdır. Bu Sayfa sınıfı, o web sayfasının WebElement'lerini tanımlayacak ve ayrıca bu WebElement'ler üzerinde işlemler gerçekleştiren Sayfa yöntemlerini içerecektir. Bu yöntemlerin adları, gerçekleştirdikleri göreve göre verilmelidir; örneğin, bir yükleyici ödeme ağ geçidinin görünmesini bekliyorsa, POM yönteminin adı waitForPaymentScreenDisplay() olabilir.

Sayfa Nesne Modelinin Temel Bileşenleri

  • Sayfa Sınıfları: Her web sayfasını ayrı bir sınıf olarak temsil edin.
  • Konum belirleyiciler: Kimlikleri, XPath'leri veya CSS seçicilerini kullanarak web öğelerini tanımlayın.
  • Yöntem: .page öğeleri üzerinde gerçekleştirilen eylemleri veya işlemleri içerir.
  • Tekrar Kullanılabilirlik: PromoTestlerde kod tekrar kullanımı ve daha kolay bakım.
  • Endişelerin Ayrılması: Sayfa yapısını test mantığından bağımsız tutarak daha iyi bir organizasyon sağlar.

Sayfa Nesne Modeli

Neden Sayfa Nesne Modeli?

Kullanıcı arayüzü otomasyonuna başlama Selenium Web Sürücüsü Bu zor bir iş değil. Sadece öğeleri bulmanız ve üzerlerinde işlemler gerçekleştirmeniz gerekiyor.

Bir web sitesine giriş yapmak için kullanılan bu basit komut dosyasını ele alalım.

Sayfa Nesne Modeli

Gördüğünüz gibi tek yaptığımız elemanları bulmak ve bu elemanların değerlerini doldurmak.

Bu, zaman alan ve hataya açık bir komut dosyasıdır. Başlangıçta kolay gibi görünse de, test paketi genişledikçe öğe değişikliklerini yönetmek zorlaşır. Ancak zamanla test paketi büyüyecektir. Kodunuza daha fazla satır ekledikçe işler zorlaşır.

Komut dosyası bakımıyla ilgili temel sorun, eğer 10 farklı komut dosyası aynı sayfa öğesini kullanıyorsa, o öğede herhangi bir değişiklik olduğunda, 10 komut dosyasının tamamını da değiştirmeniz gerekmesidir. Bu zaman alıcıdır ve hataya açıktır.

Komut dosyası bakımına daha iyi bir yaklaşım, web öğelerini bulan, dolduran veya doğrulayan ayrı bir sınıf dosyası oluşturmaktır. Bu sınıf daha sonra aynı öğeyle etkileşim kuran birden fazla test komut dosyasında yeniden kullanılabilir. Gelecekte, web öğesinde bir değişiklik olursa, 10 farklı komut dosyasında değil, yalnızca 1 sınıf dosyasında değişiklik yapmamız yeterli olur.

Bu yaklaşıma Sayfa Nesne Modeli adı verilmektedir. SeleniumBu, kodun daha okunabilir, bakımı kolay ve yeniden kullanılabilir olmasını sağlar.

 Sayfa Nesne Modeli

👉 Ücretsiz Canlı Kayıt Olun Selenium Proje

POM'un avantajları

  1. Sayfa Nesnesi Tasarım Modeli, kullanıcı arayüzündeki işlem ve akışların doğrulamadan ayrılması gerektiğini söylüyor. Bu kavram, kodumuzu daha temiz ve anlaşılması kolay hale getirir.
  2. İkinci avantaj ise nesne deposunun test senaryolarından bağımsız olmasıdır; bu sayede aynı nesne deposunu farklı araçlarla farklı amaçlar için kullanabiliriz. Örneğin, Sayfa Nesne Modelini entegre edebiliriz. Selenium 'da TestNG/JUnit işlevsellik için Test yapmak ve aynı zamanda JBehave/ ileCucumber kabul testi için.
  3. Code POM sınıflarındaki sayfa yöntemlerinin yeniden kullanılması sayesinde daha az karmaşık ve optimize edilmiş hale gelir.
  4. Metotlara, kullanıcı arayüzünde gerçekleşen işleme kolayca eşlenebilen daha gerçekçi isimler veriliyor. Örneğin, butona tıkladıktan sonra ana sayfaya yönlendirilirsek, metot adı 'gotoHomePage()' gibi olacaktır.

POM nasıl uygulanır? Selenium?

Sayfa Nesne Modeli çerçevesinin temel yapısında yer alan basit PLog, whereManagereIDElements'in bulunduğu yapıdadır. AUT Bu Web Öğeleri üzerinde çalışan yöntemler bir clog dosyasında saklanır. Doğrulama gibi bir görev, Test yöntemlerinin bir parçası olarak ayrı tutulmalıdır.

POM'u uygulayın

Tam Örnek

Test durumu: MyCAD'de yazılım Güncelleme ye git Guru99 Demo Sitesi.

Adım 1) Şuraya gidin: Guru99 Demo Sitesi

POM'u uygulayın

Adım 2) Ana sayfada, “Guru"99 Bank" mevcuttur.

POM'u uygulayın

Adım 3) Uygulamaya giriş yapın

POM'u uygulayın

Adım 4) Ana sayfanın "Yönetici Kimliği: demo" şeklinde bir metin içerdiğini doğrulayın

POM'u uygulayın

Bu örnekte iki sayfayla ilgileniyoruz:

  1. Sayfa Giriş
  2. Ana Sayfa (giriş yaptığınızda gösterilir)

Buna göre 2 POM oluşturuyoruz. Selenium sınıflar

Guru99 Giriş sayfası POM

package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99Login {
    WebDriver driver;
    By user99GuruName = By.name("uid");
    By password99Guru = By.name("password");
    By titleText =By.className("barone");
    By login = By.name("btnLogin");
    public Guru99Login(WebDriver driver){
        this.driver = driver;
    }
    //Set user name in textbox
    public void setUserName(String strUserName){
        driver.findElement(user99GuruName).sendKeys(strUserName);
    }
    //Set password in password textbox
    public void setPassword(String strPassword){
         driver.findElement(password99Guru).sendKeys(strPassword);
    }
    //Click on the login button
    public void clickLogin(){
            driver.findElement(login).click();
    }
    //Get the title of Login Page
    public String getLoginTitle(){
     return    driver.findElement(titleText).getText();
    }
    /**
     * This POM method allows the test case to perform the login operation
     * @param strUserName
     * @param strPasword
     * @return
     */
    public void loginToGuru99(String strUserName,String strPasword){
        //Fill user name
        this.setUserName(strUserName);
        //Fill password
        this.setPassword(strPasword);
        //Click Login button
        this.clickLogin();        
    }
}

Guru99 Ana Sayfa POM içinde Selenium

package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99HomePage {
    WebDriver driver;
    By homePageUserName = By.xpath("//table//tr[@class='heading3']");
    public Guru99HomePage(WebDriver driver){
        this.driver = driver;
    }
    //Get the User name from Home Page
        public String getHomePageDashboardUserName(){
         return    driver.findElement(homePageUserName).getText();
        }
}

Guru99 Basit POM Selenium Test durumu

package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import pages.Guru99HomePage;
import pages.Guru99Login;
public class Test99GuruLogin {
    String driverPath = "C:\\geckodriver.exe";    
    WebDriver driver;
    Guru99Login objLogin;
    Guru99HomePage objHomePage;
    @BeforeTest
    public void setup(){
	System.setProperty("webdriver.gecko.driver", driverPath);        
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/V4/");
    }
    /**
     * This test case will login in https://demo.guru99.com/V4/
     * Verify login page title as guru99 bank
     * Login to application
     * Verify the home page using Dashboard message
     */
    @Test(priority=0)
    public void test_Home_Page_Appear_Correct(){
        //Create Login Page object
    objLogin = new Guru99Login(driver);
    //Verify login page title
    String loginPageTitle = objLogin.getLoginTitle();
    Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
    //login to application
    objLogin.loginToGuru99("mgr123", "mgr!23");
    // go the next page
    objHomePage = new Guru99HomePage(driver);
    //Verify home page
    Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
    }

Page Factory nedir? Selenium?

Sayfa Fabrikası Selenium için dahili bir Sayfa Nesne Modeli çerçeve konseptidir. Selenium WebDriver, yürütme hızından ziyade ek açıklamalar kullanarak tekrarlayan öğe aramalarını azaltarak bakım kolaylığını artırır. Page nesnelerinin başlatılması veya Page nesnesinin kendisinin örneklendirilmesi için kullanılır. Ayrıca "FindElement/s" kullanılmadan Page sınıfı öğelerinin başlatılması için de kullanılır.

Burada da Sayfa Nesnesi Havuzu ve Test Yöntemlerinin ayrılması kavramını takip ediyoruz. Ayrıca PageFactory sınıfının yardımıyla Selenium, ek açıklamalar kullanıyoruz @FindBy WebElement'i bulmak için initElements yöntemini kullanıyoruz. Web öğelerini başlatmak için de bu yöntemi kullanıyoruz.

Sayfa Fabrika Girişi Selenium

@FindBy kabul edilebilir tagName, kısmiLinkText, ad, linkText, kimlik, css, className, xpath nitelikler olarak.

Yukarıdakiyle aynı örneğe Page Factory'yi kullanarak bakalım

Guru99 Page Factory ile giriş sayfası

package PageFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Guru99Login {
    /**
     * All WebElements are identified by @FindBy annotation
     */
    WebDriver driver;
    @FindBy(name="uid")
    WebElement user99GuruName;
    @FindBy(name="password")
    WebElement password99Guru;    
    @FindBy(className="barone")
    WebElement titleText;
    @FindBy(name="btnLogin")
    WebElement login;
    public Guru99Login(WebDriver driver){
        this.driver = driver;
        //This initElements method will create all WebElements
        PageFactory.initElements(driver, this);
    }
    //Set user name in textbox
    public void setUserName(String strUserName){
        user99GuruName.sendKeys(strUserName);     
    }
    //Set password in password textbox
    public void setPassword(String strPassword){
    password99Guru.sendKeys(strPassword);
    }
    //Click on login button
    public void clickLogin(){
            login.click();

    }  
    //Get the title of Login Page
    public String getLoginTitle(){
     return    titleText.getText();
    }
    /**
     * This POM method will be exposed in test case to login in the application
     * @param strUserName
     * @param strPasword
     * @return
     */
    public void loginToGuru99(String strUserName,String strPasword){
        //Fill user name
        this.setUserName(strUserName);
        //Fill password
        this.setPassword(strPasword);
        //Click Login button
        this.clickLogin();           
    }
}

Guru99 Ana Sayfa (Page Factory ile)

package PageFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Guru99HomePage {
    WebDriver driver;
    @FindBy(xpath="//table//tr[@class='heading3']")
    WebElement homePageUserName;    
    public Guru99HomePage(WebDriver driver){
        this.driver = driver;
        //This initElements method will create all WebElements
        PageFactory.initElements(driver, this);
    }   
    //Get the User name from Home Page
        public String getHomePageDashboardUserName(){
         return    homePageUserName.getText();
        }
}

Guru99. Sayfa Fabrikası konseptiyle test senaryosu

package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import PageFactory.Guru99HomePage;
import PageFactory.Guru99Login;
public class Test99GuruLoginWithPageFactory {
    String driverPath = "C:\\geckodriver.exe";    
    WebDriver driver;
    Guru99Login objLogin;
    Guru99HomePage objHomePage; 
    @BeforeTest
    public void setup(){
        System.setProperty("webdriver.gecko.driver", driverPath);       
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/V4/");
    }
    /**
     * This test go to https://demo.guru99.com/V4/
     * Verify login page title as guru99 bank
     * Login to application
     * Verify the home page using Dashboard message
     */
    @Test(priority=0)
    public void test_Home_Page_Appear_Correct(){
        //Create Login Page object
    objLogin = new Guru99Login(driver);
    //Verify login page title
    String loginPageTitle = objLogin.getLoginTitle();
    Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
    //login to application
    objLogin.loginToGuru99("mgr123", "mgr!23");
    // go the next page
    objHomePage = new Guru99HomePage(driver);
    //Verify home page
    Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
    }
}

Komple Proje Yapısı şemaya benzeyecektir:

Sayfa Fabrikası Selenium

AjaxElement LocatorFabrika

AjaxElement LocatorFabrika PageFactory'nin tembel yükleme konseptidir SeleniumBu, web öğelerinin yalnızca herhangi bir işlemde kullanıldığında bulunmasını sağlamak için kullanılır. WebElements için sayfa sınıfı nesnesine bir zaman aşımı atar. PageFactory deseninin kullanılmasının en önemli avantajlarından biri de budur. Selenium AjaxElementLocatorFactory Sınıfıdır.

Burada, bir öğe üzerinde bir işlem gerçekleştirildiğinde, görünürlüğü için bekleme süresi yalnızca o andan itibaren başlar. Eğer öğe verilen zaman aralığında bulunamazsa, Test Durumu yürütme 'NoSuchElementException' istisnasını oluşturacaktır.

AjaxElement Bulucu Fabrikası

Örneğin:

AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10);
PageFactory.initElements(factory, this);

Atomic Cüzdanı indirin : Selenium Bu Eğitimdeki Demoya İlişkin Proje Dosyaları

SSS

Sayfa Nesne Modeli (Page Object Model), soyut bir şekilde çalışan bir tasarım desenidir.tracWeb sayfası öğelerini ayrı sınıflara ayırır. Bu, kullanıcı arayüzü etkileşimlerini test mantığından ayırarak otomasyonu basitleştirir, netliği, ölçeklenebilirliği artırır ve kod tekrarını azaltır.

In SeleniumPOM, her web sayfasını konum belirleyiciler ve eylemler içeren özel bir sınıf olarak temsil eder. Kullanıcı arayüzü öğelerini kapsayarak, test komut dosyalarının altta yatan sayfa yapısı değişikliklerinden bağımsız kalmasını sağlar.

POM, bağımsız bir çerçeve değil, bir tasarım desenidir. Testleri verimli bir şekilde yapılandırmak, daha iyi organizasyon, yeniden kullanılabilirlik ve sürdürülebilirlik sağlamak için herhangi bir otomasyon çerçevesine entegre edilebilir.

POM, her web sayfasının tanımlanmış konum belirleyicileri ve yöntemleri olan bir sınıf olarak modellendiği bir tasarım prensibidir. Test mantığını kullanıcı arayüzü öğelerinden ayırarak okunabilirliği, ölçeklenebilirliği ve uzun vadeli bakımı iyileştirir.

POM, sayfa abs'si için tasarım yapısını tanımlar.tracPage Factory ise ek açıklamalar ve yöntemler sunarken (@FindByWeb öğelerini verimli bir şekilde başlatmak için kullanılan Page Factory, POM'un geliştirilmiş bir uygulamasıdır.

POM, öğe konumlandırıcılarını ve sayfa eylemlerini özel sınıflar içinde merkezileştirir. Herhangi bir kullanıcı arayüzü değişikliği yalnızca tek bir yerde güncelleme gerektirir; bu da yeniden çalışmayı en aza indirir, kodun yeniden kullanımını artırır ve test bakımını hızlandırır.

Evet. Yapay zekâ destekli test oluşturucular, kullanıcı arayüzü hiyerarşilerini analiz ederek, mantıksal sorumluluk ayrımını koruyarak ve uçtan uca test oluşturmayı hızlandırarak otomatik olarak POM sınıfları oluşturabilir.

POM, modüler ve yeniden kullanılabilir test bileşenlerini teşvik ederek, konum belirleyicileri otomatik olarak güncelleyen yapay zeka tabanlı test bakım araçlarıyla entegrasyonu mümkün kılar, böylece komut dosyası kırılganlığını ve bakım yükünü azaltır.

Bu yazıyı şu şekilde özetleyin: