Sayfa Nesne Modeli (POM) & Selenium Eğitiminde Sayfa Fabrikası

İçindekiler:

Anonim

Sayfa Nesne Modeli nedir?

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

Bu model altında, 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 WebElements üzerinde işlemler gerçekleştiren Page yöntemlerini de içerecektir. Bu yöntemlerin adı, gerçekleştirdikleri göreve göre verilmelidir, yani bir yükleyici ödeme ağ geçidinin görünmesini bekliyorsa, POM yöntem adı waitForPaymentScreenDisplay () olabilir.

Bu eğitimde öğreneceksiniz-

  • Neden Sayfa Nesne Modeli?
  • POM'un Avantajları
  • POM nasıl uygulanır?
  • Sayfa Fabrikası nedir?
  • Page Factory konseptli Guru99 TestCase
  • AjaxElementLocatorFactory

Neden Sayfa Nesne Modeli?

Selenium WebDriver'da UI Otomasyonunu başlatmak zor bir iş DEĞİLDİR. Sadece öğeleri bulmanız, üzerinde işlemler yapmanız gerekir.

Bir web sitesine giriş yapmak için bu basit komut dosyasını düşünün

Sizin de görebileceğiniz gibi, yaptığımız tek şey öğeleri bulmak ve bu öğeler için değerleri doldurmak.

Bu küçük bir betiktir. Komut dosyası bakımı kolay görünüyor. Ancak zamanla test paketi büyüyecek. Kodunuza daha fazla satır ekledikçe işler zorlaşır.

Komut dosyası bakımıyla ilgili temel sorun, 10 farklı komut dosyası aynı sayfa öğesini kullanıyorsa, bu öğede herhangi bir değişiklikle 10 komut dosyasının tümünü değiştirmeniz gerekir. Bu, zaman alıcıdır ve hataya açıktır.

Komut dosyası bakımına yönelik 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, o elemanı kullanan tüm betiklerde yeniden kullanılabilir. Gelecekte, web öğesinde bir değişiklik olursa, değişikliği 10 farklı komut dosyasında değil, yalnızca 1 sınıf dosyasında yapmamız gerekiyor.

Bu yaklaşıma Selenium'da Sayfa Nesne Modeli denir. Kodu daha okunabilir, sürdürülebilir ve yeniden kullanılabilir hale getirmeye yardımcı olur.

POM'un Avantajları

  1. Sayfa Nesnesi Tasarım Modeli, kullanıcı arayüzündeki işlemlerin ve akışların doğrulamadan ayrılması gerektiğini söylüyor. Bu konsept, kodumuzu daha temiz ve anlaşılması kolay hale getirir.
  2. İkinci fayda, nesne havuzunun test durumlarından bağımsız olmasıdır, bu nedenle aynı nesne havuzunu farklı araçlarla farklı bir amaç için kullanabiliriz. Örneğin, Selenium'daki Sayfa Nesne Modelini işlevsel Test için TestNG / JUnit ile ve aynı zamanda kabul testi için JBehave / Cucumber ile entegre edebiliriz.
  3. POM sınıflarındaki yeniden kullanılabilir sayfa yöntemleri sayesinde kod azalır ve optimize edilir.
  4. Yöntemler, kullanıcı arayüzünde gerçekleşen işlemle kolayca eşleştirilebilen daha gerçekçi isimler alır. yani, butona tıkladıktan sonra ana sayfaya gelirsek, yöntem adı 'gotoHomePage ()' gibi olacaktır.

POM nasıl uygulanır?

Basit POM:

Bu tüm Web Elements Sayfa nesne modeli çerçevesinde temel yapısı var AUT doğrulama testi yöntemlerinin bir parçası olarak ayrı olması gerektiği gibi, bu Web Elements ameliyat ve yöntem, bir sınıf file.A görev içinde korunur.

Tam Örnek

TestCase: Guru99 Demo Sitesine gidin.

Adım 1) Guru99 Demo Sitesine gidin
Adım 2) Ana sayfada "Guru99 Bank" metninin mevcut olup olmadığını kontrol edin
Adım 3) Uygulamaya giriş yapın
4. Adım) Ana sayfanın "Yönetici Kimliği: demo" olarak metin içerdiğini doğrulayın

İşte 2 sayfayla uğraşıyoruz

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

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

Guru99 Giriş sayfası POM

paket sayfaları;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class Guru99Login {WebDriver sürücüsü;User99GuruName tarafından = By.name ("uid");Password99Guru = By.name ("password");TitleText = By.className ("barone");Login = By.name ("btnLogin");public Guru99Login (WebDriver sürücüsü) {this.driver = sürücü;}// Metin kutusunda kullanıcı adı belirlemepublic void setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Parola metin kutusunda parola belirleyinpublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Giriş düğmesine tıklayınpublic void clickLogin () {driver.findElement (oturum açma) .click ();}// Giriş Sayfasının başlığını alınpublic String getLoginTitle () {return driver.findElement (titleText) .getText ();}/ *** Bu POM yöntemi, uygulamada oturum açmak için test durumunda gösterilecektir* @param strUserName* @param strPasword* @dönüş* /public void loginToGuru99 (String strUserName, String strPasword) {// Kullanıcı adını doldurunthis.setUserName (strUserName);// Şifreyi doldurunthis.setPassword (strPasword);// Oturum Aç düğmesine tıklayınthis.clickLogin ();}}

Guru99 Ana Sayfa Selenium'da POM

paket sayfaları;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class Guru99HomePage {WebDriver sürücüsü;HomePageUserName tarafından = By.xpath ("// tablo // tr [@ class = 'heading3']");public Guru99HomePage (WebDriver sürücüsü) {this.driver = sürücü;}// Kullanıcı adını Ana Sayfadan alınpublic String getHomePageDashboardUserName () {return driver.findElement (homePageUserName) .getText ();}}

Selenium Test durumunda Guru99 Simple POM

paket testi;içe aktar 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;sayfaları içe aktarın.Guru99HomePage;sayfaları içe aktar.Guru99Login;public class Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";WebDriver sürücüsü;Guru99Login objLogin;Guru99HomePage objHomePage;@Evleneceksengenel void kurulumu () {System.setProperty ("webdriver.gecko.driver", driverPath);sürücü = yeni FirefoxDriver ();driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Bu test vakası http://demo.guru99.com/V4/ adresinde oturum açacaktır.* Giriş sayfası başlığını guru99 bankası olarak doğrulayın* Uygulamaya giriş yap* Dashboard mesajını kullanarak ana sayfayı doğrulayın* /@Test (öncelik = 0)public void test_Home_Page_Appear_Correct () {// Oturum Açma Sayfası nesnesi oluşturobjLogin = new Guru99Login (sürücü);// Giriş sayfası başlığını doğrulayınString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). İçerir ("guru99 bank"));// uygulamaya giriş yapobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// sonraki sayfaya gitobjHomePage = new Guru99HomePage (sürücü);// Ana sayfayı doğrulayınAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). İçerir ("yönetici kimliği: mgr123"));}

Selenium'da Sayfa Fabrikası nedir?

Selenium'daki Sayfa Fabrikası, Selenium WebDriver için dahili bir Sayfa Nesne Modeli çerçevesi konseptidir ancak çok optimize edilmiştir. Sayfa nesnelerinin başlatılması veya Sayfa nesnesinin kendisinin somutlaştırılması için kullanılır. Ayrıca, "FindElement / s" kullanmadan Sayfa sınıfı öğelerini başlatmak için de kullanılır.

Burada da Sayfa Nesne Deposu ve Test Yöntemlerinin ayrılması kavramını takip ediyoruz. Ek olarak, Selenium'daki PageFactory sınıfının yardımıyla, WebElement'i bulmak için @FindBy ek açıklamalarını kullanıyoruz. Web öğelerini başlatmak için initElements yöntemini kullanıyoruz

@FindBy kabul edebilir tagName, partialLinkText, isim, linktext, id, css, SinifAdi, xpath özellikler olarak.

Page Factory kullanarak yukarıdaki örneğe bakalım.

Guru99 Sayfa Fabrikası ile oturum açma sayfası

paket 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 {/ *** Tüm Web Elemanları @FindBy ek açıklaması ile tanımlanır* /WebDriver sürücüsü;@FindBy (name = "uid")WebElement user99GuruName;@FindBy (name = "şifre")WebElement password99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (name = "btnLogin")WebElement girişi;public Guru99Login (WebDriver sürücüsü) {this.driver = sürücü;// Bu initElements yöntemi tüm WebElement'leri oluşturacakPageFactory.initElements (sürücü, bu);}// Metin kutusunda kullanıcı adı belirlemepublic void setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}// Parola metin kutusunda parola belirleyinpublic void setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}// Giriş düğmesine tıklayınpublic void clickLogin () {login.click ();}// Giriş Sayfasının başlığını alınpublic String getLoginTitle () {return titleText.getText ();}/ *** Bu POM yöntemi, uygulamada oturum açmak için test durumunda gösterilecektir* @param strUserName* @param strPasword* @dönüş* /public void loginToGuru99 (String strUserName, String strPasword) {// Kullanıcı adını doldurunthis.setUserName (strUserName);// Şifreyi doldurunthis.setPassword (strPasword);// Oturum Aç düğmesine tıklayınthis.clickLogin ();}}

Guru99 Sayfa Fabrikası ile Ana Sayfa

paket 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 sürücüsü;@FindBy (xpath = "// tablo // tr [@ class = 'heading3']")WebElement homePageUserName;public Guru99HomePage (WebDriver sürücüsü) {this.driver = sürücü;// Bu initElements yöntemi tüm WebElement'leri oluşturacakPageFactory.initElements (sürücü, bu);}// Kullanıcı adını Ana Sayfadan alınpublic String getHomePageDashboardUserName () {homePageUserName.getText ();}}

Page Factory konseptli Guru99 TestCase

paket testi;içe aktar 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;PageFactory.Guru99HomePage içe aktarın;PageFactory.Guru99Login'i içe aktarın;public class Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";WebDriver sürücüsü;Guru99Login objLogin;Guru99HomePage objHomePage;@Evleneceksengenel void kurulumu () {System.setProperty ("webdriver.gecko.driver", driverPath);sürücü = yeni FirefoxDriver ();driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Bu test http://demo.guru99.com/V4/ adresine gidin* Giriş sayfası başlığını guru99 bankası olarak doğrulayın* Uygulamaya giriş yap* Dashboard mesajını kullanarak ana sayfayı doğrulayın* /@Test (öncelik = 0)public void test_Home_Page_Appear_Correct () {// Oturum Açma Sayfası nesnesi oluşturobjLogin = new Guru99Login (sürücü);// Giriş sayfası başlığını doğrulayınString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). İçerir ("guru99 bank"));// uygulamaya giriş yapobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// sonraki sayfaya gitobjHomePage = new Guru99HomePage (sürücü);// Ana sayfayı doğrulayınAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). İçerir ("yönetici kimliği: mgr123"));}}

Tam Proje Yapısı şema gibi görünecektir:

AjaxElementLocatorFactory

AjaxElementLocatorFactory , Selenium'daki PageFactory'nin tembel bir yükleme konseptidir. Web elemanlarını sadece herhangi bir işlemde kullanıldığında bulmak için kullanılır. Nesne sayfası sınıfına WebElements için bir zaman aşımı atar. Selenium'da PageFactory kalıbı kullanmanın en önemli avantajlarından biri AjaxElementLocatorFactory Sınıfıdır.

Burada, bir eleman üzerinde bir işlem yapıldığında, görünürlüğü için bekleme sadece o andan itibaren başlar. Öğe verilen zaman aralığında bulunmazsa, Test Vakası yürütmesi 'NoSuchElementException' istisnası atar.

Özet

  1. Selenium Websdriver'daki Sayfa Nesne Modeli, bir Nesne Deposu tasarım modelidir.
  2. Selenium sayfa nesnesi modeli, test kodumuzu sürdürülebilir, yeniden kullanılabilir oluşturur.
  3. Page Factory, Sayfa Nesne Modeli çerçeve konseptinde nesne deposu oluşturmanın optimize edilmiş bir yoludur.
  4. AjaxElementLocatorFactory, WebElement'leri yalnızca herhangi bir işlemde kullanıldıklarında tanımlamak için Sayfa Fabrikası - sayfa nesnesi tasarım modelinde tembel bir yükleme konseptidir.

Bu Öğreticide Demo için Selenium Proje Dosyalarını İndirin