Paj ki gen konpòtman egzanplè chapant ki gen Java ak WebDriver

Leson patikilye sa a se dezyèm pati nan devlopman chapant Otomatik Tès la.

Nan premye pati a, nou te aprann kouman yo kreye estrikti a nan fondasyon an nan grate.

Nan leson patikilye sa a, nou pral kreye klas yo baz pou fondasyon an.


Remak:Si ou pa li pati 1 nan leson patikilye sa a, tanpri swiv enstriksyon yo sou Ki jan yo kreye yon chapant Otomatik Tès soti nan grafouyen .

Altènativman, ou ka script fondasyon an baz soti nan mwen GitHub repo .

Yon fwa ou te swiv enstriksyon yo sou pati 1 nan leson patikilye sa a oswa klone repo a, ou ta dwe gen kat modil Maven sa yo:


  • domèn - klas ki dekri modèl biznis la
  • fondasyon - klas debaz ki fòme fondasyon an
  • paj-objè yo - eleman ak lokalizatè nan chak Paj Web
  • tès retou annaryè - klas tès aktyèl ki konte sou objè paj

Ap fondasyon nou an ki baze sou modèl la Page Modèl konsepsyon objè. Nou pral itilize tou WebDriver la PageFactory klas inisyalize WebElements.



Selenyòm Paj ki gen konpòtman egzanplè

Ok, kounye a ke ou te kreye estrikti baz la, se pou yo kòmanse pa ajoute klas yo baz.

BasePage.java

Nan fondasyon modil, nou kreye yon klas ki rele BasePage.java. Tout klas objè paj yo pral pwolonje BasePage a, konsa eritye tout metòd baz yo.

Klas BasePage nou an ap gen yon konstriktè ki pran yon objè WebDriver pou inisyalize yon objè WebDriverWait. Konstriktè a ap responsab tou pou inisyalize WebElements atravè PageFactory.


Anplis de sa, nou pral gen tou kèk metòd sèvis piblik rete tann okipe ap tann yo divès kalite tankou WaitForElementToAppear.

Se konsa, klas la BasePage ap sanble:

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)));
} }
Remak:Nan klas BasePage nou pa inisyalize objè WebDriver la. Se inisyalizasyon an fè nan klas BaseTest.

BaseTest.java

Klas BaseTest kenbe metòd yo inisyalize ak mete fen nan objè a WebDriver. Depi tout klas Egzamen yo pral pwolonje klas BaseTest la, lè sa a inisyalizasyon an fèt enplisitman. Klas yo Egzamen pral tou senpleman jwenn objè a WebDriver lè w rele nan getDriver() metòd.

Epitou, menm jan nou ap itilize TestNG, nou ka itilize @BeforeSuite ak @AfterSuite anotasyon, tankou:


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


Ajoute objè yo Page

Koulye a, nan la paj-objè yo modil, nou kreye premye objè Page nou an. Pou leson patikilye sa a, mwen pral sèvi ak paj dakèy la 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);
} }

Kòm ou ka wè, objè paj sa a pa fè anpil. Li sèlman gen yon konstriktè ki pran yon objè WebDriver epi li pase li sou konstriktè superklas li yo.

Ankò, sonje ke okenn nan objè paj yo ni BasePage inisyalize objè WebDriver yo.

Nan Pati 3 nan leson patikilye sa a, nou pral ajoute metòd yo okipe fonksyon rechèch la nan paj dakèy la Google.




Ajoute Tès yo

Nou ajoute tès yo nan la tès retou annaryè modil.

Nou kreye yon klas tès ki rele GoogleHomepageTests, ak yon sèl metòd tès ki jis enstansye objè paj GoogleHomepage nou an. Pou kounye a, li pa fè okenn lòt aksyon.

Nan Pati 3 nan leson patikilye sa a, mwen pral ajoute metòd yo nan rechèch ak verifye rezilta yo.

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

Lè ou kouri tès la pi wo a nan IDE ou, ou ta dwe wè yon navigatè Google Chrome louvri epi fèmen.


Rete branche pou Pati 3 nan leson patikilye sa a kote mwen pral pran egzanp ki anwo la a pi lwen lè mwen ajoute plis eleman pou yon ekstansyon pou fondasyon an.

Ou ka jwenn tout kòd sous ki anwo a nan GitHub repo . Espere ou jwenn itil leson patikilye WebDriver chapant lan.

Pli lwen lekti: