Commit 2ff47552 authored by Arsam Ali's avatar Arsam Ali

Updated POC

parents
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
poc-arsam-2024 @ 9bb090be
Subproject commit 9bb090be293462a39c5dcaa3bcbfbd2f0b31c0d4
<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
<artifactId>POC-</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.10.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>3.0.0-beta2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>3.0.0-beta2</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.11.0</version>
</dependency>
<!-- Cucumber JUnit (to run tests) -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.11.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.1.0-alpha1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.1.0-alpha1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>3.0.0-beta2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.10.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
Feature: Search and navigate to Nisum Technologies career page
Scenario: Searching Nisum on Google and navigating to careers in Pakistan
Given I am on the Google homepage
When I search for "Nisum Technologies"
And I click on the first link of Nisum website
And I hover on the Global Careers button
And I click on the Pakistan Careers button
Then I should be redirected to the Pakistan careers page
package org.example.NisumSearchPage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class NisumPage {
WebDriver driver;
// java.util.logging.Logger initialization
//private static final Logger log = Logger.getLogger(NisumPage.class.getName());
private static final Logger log = LogManager.getLogger(NisumPage.class);
public NisumPage(WebDriver driver) {
this.driver = driver;
log.info("NisumPage object created with WebDriver instance.");
}
By searchBox = By.name("q");
By nisumFirstLink = By.xpath("//a[@href='https://www.nisum.com/']//h3[@class='LC20lb MBeuO DKV0Md'][normalize-space()='Nisum | A Technology Consulting Partner']");
By globalCareersBtn = By.xpath("//span[@class='mega-drop-4 loaded']");
By pakistanCareersBtn = By.xpath("//li[@class='hs-menu-item hs-menu-depth-1 hs-item-has-children']//a[@role='menuitem'][normalize-space()='Pakistan']");
// Search for text
public void searchForText(String searchText) {
try {
log.info("Attempting to search for the term: " + searchText);
WebElement searchField = driver.findElement(searchBox);
searchField.sendKeys(searchText);
log.info("Search text '" + searchText + "' entered in search box.");
searchField.submit();
log.info("Search for '" + searchText + "' submitted.");
} catch (Exception e) {
//log.severe("Error occurred while attempting to search for '" + searchText + "': " + e.getMessage());
}
}
// Click on the first link
public void clickFirstLink() {
log.info("Attempting to click the first link for Nisum website.");
WebElement firstLink = driver.findElement(nisumFirstLink);
firstLink.click();
log.info("Clicked on the first Nisum website link.");
}
// Hover over Global Careers button
public void hoverOverGlobalCareers() {
try {
log.info("Attempting to hover over the Global Careers button.");
WebElement globalCareers = driver.findElement(globalCareersBtn);
Actions actions = new Actions(driver);
// Hovering over the element
actions.moveToElement(globalCareers).perform();
log.info("Hovered over the Global Careers button.");
} catch (Exception e) {
// log.severe("Error occurred while attempting to hover over the Global Careers button: " + e.getMessage());
}
}
public void clickPakistanCareers() {
log.info("Attempting to click on the Pakistan Careers button.");
try {
// Wait for the element to be clickable
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(pakistanCareersBtn));
log.info("Element is clickable. Attempting to scroll into view.");
// Scroll the element into view using JavaScript
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
// Pause briefly to ensure scrolling is completed
Thread.sleep(500);
log.info("Attempting to click using JavaScript.");
// Click the element using JavaScript to avoid interception
((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
log.info("Successfully clicked the Pakistan Careers button.");
} catch (ElementClickInterceptedException e) {
log.error("ElementClickInterceptedException occurred. Retrying with JavaScript click.", e);
// If element is intercepted by another element, retry with JavaScript click
WebElement element = driver.findElement(pakistanCareersBtn);
((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
} catch (InterruptedException e) {
log.error("InterruptedException during scroll wait.", e);
Thread.currentThread().interrupt();
} catch (Exception e) {
log.error("An unexpected error occurred while clicking Pakistan Careers.", e);
}
}
}
package org.example.NisumSearchSteps;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.example.NisumSearchPage.NisumPage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.Objects;
public class NisumSteps {
WebDriver driver;
NisumPage nisumPage;
@Given("I am on the Google homepage")
public void iAmOnTheGoogleHomepage() {
// WebDriver auto-start using WebDriverManager
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.google.com/");
nisumPage = new NisumPage(driver);
}
@When("I search for {string}")
public void iSearchFor(String searchText) {
nisumPage.searchForText(searchText);
}
@When("I click on the first link of Nisum website")
public void iClickOnTheFirstLinkOfNisumWebsite() {
nisumPage.clickFirstLink();
}
@When("I hover on the Global Careers button")
public void iClickOnTheGlobalCareersButton() {
nisumPage.hoverOverGlobalCareers();
}
@When("I click on the Pakistan Careers button")
public void iClickOnThePakistanCareersButton() {
nisumPage.clickPakistanCareers();
}
@Then("I should be redirected to the Pakistan careers page")
public void iShouldBeRedirectedToThePakistanCareersPage() {
String expectedUrl = "https://www.nisum.com/careers/pakistan";
assert(Objects.requireNonNull(driver.getCurrentUrl()).contains("pakistan"));
driver.quit();
}
}
Feature: Search Flights on Sastaticket
Scenario: User selects Karachi as departure and UAE as destination, then searches for flights
Given I am on the Sastaticket homepage
When I click on search bar
When I click on search bar for destination
And I select Karachi as the destination city
And I click on date
And I click on the Search Flight button
Then I should see the available flights
package org.example.SastaTicketPage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.example.NisumSearchPage.NisumPage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class SastaTicketPage {
WebDriver driver;
private static final Logger log = LogManager.getLogger(SastaTicketPage.class);
public SastaTicketPage(WebDriver driver) {
this.driver = driver;
}
public void openHomePage() {
log.info("locator of home page");
driver.get("https://www.sastaticket.pk/");
System.out.println("Opened Sastaticket homepage.");
}
public void IClickOnSearchField()
{
log.info("locator of search field");
driver.findElement(By.xpath("//span[@title='Lahore (LHE)']")).click();
}
public void IClickOnSearchFieldDestination()
{
log.info("locator of Destination field");
driver.findElement(By.xpath("//input[@id='rc_select_1']")).click();
}
public void selectDestinationCity() {
log.info("locator of destination city");
driver.findElement(By.xpath("//h5[normalize-space()='Karachi, Pakistan (KHI)']")).click();
}
public void clickDate() {
driver.findElement(By.xpath("//div[@id='oneway-return-October 2024']//div[contains(@class,'_2k3ukgGnI_cvavzvhX3w4T')][normalize-space()='11']")).click();
}
public void clickSearchFlight() {
driver.findElement(By.xpath("//span[normalize-space()='Search Flights']")).click();
}
}
package org.example.SastaTicketSteps;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.example.SastaTicketPage.SastaTicketPage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SastaTicketSteps {
WebDriver driver;
SastaTicketPage sastaTicketPage;
@Given("I am on the Sastaticket homepage")
public void iAmOnTheSastaTicketHomepage() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().window().maximize();
sastaTicketPage = new SastaTicketPage(driver);
sastaTicketPage.openHomePage();
}
@When("I click on search bar for destination")
public void iSelectDepartureSearchBar() {
sastaTicketPage.IClickOnSearchFieldDestination();
}
@When("I click on search bar")
public void iSelectSearchBar() {
sastaTicketPage.IClickOnSearchField();
}
@When("I select Karachi as the destination city")
public void iSelectDestinationCity() {
sastaTicketPage.selectDestinationCity();
}
@When("I click on the Search Flight button")
public void iClickOnSearchFlightButton() {
sastaTicketPage.clickSearchFlight();
}
@When("I click on date")
public void iClickOnDate() {
sastaTicketPage.clickDate();
}
@Then("I should see the available flights")
public void iShouldSeeTheAvailableFlights() {
// Validation logic to check if flight results appear.
System.out.println("Flight search results displayed.");
driver.quit();
}
}
name=PropertiesConfig
property.filename = logs
appends = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/logs.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
rootLogger.level = debug
rootLogger.appenderRefs = file
rootLogger.appenderRef.stdout.ref = LOGFILE
\ No newline at end of file
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level - %msg%n"/>
</Console>
<File name="File" fileName="/Users/arsamali/Documents/IdeaProjects/POC-Arsam/src/main/resources/log4j2.log" append="false">
<PatternLayout>
<Pattern>%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<!-- Logger for NisumPage class, can be adjusted as per package -->
<Logger name="com.org.example" level="info" additivity="true">
<AppenderRef ref="Console"/>
</Logger>
<!-- Root logger with appender reference to File -->
<Root level="info">
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment