SlideShare a Scribd company logo
Be#er Page Object Handling with
Loadable Component Pa#ern
Sargis Sargsyan
‹ ›2
Loadable
Component
4
Introduction
1
Page Object
Pattern
2
Wait in
Selenium
3
Slow Loadable
Component
5
Common
Failures
6
Q&A
7
Main Topics
‹ ›3
Demos
• Demos are in Java!
• Everything we discuss is applicable strongly-
typed languages (e.g. C#)
• Most things are applicable to dynamically-
typed languages (e.g. Ruby, Python, Perl)
‹ ›4
Demos will use also
• Maven
• TestNG
• Selenium
Page Object
Pattern
`
‹ ›6
What is Page Object Pattern
• Page Objects Framework is a design pattern which has become
popular in test automation for making easy test maintenance and
reducing code duplication. This design pattern, to interact or work
with a web page, we have an object-oriented class for that web. Then
the tests calls the methods of this page class by creating a page
object whenever they need to interact or work with that web page.
7
q 1Z
a
‹ ›7
What is Page Object Pattern
• For example web application or website that has multiple web pages
and each page offers different services and functionalities.
• There are different pages like
• Home page,
• Login page,
• Registration page.
• Each page offers a specific set of services. Services offered by
Login page Login by entering user name and password We can
get page title A class to represent Login page is like
‹ ›8
What is Page Object Pattern
• In page objects framework:
• Each page in the web application/website we consider as an
object.
• Each webpage in the web application is represented by a Class
• Each service/functionality offered by a webpage is represented
by a method in the respective page class
We will be having our tests calling these methods by creating objects
of page classes
‹ ›9
Why we should use Page Objects Pattern
1 Promotes reuse and refuses duplication
2 Makes tests more readable and robust
3 Makes tests less brittle
4 Improves maintainability, Particularly when there is frequent changes
5 If UI change, tests don’t need to be change, only the code within the page object need to be changed.
6 Handle of each page using its instance
‹ ›10
How does it structured?
• Each page is defined as it’s own class.
• Actions (including navigation) are represented as functions for a class.
• Each function can return a new Page object (navigating between
pages),
• Tests only talk to the page objects.
• Page objects only talk to the Base Object.
• Base Object talks to only driver.
• Elements on the page are stored as variables for the page object
‹ ›11
Selenium Model
Test Case 1
Test Case 2
Test Case …
ReportSelenium
Web app
Web PageWeb PageWeb PageWeb PageBrowsers
‹ ›12
Page Object Model
Page Objects
Test Case 1
Test Case 2
Test Case …
Report
Selenium
Web app
Web PageWeb PageWeb PageWeb PageBrowsers
‹ ›13
Page Object Model & Base Page
Page Objects
Test Case 1
Test Case 2
Test Case …
Report
Base Page
Selenium
Web app
Web PageWeb PageWeb PageWeb PageBrowsers
‹ ›14
Architecture
Framework/
PageObjectsL
Browser/Web
Application
Ħ
Selenium Tests X
Selenium
Web Driver
Ä
‹ ›15
How it looks like
‹ ›16
Base Object Page
‹ ›17
Base Object Page
‹ ›18
Selenium Setup
‹ ›19
Base Test
‹ ›20
Test
Wait in
Selenium
p
‹ ›22
Why to wait?
• When automating an application you must wait for a transaction to
complete before proceeding to your next action.
• Sleeps should never be a version for an alternative to waits. Sleeps
will ALWAYS wait the exact amount of time even if the application is
ready to continue the test.
‹ ›23
Wait as long as necessary
• We should wait as long as necessary which saves you precious time
on your execution.
• Selenium Offers 3 wait types:
• Implicit Waits
• Explicit Waits
• Fluent Waits
[
‹ ›24
Implicit Waits
• Implicit waits apply globally to every find element call.
• undocumented and practically undefined behavior
• Runs in the remote part of selenium (the part controlling the browser).
• Only works on find element(s) methods.
• Returns either element found or (after timeout) not found.
• If checking for absence of element must always wait until timeout.
• Cannot be customized other than global timeout.
• Best practice is to not use implicit waits if possible.
‹ ›25
Explicit Waits
• Documented and defined behavior
• Explicit waits ping the application every 500ms checking for the
condition of the wait to be true
• Runs in the local part of selenium (in the language of your code)
• Works on any condition you can think of
• Returns either success or timeout error
• Can define absence of element as success condition
• Can customize delay between retries and exceptions to ignore
‹ ›26
Explicit Waits
‹ ›27
Fluent Waits
• Fluent waits require that you define the wait between checks of the
application for an object/condition as well as the overall timeout of
the transaction. Additionally you must tell fluent waits not to throw an
exception when they don’t find an object as best practice.
Loadable
Component
p
‹ ›29
What is the LoadableComponent?
• The LoadableComponent is a base class that aims to make writing
PageObjects less painful. It does this by providing a standard way of
ensuring that pages are loaded and providing hooks to make
debugging the failure of a page to load easier. You can use it to help
reduce the amount of boilerplate code in your tests, which in turn
make maintaining your tests less tiresome.
• There is currently an implementation in Java that ships as part of
Selenium 2, but the approach used is simple enough to be
implemented in any language.
‹ ›30
What is it?
• LoadableComponent is a base class in Selenium, which means that
you can simply define your Page Objects as an extension of the
LoadableComponent class. So, for example, we can simply define a
LoginPage object as follows:
‹ ›31
How to use
• The Loadable Component Pattern also allows you to model your
page objects as a tree of nested components.
• Allows better way to manage navigations between pages
• Uses the “load” method that is used to navigate to the page and the
“isLoaded” method which is used to determine if we are on the right
page.
‹ ›32
LoadableComponent class
‹ ›33
load() and inLoaded() methods
‹ ›34
PageLoadHelper Class
‹ ›35
isLoaded() with PageLoadHelper
‹ ›36
Extend LoadableComponent in Base Object class
‹ ›37
Custom Loadable Component Implementation
Slow
Loadable
Component
`
‹ ›39
What is the SlowLoadableComponent?
• The SlowLoadableComponent is a sub class of LoadableComponent.
• get() for SlowLoadableComponent will ensure that the component is
currently loaded.Ensure that the component is currently loaded.
• isError() method will check for well known error cases, which would
mean that loading has finished, but an error condition was seen.
• waitFor() method will wait to run the next time.
After a call to load(), the isLoaded() method will continue to fail until the
component has fully loaded.
‹ ›40
SlowLoadableComponent class
‹ ›41
SlowLoadableComponent Implementation
Common
Failures
l
‹ ›43
Recorded Brittle Test
‹ ›44
Not Building a Framework
‹ ›45
Use unique selectors
‹ ›46
Do not use Retry
y
‹ ›47
Do not try to Automate Hard Things
‹ ›48
Run test in Continuous Integration
1 Have a plan and stick to it
2 Run test as part of build
3 Run test locally
4 Report results
5 Break builds
✉ !
EMAIL TWITTER LINKEDIN
sargis.sargsyan@live.com mrsargsyan sargissargsyan
Contacts
ą
Thank You!

More Related Content

What's hot (20)

Protractor Tutorial Quality in Agile 2015
Protractor Tutorial Quality in Agile 2015
Andrew Eisenberg
 
Introduction to Protractor
Introduction to Protractor
Florian Fesseler
 
AngularJS and Protractor
AngularJS and Protractor
Filipe Falcão
 
An Introduction to AngularJS End to End Testing using Protractor
An Introduction to AngularJS End to End Testing using Protractor
Cubet Techno Labs
 
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Codemotion
 
Front-End Testing: Demystified
Front-End Testing: Demystified
Seth McLaughlin
 
Protractor training
Protractor training
Sergiy Stotskiy
 
Automated Testing using JavaScript
Automated Testing using JavaScript
Simon Guest
 
ForwardJS 2017 - Fullstack end-to-end Test Automation with node.js
ForwardJS 2017 - Fullstack end-to-end Test Automation with node.js
Mek Srunyu Stittri
 
Automated Testing in Angular Slides
Automated Testing in Angular Slides
Jim Lynch
 
Testing Code.org's Interactive CS Curriculum
Testing Code.org's Interactive CS Curriculum
Brian Jordan
 
Capybara testing
Capybara testing
Futureworkz
 
Automated Web Testing using JavaScript
Automated Web Testing using JavaScript
Simon Guest
 
Introduction To Web Application Testing
Introduction To Web Application Testing
Ynon Perek
 
Protractor end-to-end testing framework for angular js
Protractor end-to-end testing framework for angular js
codeandyou forums
 
Node.js and Selenium Webdriver, a journey from the Java side
Node.js and Selenium Webdriver, a journey from the Java side
Mek Srunyu Stittri
 
Making cross browser tests beautiful
Making cross browser tests beautiful
Meaghan Lewis
 
Join the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.js
Seth McLaughlin
 
Browser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.js
Luís Bastião Silva
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
Work at Play
 
Protractor Tutorial Quality in Agile 2015
Protractor Tutorial Quality in Agile 2015
Andrew Eisenberg
 
Introduction to Protractor
Introduction to Protractor
Florian Fesseler
 
AngularJS and Protractor
AngularJS and Protractor
Filipe Falcão
 
An Introduction to AngularJS End to End Testing using Protractor
An Introduction to AngularJS End to End Testing using Protractor
Cubet Techno Labs
 
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Codemotion
 
Front-End Testing: Demystified
Front-End Testing: Demystified
Seth McLaughlin
 
Automated Testing using JavaScript
Automated Testing using JavaScript
Simon Guest
 
ForwardJS 2017 - Fullstack end-to-end Test Automation with node.js
ForwardJS 2017 - Fullstack end-to-end Test Automation with node.js
Mek Srunyu Stittri
 
Automated Testing in Angular Slides
Automated Testing in Angular Slides
Jim Lynch
 
Testing Code.org's Interactive CS Curriculum
Testing Code.org's Interactive CS Curriculum
Brian Jordan
 
Capybara testing
Capybara testing
Futureworkz
 
Automated Web Testing using JavaScript
Automated Web Testing using JavaScript
Simon Guest
 
Introduction To Web Application Testing
Introduction To Web Application Testing
Ynon Perek
 
Protractor end-to-end testing framework for angular js
Protractor end-to-end testing framework for angular js
codeandyou forums
 
Node.js and Selenium Webdriver, a journey from the Java side
Node.js and Selenium Webdriver, a journey from the Java side
Mek Srunyu Stittri
 
Making cross browser tests beautiful
Making cross browser tests beautiful
Meaghan Lewis
 
Join the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.js
Seth McLaughlin
 
Browser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.js
Luís Bastião Silva
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
Work at Play
 

Viewers also liked (20)

Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014
Oren Rubin
 
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Iakiv Kramarenko
 
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Alan Richardson
 
Using The Page Object Pattern
Using The Page Object Pattern
Dante Briones
 
Perils of Page-Object Pattern
Perils of Page-Object Pattern
Anand Bagmar
 
DSL, Page Object and Selenium – a way to reliable functional tests
DSL, Page Object and Selenium – a way to reliable functional tests
Mikalai Alimenkou
 
Beyond Page Objects
Beyond Page Objects
Dante Briones
 
Automation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and Beyond
Alan Richardson
 
[Automation] Trick-or-Treat Style
[Automation] Trick-or-Treat Style
Adam Goucher
 
BDD, ATDD, Page Objects: The Road to Sustainable Web Testing
BDD, ATDD, Page Objects: The Road to Sustainable Web Testing
John Ferguson Smart Limited
 
Nakal think test_2015
Nakal think test_2015
Rajdeep Varma
 
Testing desktop apps with selenium
Testing desktop apps with selenium
Filip Braun
 
Appium
Appium
Deepshikha Singh
 
Advanced Selenium Workshop
Advanced Selenium Workshop
Clever Moe
 
Advanced automated visual testing with Selenium
Advanced automated visual testing with Selenium
adamcarmi
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようず
Oda Shinsuke
 
Serenity and the Journey Pattern
Serenity and the Journey Pattern
John Ferguson Smart Limited
 
Selenium conference, 2016
Selenium conference, 2016
Pooja Shah
 
Selenium for Jobseekers
Selenium for Jobseekers
Seshu Madhav Chaturvedula
 
A journey beyond the page object pattern
A journey beyond the page object pattern
RiverGlide
 
Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014
Oren Rubin
 
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Iakiv Kramarenko
 
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Alan Richardson
 
Using The Page Object Pattern
Using The Page Object Pattern
Dante Briones
 
Perils of Page-Object Pattern
Perils of Page-Object Pattern
Anand Bagmar
 
DSL, Page Object and Selenium – a way to reliable functional tests
DSL, Page Object and Selenium – a way to reliable functional tests
Mikalai Alimenkou
 
Automation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and Beyond
Alan Richardson
 
[Automation] Trick-or-Treat Style
[Automation] Trick-or-Treat Style
Adam Goucher
 
BDD, ATDD, Page Objects: The Road to Sustainable Web Testing
BDD, ATDD, Page Objects: The Road to Sustainable Web Testing
John Ferguson Smart Limited
 
Nakal think test_2015
Nakal think test_2015
Rajdeep Varma
 
Testing desktop apps with selenium
Testing desktop apps with selenium
Filip Braun
 
Advanced Selenium Workshop
Advanced Selenium Workshop
Clever Moe
 
Advanced automated visual testing with Selenium
Advanced automated visual testing with Selenium
adamcarmi
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようず
Oda Shinsuke
 
Selenium conference, 2016
Selenium conference, 2016
Pooja Shah
 
A journey beyond the page object pattern
A journey beyond the page object pattern
RiverGlide
 
Ad

Similar to Better Page Object Handling with Loadable Component Pattern (20)

Better Page Object Handling with Loadable Component Pattern - SQA Days 20, Be...
Better Page Object Handling with Loadable Component Pattern - SQA Days 20, Be...
Sargis Sargsyan
 
Marcin Wasilczyk - Page objects with selenium
Marcin Wasilczyk - Page objects with selenium
Trójmiejska Grupa Testerska
 
How To Use Selenium Successfully
How To Use Selenium Successfully
Dave Haeffner
 
How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)
Sauce Labs
 
How to use selenium successfully
How to use selenium successfully
TEST Huddle
 
How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)
Dave Haeffner
 
Selenium Tips & Tricks, presented at the Tel Aviv Selenium Meetup
Selenium Tips & Tricks, presented at the Tel Aviv Selenium Meetup
Dave Haeffner
 
Mastering Test Automation: How to Use Selenium Successfully
Mastering Test Automation: How to Use Selenium Successfully
Applitools
 
Dave Haeffner's Proven Method to Grading the Quality of Selenium Tests
Dave Haeffner's Proven Method to Grading the Quality of Selenium Tests
Applitools
 
Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Roy de Kleijn
 
Getting Started with Selenium
Getting Started with Selenium
Dave Haeffner
 
Mastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium Successfully
SpringPeople
 
How To Grade Your Selenium Tests by Dave Haeffner - Sauce Labs Webinar
How To Grade Your Selenium Tests by Dave Haeffner - Sauce Labs Webinar
Sauce Labs
 
FluentSelenium Presentation Code Camp09
FluentSelenium Presentation Code Camp09
Pyxis Technologies
 
Automation with Selenium Presented by Quontra Solutions
Automation with Selenium Presented by Quontra Solutions
Quontra Solutions
 
Web UI Tests: Introduce UI tests using Selenium
Web UI Tests: Introduce UI tests using Selenium
Peyman Fakharian
 
Designing for the internet - Page Objects for the Real World
Designing for the internet - Page Objects for the Real World
Qualitest
 
Selenium withnet
Selenium withnet
Vlad Maniak
 
Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6
Marakana Inc.
 
2010 07-18.wa.rails tdd-6
2010 07-18.wa.rails tdd-6
Marakana Inc.
 
Better Page Object Handling with Loadable Component Pattern - SQA Days 20, Be...
Better Page Object Handling with Loadable Component Pattern - SQA Days 20, Be...
Sargis Sargsyan
 
How To Use Selenium Successfully
How To Use Selenium Successfully
Dave Haeffner
 
How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)
Sauce Labs
 
How to use selenium successfully
How to use selenium successfully
TEST Huddle
 
How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)
Dave Haeffner
 
Selenium Tips & Tricks, presented at the Tel Aviv Selenium Meetup
Selenium Tips & Tricks, presented at the Tel Aviv Selenium Meetup
Dave Haeffner
 
Mastering Test Automation: How to Use Selenium Successfully
Mastering Test Automation: How to Use Selenium Successfully
Applitools
 
Dave Haeffner's Proven Method to Grading the Quality of Selenium Tests
Dave Haeffner's Proven Method to Grading the Quality of Selenium Tests
Applitools
 
Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Roy de Kleijn
 
Getting Started with Selenium
Getting Started with Selenium
Dave Haeffner
 
Mastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium Successfully
SpringPeople
 
How To Grade Your Selenium Tests by Dave Haeffner - Sauce Labs Webinar
How To Grade Your Selenium Tests by Dave Haeffner - Sauce Labs Webinar
Sauce Labs
 
FluentSelenium Presentation Code Camp09
FluentSelenium Presentation Code Camp09
Pyxis Technologies
 
Automation with Selenium Presented by Quontra Solutions
Automation with Selenium Presented by Quontra Solutions
Quontra Solutions
 
Web UI Tests: Introduce UI tests using Selenium
Web UI Tests: Introduce UI tests using Selenium
Peyman Fakharian
 
Designing for the internet - Page Objects for the Real World
Designing for the internet - Page Objects for the Real World
Qualitest
 
Selenium withnet
Selenium withnet
Vlad Maniak
 
Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6
Marakana Inc.
 
2010 07-18.wa.rails tdd-6
2010 07-18.wa.rails tdd-6
Marakana Inc.
 
Ad

More from Sargis Sargsyan (12)

Let’s Talk About Quality Engineering
Let’s Talk About Quality Engineering
Sargis Sargsyan
 
Your Road to Quality Assurance
Your Road to Quality Assurance
Sargis Sargsyan
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Sargis Sargsyan
 
Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019
Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019
Sargis Sargsyan
 
Run your Appium tests using Docker Android - AppiumConf 2019
Run your Appium tests using Docker Android - AppiumConf 2019
Sargis Sargsyan
 
How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...
How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...
Sargis Sargsyan
 
Easy Setup for Parallel Test Execution with Selenium Docker
Easy Setup for Parallel Test Execution with Selenium Docker
Sargis Sargsyan
 
Make Your Selenium Suite Faster and Reliable: Test Setup with REST APIs - SQA...
Make Your Selenium Suite Faster and Reliable: Test Setup with REST APIs - SQA...
Sargis Sargsyan
 
Test Data Preparation: Tips and Tricks - SQA Days 22 - Saint Petersburg
Test Data Preparation: Tips and Tricks - SQA Days 22 - Saint Petersburg
Sargis Sargsyan
 
Agile Testing
Agile Testing
Sargis Sargsyan
 
Web Application Testing with Selenium
Web Application Testing with Selenium
Sargis Sargsyan
 
QA MeetUp Yerevan - Aug 25
QA MeetUp Yerevan - Aug 25
Sargis Sargsyan
 
Let’s Talk About Quality Engineering
Let’s Talk About Quality Engineering
Sargis Sargsyan
 
Your Road to Quality Assurance
Your Road to Quality Assurance
Sargis Sargsyan
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Sargis Sargsyan
 
Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019
Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019
Sargis Sargsyan
 
Run your Appium tests using Docker Android - AppiumConf 2019
Run your Appium tests using Docker Android - AppiumConf 2019
Sargis Sargsyan
 
How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...
How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...
Sargis Sargsyan
 
Easy Setup for Parallel Test Execution with Selenium Docker
Easy Setup for Parallel Test Execution with Selenium Docker
Sargis Sargsyan
 
Make Your Selenium Suite Faster and Reliable: Test Setup with REST APIs - SQA...
Make Your Selenium Suite Faster and Reliable: Test Setup with REST APIs - SQA...
Sargis Sargsyan
 
Test Data Preparation: Tips and Tricks - SQA Days 22 - Saint Petersburg
Test Data Preparation: Tips and Tricks - SQA Days 22 - Saint Petersburg
Sargis Sargsyan
 
Web Application Testing with Selenium
Web Application Testing with Selenium
Sargis Sargsyan
 
QA MeetUp Yerevan - Aug 25
QA MeetUp Yerevan - Aug 25
Sargis Sargsyan
 

Recently uploaded (20)

FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
Safe Software
 
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
 
The State of Web3 Industry- Industry Report
The State of Web3 Industry- Industry Report
Liveplex
 
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance
 
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
AmirStern2
 
June Patch Tuesday
June Patch Tuesday
Ivanti
 
Providing an OGC API Processes REST Interface for FME Flow
Providing an OGC API Processes REST Interface for FME Flow
Safe Software
 
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
 
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
Bridging the divide: A conversation on tariffs today in the book industry - T...
Bridging the divide: A conversation on tariffs today in the book industry - T...
BookNet Canada
 
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Safe Software
 
Data Validation and System Interoperability
Data Validation and System Interoperability
Safe Software
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
Oracle Cloud Infrastructure AI Foundations
Oracle Cloud Infrastructure AI Foundations
VICTOR MAESTRE RAMIREZ
 
Oracle Cloud and AI Specialization Program
Oracle Cloud and AI Specialization Program
VICTOR MAESTRE RAMIREZ
 
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Shashikant Jagtap
 
Floods in Valencia: Two FME-Powered Stories of Data Resilience
Floods in Valencia: Two FME-Powered Stories of Data Resilience
Safe Software
 
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc
 
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
SOFTTECHHUB
 
Supporting the NextGen 911 Digital Transformation with FME
Supporting the NextGen 911 Digital Transformation with FME
Safe Software
 
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
Safe Software
 
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
 
The State of Web3 Industry- Industry Report
The State of Web3 Industry- Industry Report
Liveplex
 
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance
 
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
AmirStern2
 
June Patch Tuesday
June Patch Tuesday
Ivanti
 
Providing an OGC API Processes REST Interface for FME Flow
Providing an OGC API Processes REST Interface for FME Flow
Safe Software
 
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
 
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
Bridging the divide: A conversation on tariffs today in the book industry - T...
Bridging the divide: A conversation on tariffs today in the book industry - T...
BookNet Canada
 
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Safe Software
 
Data Validation and System Interoperability
Data Validation and System Interoperability
Safe Software
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
Oracle Cloud Infrastructure AI Foundations
Oracle Cloud Infrastructure AI Foundations
VICTOR MAESTRE RAMIREZ
 
Oracle Cloud and AI Specialization Program
Oracle Cloud and AI Specialization Program
VICTOR MAESTRE RAMIREZ
 
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Shashikant Jagtap
 
Floods in Valencia: Two FME-Powered Stories of Data Resilience
Floods in Valencia: Two FME-Powered Stories of Data Resilience
Safe Software
 
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc
 
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
SOFTTECHHUB
 
Supporting the NextGen 911 Digital Transformation with FME
Supporting the NextGen 911 Digital Transformation with FME
Safe Software
 

Better Page Object Handling with Loadable Component Pattern

  • 1. Be#er Page Object Handling with Loadable Component Pa#ern Sargis Sargsyan
  • 2. ‹ ›2 Loadable Component 4 Introduction 1 Page Object Pattern 2 Wait in Selenium 3 Slow Loadable Component 5 Common Failures 6 Q&A 7 Main Topics
  • 3. ‹ ›3 Demos • Demos are in Java! • Everything we discuss is applicable strongly- typed languages (e.g. C#) • Most things are applicable to dynamically- typed languages (e.g. Ruby, Python, Perl)
  • 4. ‹ ›4 Demos will use also • Maven • TestNG • Selenium
  • 6. ‹ ›6 What is Page Object Pattern • Page Objects Framework is a design pattern which has become popular in test automation for making easy test maintenance and reducing code duplication. This design pattern, to interact or work with a web page, we have an object-oriented class for that web. Then the tests calls the methods of this page class by creating a page object whenever they need to interact or work with that web page. 7 q 1Z a
  • 7. ‹ ›7 What is Page Object Pattern • For example web application or website that has multiple web pages and each page offers different services and functionalities. • There are different pages like • Home page, • Login page, • Registration page. • Each page offers a specific set of services. Services offered by Login page Login by entering user name and password We can get page title A class to represent Login page is like
  • 8. ‹ ›8 What is Page Object Pattern • In page objects framework: • Each page in the web application/website we consider as an object. • Each webpage in the web application is represented by a Class • Each service/functionality offered by a webpage is represented by a method in the respective page class We will be having our tests calling these methods by creating objects of page classes
  • 9. ‹ ›9 Why we should use Page Objects Pattern 1 Promotes reuse and refuses duplication 2 Makes tests more readable and robust 3 Makes tests less brittle 4 Improves maintainability, Particularly when there is frequent changes 5 If UI change, tests don’t need to be change, only the code within the page object need to be changed. 6 Handle of each page using its instance
  • 10. ‹ ›10 How does it structured? • Each page is defined as it’s own class. • Actions (including navigation) are represented as functions for a class. • Each function can return a new Page object (navigating between pages), • Tests only talk to the page objects. • Page objects only talk to the Base Object. • Base Object talks to only driver. • Elements on the page are stored as variables for the page object
  • 11. ‹ ›11 Selenium Model Test Case 1 Test Case 2 Test Case … ReportSelenium Web app Web PageWeb PageWeb PageWeb PageBrowsers
  • 12. ‹ ›12 Page Object Model Page Objects Test Case 1 Test Case 2 Test Case … Report Selenium Web app Web PageWeb PageWeb PageWeb PageBrowsers
  • 13. ‹ ›13 Page Object Model & Base Page Page Objects Test Case 1 Test Case 2 Test Case … Report Base Page Selenium Web app Web PageWeb PageWeb PageWeb PageBrowsers
  • 15. ‹ ›15 How it looks like
  • 22. ‹ ›22 Why to wait? • When automating an application you must wait for a transaction to complete before proceeding to your next action. • Sleeps should never be a version for an alternative to waits. Sleeps will ALWAYS wait the exact amount of time even if the application is ready to continue the test.
  • 23. ‹ ›23 Wait as long as necessary • We should wait as long as necessary which saves you precious time on your execution. • Selenium Offers 3 wait types: • Implicit Waits • Explicit Waits • Fluent Waits [
  • 24. ‹ ›24 Implicit Waits • Implicit waits apply globally to every find element call. • undocumented and practically undefined behavior • Runs in the remote part of selenium (the part controlling the browser). • Only works on find element(s) methods. • Returns either element found or (after timeout) not found. • If checking for absence of element must always wait until timeout. • Cannot be customized other than global timeout. • Best practice is to not use implicit waits if possible.
  • 25. ‹ ›25 Explicit Waits • Documented and defined behavior • Explicit waits ping the application every 500ms checking for the condition of the wait to be true • Runs in the local part of selenium (in the language of your code) • Works on any condition you can think of • Returns either success or timeout error • Can define absence of element as success condition • Can customize delay between retries and exceptions to ignore
  • 27. ‹ ›27 Fluent Waits • Fluent waits require that you define the wait between checks of the application for an object/condition as well as the overall timeout of the transaction. Additionally you must tell fluent waits not to throw an exception when they don’t find an object as best practice.
  • 29. ‹ ›29 What is the LoadableComponent? • The LoadableComponent is a base class that aims to make writing PageObjects less painful. It does this by providing a standard way of ensuring that pages are loaded and providing hooks to make debugging the failure of a page to load easier. You can use it to help reduce the amount of boilerplate code in your tests, which in turn make maintaining your tests less tiresome. • There is currently an implementation in Java that ships as part of Selenium 2, but the approach used is simple enough to be implemented in any language.
  • 30. ‹ ›30 What is it? • LoadableComponent is a base class in Selenium, which means that you can simply define your Page Objects as an extension of the LoadableComponent class. So, for example, we can simply define a LoginPage object as follows:
  • 31. ‹ ›31 How to use • The Loadable Component Pattern also allows you to model your page objects as a tree of nested components. • Allows better way to manage navigations between pages • Uses the “load” method that is used to navigate to the page and the “isLoaded” method which is used to determine if we are on the right page.
  • 33. ‹ ›33 load() and inLoaded() methods
  • 35. ‹ ›35 isLoaded() with PageLoadHelper
  • 36. ‹ ›36 Extend LoadableComponent in Base Object class
  • 37. ‹ ›37 Custom Loadable Component Implementation
  • 39. ‹ ›39 What is the SlowLoadableComponent? • The SlowLoadableComponent is a sub class of LoadableComponent. • get() for SlowLoadableComponent will ensure that the component is currently loaded.Ensure that the component is currently loaded. • isError() method will check for well known error cases, which would mean that loading has finished, but an error condition was seen. • waitFor() method will wait to run the next time. After a call to load(), the isLoaded() method will continue to fail until the component has fully loaded.
  • 44. ‹ ›44 Not Building a Framework
  • 45. ‹ ›45 Use unique selectors
  • 46. ‹ ›46 Do not use Retry y
  • 47. ‹ ›47 Do not try to Automate Hard Things
  • 48. ‹ ›48 Run test in Continuous Integration 1 Have a plan and stick to it 2 Run test as part of build 3 Run test locally 4 Report results 5 Break builds
  • 49. ✉ ! EMAIL TWITTER LINKEDIN [email protected] mrsargsyan sargissargsyan Contacts ą Thank You!