page object model selenium without using page factory
Sayfa Nesne Modeli (POM), Web Öğeleri için Nesne Deposunu Korumaya Yönelik bir Tasarım Modelidir. Bu Öğretici, Sayfa Fabrikası Olmadan Selenyumda POM'un Nasıl Uygulanacağını Açıklar:
Komut dosyası yazılmış otomasyon projesi, optimize edilecek ve anlaşılması daha kolay olacak şekilde tasarlanmalıdır. Bu, bir çerçeve tasarlamak için belirli yönergeleri izleyen POM kullanılarak elde edilir.
Aşağıdakiler hakkında daha fazla bilgi edineceğiz:
- POM nedir?
- Bir projede POM kullanmanın avantajları
- Sayfa Fabrikası Yaklaşımı Kullanmadan Temel POM Nasıl Oluşturulur?
=> Özel Selenium Eğitim Eğitim Serisi İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
Sayfa Fabrikası Olmadan Sayfa Nesne Modeli
Sayfa Nesne Modeli, Web Öğeleri için Nesne havuzunu korumak için kullanılan bir tasarım modelidir. Burada, tüm Web Öğeleri ve bunlara karşılık gelen yöntemler, her web sayfası için ayrı bir sınıfta tutulur. Bu nedenle, bir WebElement özniteliğindeki tek bir değişiklik bile, nerede kullanılırsa kullanılsın tüm test senaryolarına yansıyacaktır. Bu şekilde, Nesne Deposu bakımını kolaylaştırır.
Sayfa Nesneleri Modeli, birden çok sayfası veya durumu olan uygulamalar için kullanıldığında en iyisidir.
İşte Video Eğitimleri:
Bölüm I
Bölüm II
POM'un Avantajları
Aşağıda POM'un birkaç avantajı verilmiştir:
- Kodu korumak daha kolaydır. Herhangi bir Kullanıcı Arayüzü değişikliği, sınıfta nerede kullanılırsa kullanılsın yansıtılacaktır.
- Sağlam ve Kodu okunabilir hale getirir (Yöntemlerin daha gerçekçi adları vardır).
- Kodu yeniden kullanılabilir hale getirir ve kodun tekrarlanmasını azaltır (Nesne deposu test durumlarından bağımsızdır).
- Kod azalır ve optimize edilir.
Sayfa Fabrika Modeli Olmadan POM Oluşturma Adımları
# 1) Uygulamadaki her sayfa için bir Java Sınıfı oluşturun.
#iki) Her Sınıfta, tüm Web Öğelerini değişken olarak bildirin.
# 3) Değişkenlere göre hareket eden ilgili yöntemleri uygulayın.
Tasarım modeli 2 katman / paket kullanılarak yapılandırılabilir:
- Sayfa Katmanı uygulamanın sayfalarını ayrı Java Sınıfı olarak tutacaktır. Her Sınıf, değişken olarak bildirilmiş WebElements'e ve yöntem olarak gerçekleştirilen eylemlere sahip olacaktır.
- Test Katmanı uygulamanın test durumlarını ve doğrulama kısmını tutacaktır.
Basit bir senaryo örneğini ele alalım:
- Bir uygulamanın URL'sini açın.
- E-posta Adresini ve şifre verilerini yazın.
- Oturum Aç düğmesine tıklayın.
- Arama Sayfasındaki başarılı giriş mesajını doğrulayın.
Sayfa Katmanı
Burada 2 sayfamız var,
- Ana Sayfa : URL girildiğinde sayfa açılır ve bu, giriş için verileri girdiğimiz yerdir.
- Arama Sayfası : Başarılı bir oturum açtıktan sonra görüntülenen sayfa.
Sayfa katmanında, Web Uygulamasındaki her sayfa ayrı bir Java Sınıfı olarak bildirilir ve burada yer belirleyicileri ve eylemlerinden bahsedilir.
Gerçek Zamanlı Örneklerle POM Oluşturma Adımları
# 1) Her sayfa için bir Java Sınıfı oluşturun:
Bunda misal , 2 web sayfasına, “Ana Sayfa” ve “Arama” sayfalarına erişeceğiz. Bu nedenle, Sayfa Katmanında (veya bir pakette com.automation.pages gibi) 2 Java sınıfı oluşturacağız.
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Değişkenler olarak WebElements oluşturun:
python'da bir dizeyi karaktere göre bölme
Şunlarla etkileşim kuracağız:
- Ana Sayfadaki E-posta, Şifre, Oturum Açma düğmesi alanı.
- Arama Sayfasında başarılı bir mesaj.
Bu nedenle, 'By' Sınıfını kullanarak değişkenler olarak WebElements oluşturacağız.
Örneğin: E-postada xpath varsa // div (içerir (@id, 'EmailId')), o zaman değişken bildirimi
// EmailId alanı için yer bulucu
EmailAddress tarafından = By.xpath (// div (içerir (@id, 'EmailId')))
# 3) WebElements üzerinde gerçekleştirilen eylemler için yöntemler oluşturun:
WebElements üzerinde aşağıdaki eylemler gerçekleştirilir:
- EmailAddress alanına eylem yazın.
- Şifre alanına eylem yazın.
- Giriş düğmesindeki eylemi tıklayın.
Örneğin, WebElement üzerindeki her eylem için kullanıcı tanımlı yöntemler şu şekilde oluşturulur:
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Burada, kullanıcı tarafından ana test senaryosundan giriş gönderileceği için Id, yöntemde bir parametre olarak geçirilir.
Not :Sürücü örneğini Test Katmanındaki Main sınıfından almak için Sayfa Katmanındaki her sınıf için bir oluşturucu oluşturulması gerekir.
Sürücüyü burada başlatmayız, bunun yerine Örneği, Sayfa Katmanı sınıfının nesnesi oluşturulduğunda Ana Sınıftan alınır.
Aşağıda gösterildiği gibi her sayfa için iki Java Sınıfı oluşturulur:
Ana Sayfa.java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class HomePage { WebDriver driver; // Locator for Email Address By EmailAddress = By.xpath('//div(contains(@id,'Emaild'))'); // Locator for Password field By Password= By.xpath('//div(contains(@id,'Password'))'); // Locator for SignIn Button By SignInButton= By.xpath('//div(contains(@id,'SignInButton'))'); // Method to type EmailId public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) } // Method to type Password public void typePassword(String PasswordValue){ driver.findElement(Password).sendKeys(PasswordValue) } // Method to click SignIn Button public void clickSignIn(){ driver.findElement(SignInButton).click() } // Constructor // Gets called when object of this page is created in MainClass.java public HomePage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver; }
SearchPage.Java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class SearchPage{ WebDriver driver; // Locator for Success Message By SuccessMessage= By.xpath('//div(contains(@id,'Message'))'); // Method that return True or False depending on whether the message is displayed public Boolean MessageDisplayed(){ Boolean status = driver.findElement(SuccessMessage).isDisplayed(); return status; } // Constructor // This constructor is invoked when object of this page is created in MainClass.java public SearchPage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver;
Test Katmanı
Bu sınıfta Test Durumları uygulanır.
Ayrı bir paket oluşturuyoruz, örneğin com.automation.test ve ardından burada bir Java Sınıfı oluşturuyoruz (MainClass.java).
Test Senaryosu Oluşturma Adımları:
- Sürücüyü başlatın ve uygulamayı açın.
- PageLayer Sınıfının bir nesnesini oluşturun (her web sayfası için) ve sürücü örneğini bir parametre olarak iletin.
- Oluşturulan nesneyi kullanarak, eylemleri / doğrulamayı gerçekleştirmek için PageLayer Sınıfındaki (her web sayfası için) yöntemlere bir çağrı yapın.
- Tüm eylemler gerçekleştirilene kadar 3. adımı tekrarlayın ve ardından sürücüyü kapatın.
//package com.automation.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MainClass { public static void main(String() args) { System.setProperty('webdriver.chrome.driver','./exefiles/chromedriver.exe'); WebDriver driver= new ChromeDriver(); driver.manage().window().maximize(); driver.get('URL mentioned here'); // Creating object of HomePage and driver instance is passed as parameter to constructor of Homepage.Java HomePage homePage= new HomePage(driver); // Type EmailAddress homePage.typeEmailId('abc@ymail.com'); // EmailId value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Type Password Value homePage.typePassword('password123'); // Password value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Click on SignIn Button homePage.clickSignIn(); // Creating an object of LoginPage and driver instance is passed as parameter to constructor of SearchPage.Java SearchPage searchPage= new SearchPage(driver); //Verify that Success Message is displayed Assert.assertTrue(searchPage.MessageDisplayed()); //Quit browser driver.quit(); } }
Sonuç
Bu eğitici, Sayfa Nesne Modelinin avantajlarını ve Selenium'da Sayfa Fabrikası kullanmadan temel bir POM tasarım modelinin nasıl oluşturulacağını açıkladı.
Gelecek eğitimde, POM'un başka bir yaklaşımını, yani Sayfa Fabrikası yaklaşımını tartışacağız.
=> TÜM Selenium Öğreticilerini Buradan Kontrol Edin.
Önerilen Kaynaklar
- Sayfa Fabrikası ile Sayfa Nesne Modeli (POM) | Selenium Eğitimi
- Spiral Model - SDLC Spiral Modeli nedir?
- Salatalık Selenium Eğitimi: Salatalık Java Selenium WebDriver Entegrasyonu
- Bir Web Sayfasındaki Açılır Öğeleri Kullanmak için Selenium Select Sınıfı Kullanımı - Selenium Eğitimi # 13
- Selenium WebDriver'a Giriş - Selenium Eğitimi # 8
- ChromeDriver Selenium Eğitimi: Chrome'da Selenium Webdriver Testleri
- 30+ En İyi Selenyum Öğreticisi: Gerçek Örneklerle Selenyum Öğrenin
- Selenium Uzmanları için Yarı Zamanlı Serbest Çalışma Fırsatı