Sélénium - Modèle d'objet de page
Selenium agit sur les éléments Web à l'aide de leurs propriétés telles que ID, nom, XPath, etc. Contrairement à QTP qui a un référentiel d'objets intégré (OR), Selenium n'a pas de OU intégré.
Par conséquent, nous devons construire une salle d'opération qui devrait également être maintenable et accessible à la demande. Page Object Model (POM) est un modèle de conception populaire pour créer un référentiel d'objets dans lequel chacune de ces propriétés Webelements est créée à l'aide d'un fichier de classe.
Avantages
POM est une implémentation où les objets de test et les fonctions sont séparés les uns des autres, gardant ainsi le code propre.
Les objets restent indépendants des scripts de test. Un objet est accessible par un ou plusieurs scripts de test, par conséquent POM nous aide à créer des objets une fois et à les utiliser plusieurs fois.
Puisque les objets sont créés une fois, il est facile d'accéder ainsi que de mettre à jour une propriété particulière d'un objet.
Diagramme de flux POM
Des objets sont créés pour chacune des pages et des méthodes sont développées exclusivement pour accéder à ces objets. Utilisons http://calculator.net pour comprendre la même chose.
Il y a plusieurs calculatrices qui lui sont associées et chacun de ces objets dans une page particulière est créé dans un fichier de classe séparé en tant que méthodes statiques et ils sont tous accessibles via le fichier de classe «tests» dans lequel une méthode statique accèderait aux objets.
Exemple
Comprenons-le en implémentant POM pour le test du calculateur de pourcentage.
Step 1 - Créez un fichier de classe simple (page_objects_perc_calc.java) dans un package et créez des méthodes pour chacun de ces identificateurs d'objet comme indiqué ci-dessous.
package PageObject;
import org.openqa.selenium.*;
public class PageObjectsPercCalc {
private static WebElement element = null;
// Math Calc Link
public static webElement lnk_math_calc(WebDriver driver) {
element = driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a"));
return element;
}
//Percentage Calc Link
public static webElement lnk_percent_calc(WebDriver driver) {
element = driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a"));
return element;
}
//Number 1 Text Box
public static webElement txt_num_1(WebDriver driver) {
element = driver.findElement(By.id("cpar1"));
return element;
}
//Number 2 Text Box
public static webElement txt_num_2(WebDriver driver) {
element = driver.findElement(By.id("cpar2"));
return element;
}
//Calculate Button
public static webElement btn_calc(WebDriver driver) {
element =
driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input"));
return element;
}
// Result
public static webElement web_result(WebDriver driver) {
element =
driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b"));
return element;
}
}
Step 2 - Créez une classe avec main et importez le package et créez des méthodes pour chacun de ces identificateurs d'objet comme indiqué ci-dessous.
package PageObject;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PercentCalculator {
private static WebDriver driver = null;
public static void main(String[] args) {
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.calculator.net");
//Use page Object library now
page_objects_perc_calc.lnk_math_calc(driver).click();
page_objects_perc_calc.lnk_percent_calc(driver).click();
page_objects_perc_calc.txt_num_1(driver).clear();
page_objects_perc_calc.txt_num_1(driver).sendKeys("10");
page_objects_perc_calc.txt_num_2(driver).clear();
page_objects_perc_calc.txt_num_2(driver).sendKeys("50");
page_objects_perc_calc.btn_calc(driver).click();
String result = page_objects_perc_calc.web_result(driver).getText();
if(result.equals("5")) {
System.out.println(" The Result is Pass");
} else {
System.out.println(" The Result is Fail");
}
driver.close();
}
}
Production
Le test est exécuté et le résultat est imprimé dans la console. Ci-dessous, un aperçu de la même chose.