Page Framework Model Framework з Java і WebDriver

Гэты падручнік з'яўляецца другой часткай распрацоўкі Framework Automation Test.

У першай частцы мы даведаліся, як стварыць структуру рамкі з нуля.

У гэтым уроку мы збіраемся стварыць базавыя класы для фреймворка.


нататка:Калі вы не чыталі частку 1 гэтага падручніка, прытрымлівайцеся інструкцыям Як стварыць тэст для аўтаматызацыі тэстаў з нуля .

Акрамя таго, вы можаце кланаваць базавую структуру з майго Рэйтынг GitHub .

Пасля таго, як вы выканалі інструкцыі, прыведзеныя ў частцы 1 гэтага падручніка, альбо кланавалі рэпа, вы павінны атрымаць гэтыя чатыры модулі Maven:


  • дамен - класы, якія апісваюць бізнес-мадэль
  • рамкі - асноўныя класы, якія складаюць аснову
  • старонка-аб'екты - кампаненты і лакатары кожнай вэб-старонкі
  • рэгрэсійныя тэсты - фактычныя тэставыя класы, якія абапіраюцца на аб'екты старонкі

Наша аснова будзе заснавана на шаблоне дызайну аб'ектнай мадэлі старонкі. Мы таксама будзем выкарыстоўваць WebDriver's PageFactory клас для ініцыялізацыі WebElements.





Аб'ектная мадэль старонкі селену

Добра, зараз, калі вы стварылі базавую структуру, пачнем з дадання базавых класаў.

BasePage.java

У рамкі модуль, мы ствараем клас BasePage.java. Усе класы аб'ектаў старонкі будуць пашыраць BasePage, такім чынам, успадкоўваючы ўсе базавыя метады.

Наш клас BasePage будзе мець канструктар, які прымае аб'ект WebDriver для ініцыялізацыі аб'екта WebDriverWait. Канструктар таксама будзе адказны за ініцыялізацыю WebElements праз PageFactory.


Акрамя таго, у нас таксама ёсць некалькі спосабаў чакання ўтыліты для апрацоўкі розных чаканняў, такіх як WaitForElementToAppear.

Такім чынам, клас BasePage будзе выглядаць так:

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)));
} }
нататка:У класе BasePage мы не ініцыялізуем аб'ект WebDriver. Ініцыялізацыя ажыццяўляецца ў класе BaseTest.

BaseTest.java

Клас BaseTest змяшчае метады для ініцыялізацыі і завяршэння аб'екта WebDriver. Паколькі ўсе класы Test будуць пашыраць клас BaseTest, то ініцыялізацыя вырабляецца няяўна. Класы Test проста атрымаюць аб'ект WebDriver, выклікаючы getDriver() метад.

Акрамя таго, паколькі мы выкарыстоўваем TestNG, мы можам выкарыстоўваць @BeforeSuite і @AfterSuite анатацыі, такія як:


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;
} }


Даданне аб'ектаў старонкі

Цяпер у старонка-аб'екты модуль, мы ствараем наш першы аб'ект старонкі. Для гэтага ўроку я буду выкарыстоўваць хатнюю старонку Google.

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);
} }

Як бачыце, гэты аб'ект старонкі мала што робіць. У ім ёсць толькі канструктар, які прымае аб'ект WebDriver і перадае яго ў свой канструктар суперкласа.

Зноў жа, звярніце ўвагу, што ні адзін з аб'ектаў старонкі, ні BasePage не ініцыююць аб'екты WebDriver.

У частцы 3 гэтага падручніка мы дадамо метады апрацоўкі функцыі пошуку на галоўнай старонцы Google.




Даданне тэстаў

Мы дадаем тэсты ў рэгрэсійныя тэсты модуль.

Мы ствараем тэставы клас, які называецца GoogleHomepageTests, з адным метадам тэставання, які проста стварае экземпляр нашага аб'екта старонкі GoogleHomepage. Пакуль што ніякіх іншых дзеянняў ён не робіць.

У частцы 3 гэтага падручніка я дадам метады пошуку і праверкі вынікаў.

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 вы ўбачыце, як аглядальнік Google Chrome адкрываецца і зачыняецца.


Сачыце за часткай 3 гэтага падручніка, дзе я распавяду прыклад вышэй, дадаўшы дадатковыя кампаненты для пашырэння рамкі.

Вы можаце атрымаць усе вышэйзгаданыя зыходныя коды з Рэйта GitHub . Спадзяюся, што вышэйзгаданы падручнік WebDriver Framework апынуўся карысным.

Далейшае чытанне: