Java və WebDriver ilə Səhifə Obyekt Model Çerçevesi

Bu təlimat Test Avtomatlaşdırma Çərçivə inkişafının ikinci hissəsidir.

İlk hissədə, çərçivənin quruluşunu sıfırdan necə yaratmağı öyrəndik.

Bu təlimatda, çərçivə üçün əsas siniflər yaradacağıq.


Qeyd:Bu təlimatın 1-ci hissəsini oxumamısınızsa, lütfən təlimatları izləyin Scratch-dan bir Test Automation Framework necə yaradılır .

Alternativ olaraq, baza çərçivəsini mənimdən klonlaya bilərsiniz GitHub repo .

Bu təlimatın 1-ci hissəsindəki təlimatları izlədikdən və ya reponu klonladıqdan sonra bu dörd Maven moduluna sahib olmalısınız:


  • domen - biznes modelini təsvir edən dərslər
  • çərçivə - çərçivəni təşkil edən əsas siniflər
  • səhifə obyektləri - hər veb səhifənin komponentləri və axtarış cihazları
  • regresiya testləri - səhifə obyektlərinə etibar edən faktiki test sinifləri

Çərçivəmiz, Səhifə Nişanı Modeli dizayn nümunəsinə əsaslanacaqdır. WebDriver’dən də istifadə edəcəyik Səhifə fabriki WebElements-i işə salmaq üçün sinif.



Selenyum Səhifə Obyekt Modeli

Tamam, indi baza quruluşunu yaratdıqdan sonra baza siniflərini əlavə etməyə başlayaq.

BasePage.java

İçində çərçivə modul, BasePage.java adlı bir sinif yaradırıq. Bütün səhifə obyekt sinifləri BasePage-i genişləndirəcək və beləliklə bütün əsas metodları miras alacaqdır.

BasePage sinfimizdə bir WebDriverWait obyektini işə salmaq üçün bir WebDriver obyekti götürən bir konstruktor olacaqdır. Layihəçi, həmçinin WebElements-i PageFactory vasitəsilə işə salmaq üçün cavabdeh olacaqdır.


Bundan əlavə, WaitForElementToAppear kimi müxtəlif gözləmələri idarə etmək üçün bəzi yardım proqramı gözləmə metodlarımız olacaq.

Beləliklə, BasePage sinfi belə görünəcək:

package rima.framework.core; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class BasePage {
private static final int TIMEOUT = 5;
private static final int POLLING = 100;
protected WebDriver driver;
private WebDriverWait wait;
public BasePage(WebDriver driver) {
this.driver = driver;
wait = new WebDriverWait(driver, TIMEOUT, POLLING);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, TIMEOUT), this);
}
protected void waitForElementToAppear(By locator) {
wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
}
protected void waitForElementToDisappear(By locator) {
wait.until(ExpectedConditions.invisibilityOfElementLocated(locator));
}
protected void waitForTextToDisappear(By locator, String text) {
wait.until(ExpectedConditions.not(ExpectedConditions.textToBe(locator, text)));
} }
Qeyd:BasePage sinfində WebDriver obyektini işə salmırıq. Başlatma BaseTest sinifində aparılır.

BaseTest.java

BaseTest sinfi, WebDriver obyektini işə salmaq və ləğv etmək üsullarını saxlayır. Bütün Test sinifləri BaseTest sinifini genişləndirəcək olduğundan, başlanğıc örtüklü şəkildə həyata keçirilir. Test sinifləri getDriver() zəng edərək sadəcə WebDriver obyektini əldə edəcəklər metod.

Ayrıca, TestNG istifadə etdiyimiz kimi @BeforeSuite istifadə edə bilərik və @AfterSuite kimi qeydlər, məsələn:


package rima.framework.core; import io.github.bonigarcia.wdm.ChromeDriverManager; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; public class BaseTest {
private WebDriver driver;
@BeforeSuite
public void beforeSuite() {
System.setProperty('headless', 'false'); // You can set this property elsewhere
String headless = System.getProperty('headless');

ChromeDriverManager.chromedriver();
if('true'.equals(headless)) {

ChromeOptions chromeOptions = new ChromeOptions();

chromeOptions.addArguments('--headless');

driver = new ChromeDriver(chromeOptions);
} else {

driver = new ChromeDriver();
}
}
@AfterSuite
public void afterSuite() {
if(null != driver) {

driver.close();

driver.quit();
}
}
public WebDriver getDriver() {
return driver;
} }


Səhifə obyektləri əlavə olunur

İndi səhifə obyektləri modul, ilk Səhifə Obyektimizi yaradırıq. Bu dərs üçün Google ana səhifəsindən istifadə edəcəyəm.

package rima.pageobjects.homepage; import org.openqa.selenium.WebDriver; import rima.framework.core.BasePage; public class GoogleHomepage extends BasePage {
public GoogleHomepage(WebDriver driver) {
super(driver);
} }

Gördüyünüz kimi, bu səhifə obyekti çox şey etmir. Yalnız bir WebDriver obyektini götürən və onu super sinif qurucusuna ötürən bir konstruktor var.

Yenə də qeyd edək ki, heç bir səhifə obyektləri və ya BasePage WebDriver Nesnələrini işə salmır.

Bu təlimatın 3-cü hissəsində Google ana səhifəsinin axtarış funksiyasını idarə etmək üsullarını əlavə edəcəyik.




Testlərin əlavə edilməsi

Testləri əlavə edirik regresiya testləri modul.

GoogleHomepage səhifə obyektimizi yaradan bir test üsulu ilə GoogleHomepageTests adlı bir test sinfi yaradırıq. Hələlik başqa bir hərəkət etmir.

Bu təlimatın 3-cü hissəsində nəticələri axtarmaq və təsdiqləmək üçün metodlar əlavə edəcəyəm.

package rima.tests.homepage; import org.testng.annotations.Test; import rima.framework.core.BaseTest; import rima.pageobjects.homepage.GoogleHomepage; public class GoogleHomepageTests extends BaseTest {
@Test
public void homepageTests() {
GoogleHomepage googleHomepage = new GoogleHomepage(getDriver());
} }

IDE-də yuxarıdakı testi işə saldıqda Google Chrome brauzerinin açıq və yaxın olduğunu görməlisiniz.


Çərçivəni genişləndirmək üçün daha çox komponent əlavə edərək yuxarıdakı nümunəni daha da götürəcəyim bu təlimatın 3-cü hissəsi üçün bizi izləyin.

Yuxarıda göstərilən mənbələrin hamısını GitHub repo . Yuxarıdakı WebDriver Framework təlimini faydalı tapdığınızı ümid edirəm.

Əlavə oxu: