Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
POC-Arsam-Sameer-2024 Updated
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Arsam Ali
POC-Arsam-Sameer-2024 Updated
Commits
2ff47552
Commit
2ff47552
authored
Oct 10, 2024
by
Arsam Ali
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated POC
parents
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
478 additions
and
0 deletions
+478
-0
.gitignore
.gitignore
+39
-0
poc-arsam-2024
poc-arsam-2024
+1
-0
pom.xml
pom.xml
+96
-0
NisumSearch.feature
...n/java/org/example/NisumSearchFeature/NisumSearch.feature
+9
-0
NisumPage.java
src/main/java/org/example/NisumSearchPage/NisumPage.java
+106
-0
NisumSteps.java
src/main/java/org/example/NisumSearchSteps/NisumSteps.java
+54
-0
SastaTicket.feature
...n/java/org/example/SastaTicketFeature/SastaTicket.feature
+10
-0
SastaTicketPage.java
...ain/java/org/example/SastaTicketPage/SastaTicketPage.java
+56
-0
SastaTicketSteps.java
...n/java/org/example/SastaTicketSteps/SastaTicketSteps.java
+64
-0
log4j2.log
src/main/resources/log4j2.log
+0
-0
log4j2.properties
src/main/resources/log4j2.properties
+19
-0
log4j2.xml
src/main/resources/log4j2.xml
+24
-0
No files found.
.gitignore
0 → 100644
View file @
2ff47552
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
pom.xml
0 → 100644
View file @
2ff47552
<?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
src/main/java/org/example/NisumSearchFeature/NisumSearch.feature
0 → 100644
View file @
2ff47552
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
src/main/java/org/example/NisumSearchPage/NisumPage.java
0 → 100644
View file @
2ff47552
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
);
}
}
}
src/main/java/org/example/NisumSearchSteps/NisumSteps.java
0 → 100644
View file @
2ff47552
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
();
}
}
src/main/java/org/example/SastaTicketFeature/SastaTicket.feature
0 → 100644
View file @
2ff47552
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
src/main/java/org/example/SastaTicketPage/SastaTicketPage.java
0 → 100644
View file @
2ff47552
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
();
}
}
src/main/java/org/example/SastaTicketSteps/SastaTicketSteps.java
0 → 100644
View file @
2ff47552
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
();
}
}
src/main/resources/log4j2.log
0 → 100644
View file @
2ff47552
src/main/resources/log4j2.properties
0 → 100644
View file @
2ff47552
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
src/main/resources/log4j2.xml
0 → 100644
View file @
2ff47552
<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>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment