Week7 - Day 3
~30 mins
Week 7 - Day 3 - POM With Properties File
package base;
import java.io.FileInputStream;
import java.io.IOException;
import java.time.Duration;
import java.util.Properties;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import io.github.bonigarcia.wdm.WebDriverManager;
import utils.ReadExcel;
public class ProjectSpecificMethods {
public ChromeDriver driver;
public String excelFileName;
public static String leadId;
public Properties prop;
@DataProvider(name="fetchData", indices=0)
public String[][] sendData() throws IOException {
return ReadExcel.excelRead(excelFileName);
}
@Parameters({"language"})
@BeforeMethod
public void startApp(String lang) throws IOException {
//load properties file
FileInputStream fis = new FileInputStream("./src/main/resources/"+lang+".properties");
prop = new Properties();
prop.load(fis);
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get(prop.getProperty("url"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
}
@AfterMethod
public void closeBrowser() {
driver.close();
}
}
package pages;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import base.ProjectSpecificMethods;
public class CreateLeadPage extends ProjectSpecificMethods {
public CreateLeadPage(ChromeDriver driver, Properties prop) {
this.driver = driver;
this.prop = prop;
}
public CreateLeadPage enterCompanyName(String company) {
driver.findElement(By.id("createLeadForm_companyName")).sendKeys(company);
return this;
}
public CreateLeadPage enterFirstName(String fName) {
driver.findElement(By.id("createLeadForm_firstName")).sendKeys(fName);
return this;
}
public CreateLeadPage enterLastName(String lName) {
driver.findElement(By.id("createLeadForm_lastName")).sendKeys(lName);
return this;
}
public ViewLeadPage clickCreateLeadButton() {
driver.findElement(By.name("submitButton")).click();
return new ViewLeadPage(driver,prop);
}
}
package pages;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import base.ProjectSpecificMethods;
public class HomePage extends ProjectSpecificMethods {
public HomePage(ChromeDriver driver, Properties prop) {
this.driver = driver;
this.prop = prop;
}
public LoginPage clickLogoutButton() {
driver.findElement(By.xpath(prop.getProperty("HomePage.Logout.Xpath"))).click();
return new LoginPage(driver,prop);
}
public MyHomePage clickCrmsfaLink() {
driver.findElement(By.linkText(prop.getProperty("HomePage.Crmsfa.LinkText"))).click();
return new MyHomePage(driver,prop);
}
public HomePage verifyHomePage() {
boolean displayed = driver.findElement(By.linkText(prop.getProperty("HomePage.Crmsfa.LinkText"))).isDisplayed();
if (displayed) {
System.out.println("Home Page is loaded");
}
return this;
}
}
package pages;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import base.ProjectSpecificMethods;
public class LoginPage extends ProjectSpecificMethods {
public LoginPage(ChromeDriver driver, Properties prop) {
this.driver = driver;
this.prop = prop;
}
public LoginPage enterUsername(String username) throws InterruptedException {
driver.findElement(By.id(prop.getProperty("LoginPage.Username.Id"))).sendKeys(username);
//Thread.sleep(5000);
return this;
}
public LoginPage enterPassword(String password) {
driver.findElement(By.id(prop.getProperty("LoginPage.Password.Id"))).sendKeys(password);
return this;
}
public HomePage clickLoginButton() {
driver.findElement(By.className(prop.getProperty("LoginPage.LoginButton.ClassName"))).click();
return new HomePage(driver,prop);
}
}
package pages;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import base.ProjectSpecificMethods;
public class MyHomePage extends ProjectSpecificMethods {
public MyHomePage(ChromeDriver driver, Properties prop) {
this.driver = driver;
this.prop = prop;
}
public MyLeadsPage clickLeadsLink() {
driver.findElement(By.linkText(prop.getProperty("MyHomePage.LeadsLink.LinkText"))).click();
return new MyLeadsPage(driver,prop);
}
}
package pages;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import base.ProjectSpecificMethods;
public class MyLeadsPage extends ProjectSpecificMethods {
public MyLeadsPage(ChromeDriver driver, Properties prop) {
this.driver = driver;
this.prop = prop;
}
public CreateLeadPage clickCreateLeadLink() {
driver.findElement(By.linkText(prop.getProperty("MyLeadsPage.CreateLead.LinkText"))).click();
return new CreateLeadPage(driver,prop);
}
}
package pages;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import base.ProjectSpecificMethods;
public class ViewLeadPage extends ProjectSpecificMethods {
public ViewLeadPage(ChromeDriver driver, Properties prop) {
this.driver = driver;
this.prop = prop;
}
public ViewLeadPage verifyFirstName() {
System.out.println("first name displayed");
return this;
}
public ViewLeadPage getLeadId() {
String text = driver.findElement(By.id("viewLead_companyName_sp")).getText();
leadId = text.replaceAll("\\D", "");
return this;
}
}
package testcases;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import base.ProjectSpecificMethods;
import pages.LoginPage;
public class CreateLead extends ProjectSpecificMethods{
@BeforeTest
public void setFileName() {
excelFileName ="CreateLead";
}
@Test(dataProvider = "fetchData")
public void runCreateLead(String username,String password,String company,String fName, String lName) throws InterruptedException {
new LoginPage(driver,prop)
.enterUsername(prop.getProperty("username"))
.enterPassword(prop.getProperty("password"))
.clickLoginButton()
.clickCrmsfaLink()
.clickLeadsLink()
.clickCreateLeadLink()
.enterCompanyName(company)
.enterFirstName(fName)
.enterLastName(lName)
.clickCreateLeadButton()
.verifyFirstName();
}
}
package testcases;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import base.ProjectSpecificMethods;
import pages.HomePage;
import pages.LoginPage;
public class VerifyLoginWithValidData extends ProjectSpecificMethods{
@BeforeTest
public void setFileName() {
excelFileName ="Login";
}
@Test
public void loginLogout() throws InterruptedException {
new LoginPage(driver,prop)
.enterUsername(prop.getProperty("username"))
.enterPassword(prop.getProperty("password"))
.clickLoginButton()
.verifyHomePage();
}
}
package utils;
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadExcel {
public static String[][] excelRead(String fileName) throws IOException {
//step1: set up the excel document path
XSSFWorkbook wb = new XSSFWorkbook("./data/"+fileName+".xlsx");
//step2: set up the worksheet
XSSFSheet ws = wb.getSheet("Sheet1");
//to find the number of rows in the worksheet
int rowCount = ws.getLastRowNum();
//to find the number of cells in a row
int cellCount = ws.getRow(1).getLastCellNum();
//declare 2D array
String[][] data = new String[rowCount][cellCount];
for (int i = 1; i <= rowCount; i++) {
for (int j = 0; j < cellCount; j++) {
String text = ws.getRow(i).getCell(j).getStringCellValue();
System.out.println(text);
data[i-1][j] = text;
}
}
//to close the workbook
wb.close();
return data;
}
}
english.properties
#key=value
url=http://leaftaps.com/opentaps/control/main
username=Demosalesmanager
password=crmsfa
#PageName.ElementName.LocatorName=LocatorValue
#LoginPage
LoginPage.Username.Id=username
LoginPage.Password.Id=password
LoginPage.LoginButton.ClassName=decorativeSubmit
#HomePage
HomePage.Logout.Xpath=//input[@class='decorativeSubmit']
HomePage.Crmsfa.LinkText=CRM/SFA
#MyHomePage
MyHomePage.LeadsLink.LinkText=Leads
#MyLeadsPage
MyLeadsPage.CreateLead.LinkText=Create Lead
french.properties
url=http://leaftaps.com/opentaps/control/main
username=DemoCSR
password=crmsfa
#PageName.ElementName.LocatorName=LocatorValue
#LoginPage
LoginPage.Username.Id=username
LoginPage.Password.Id=password
LoginPage.LoginButton.ClassName=decorativeSubmit
#HomePage
HomePage.Logout.ClassName=decorativeSubmit
HomePage.Crmsfa.LinkText=CRM/SFA
#MyHomePage
MyHomePage.LeadsLink.LinkText=Prospects
#MyLeadsPage
MyLeadsPage.CreateLead.LinkText=Cr�er un prospect
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.testleaf</groupId>
<artifactId>PageObjectModel</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-7</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>6.10.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>6.10.0</version>
</dependency>
</dependencies>
</project>
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<parameter name="language" value="english"></parameter>
<test thread-count="5" name="Test" parallel="classes">
<classes>
<class name="testcases.VerifyLoginWithValidData"/>
<class name="testcases.CreateLead"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->