SlideShare a Scribd company logo
Selenium Sandwich Part 1:
Automating Selenium Sequences
Steven Lembark
Workhorse Computing
lembark@wrkhors.com
Testing web front ends is different
Much of the testing is manual.
Tests validate multiple systems at once.
Often cannot test without a running back end.
Here is the first installment of a better way.
Been there?
Hey where did that come from? Check the
logs...
Can't use that database: dropped it last
week...
Server isn't using your version any more...
Q: Why is it this bad?
A: Because you aren't testing the front end.
Q: Why is it this bad?
A: Because you aren't testing the front end.
Q: Where do you get the content for testing?
Q: Why is it this bad?
A: Because you aren't testing the front end.
Q: Where do you get the content for testing?
A: The back end.
Q: Why is it this bad?
A: Because you aren't testing the front end.
Q: Where do you get the content for testing?
A: The back end.
You are testing both ends at once.
Q: Why is it this bad?
A: Because you aren't testing the front end.
Q: Where do you get the content for testing?
A: The back end.
You are testing both ends at once.
That makes front ends different.
Testing just the front end
Isolation and repeatiblity are key to testing.
Selenium helps with repeatability.
Catch: Hardwired code required for each test.
Example Selenium::Driver code
Q: Is there a better way?
A: Data driven code.
With Object::Exercise code like:
$object->method( @argz )->...
Becomes
[ $method => @argz ], ...
Daisy-chain logic
find_element returns an object:
$driver->find_element( ... )->click;
$driver
->find_element( ... )
->send_keys( ... )
->send_keys( KEY->{ enter } );
False Lazyness
Calls to “find_element” use the element.
Hardwiring multiple calls is extra work.
Why not “find_and_click”, “find_and_type”?
A: Selenium interface doesn't declare them.
Q: Why can't we do better than the interface?
True Lazyness
Adding high-level abstractions is easy.
Wrap the object.
Add an AUTOLOAD.
Redispatch low-level calls.
Selenium::Easy
What would you use for a wrapper object?
Selenium::Easy
What would you use for a wrapper object?
Usual suggestion:
{ wrapped => $object }
Selenium::Easy
What would you use for a wrapper object?
Usual suggestion:
{ wrapped => $object }
Downsides: Bulky, Slow, Klutzy->{ syntax }
Simpler wrapper
sub construct
{
my $proto = shift;
bless
( my $obj = '' ),
blessed $proto || $proto
}
Simpler packaging
sub initialize
{
state $pkg
= 'Remote::Selenium::Driver';
my $wrapper = shift;
$$wrapper = $pkg->new( @_ );
$wrapper
}
High-level methods
sub find_and_key
{
my ( $wrapper, $find ) = splice @_,0,2;
my $found
= $$wrapper->find_element( @$find );
$found->send_key( $_ )
for @_, KEYS->{ enter };
}
High-level methods
Dispatching low-level methods
our $AUTOLOAD = '';
AUTOLOAD
{
my $wrapper = shift;
my $i = 1 + rindex $AUTOLOAD, ':';
my $name = substr $AUTOLOAD, $i;
$$wrapper->$name( @_ )
}
Q: Why not just drive a new class?
A: Avoid knowing base class structure.
AUTOLOAD and $$wrapper
have no idea what the wrapped object is.
Replacing custom code
Daisy chains now become single-steps:
$wrapper->find_and_key( ... );
$wrapper->find_and_click( ... );
Replacing custom code
Passed to Object::Exercise as:
$wrapper->$exercise
(
[ [ find_and_key => ... ], ... ],
[ [ find_and_click => ... ], ... ],
);
Replacing custom code
Or with YAML like:
---
-
- - find_and_key
- ...
-
- - find_and_click
- ...
Data-driven equivalent
# use Object::Exercise;
# $wrapper->$exercise( $yaml );
---
-
# verbose speicfic to "prepare_test" block.
# prepare test ignores return values.
- verbose
- - prepare_test
- - set_implicit_wait_timeout
- 50000
- - get
- http://www.google.com
-
- - find_send_keys
- - q
- name
- YAPC Salt Lake City
-
- - find_click
- '#rso li h3 a'
- css
Data-driven equivalent
-
- regex
- - get_title
- YAPC
- Title includes 'YAPC'
-
- - find_click
- Talks and Schedule
-
- - find_click
- Schedule
-
- - find_click
- Wednesday
-
- - find_click
- Selenium
- partial_link_text
-
- regex
- - get_title
- Selenium
- Title includes 'Selenium'
So ends our first episode...
Developing wrapper classes in Perl is trivial.
Repeatable test metadata is simple enough:
Use high-level calls with Selenium.
Coming up next: Isolating the front end.
=head1 SEE ALSO
Good general talk on Selenium.
Introduces the Selenium Playground on
github:
<http://www.slidesearchengine.com/slide/
testing-your-website-with-selenium-perl>
=head1 SEE ALSO
Overview of Object::Exercise
<http://www.slideshare.net/lembark/object-
exercise?qid=6ed2ecf1-2520-4d4a-b6fa-
545b95693ebc&v=qf1&b=&from_search=1>
Current documentation:
<http://search.cpan.org/~lembark/Object-
Exercise-3.02/lib/Object/Exercise.pm>
Ad

Recommended

PDF
Selenium sandwich-2
Workhorse Computing
 
PDF
Selenium sandwich-3: Being where you aren't.
Workhorse Computing
 
PDF
Lies, Damn Lies, and Benchmarks
Workhorse Computing
 
PDF
Designing net-aws-glacier
Workhorse Computing
 
PDF
Getting testy with Perl
Workhorse Computing
 
PDF
A Gentle Introduction to Event Loops
deepfountainconsulting
 
PDF
RSpec 2 Best practices
Andrea Reginato
 
KEY
Mojolicious - A new hope
Marcus Ramberg
 
PDF
Writing Software not Code with Cucumber
Ben Mabey
 
DOCX
Cucumber testing
Yogesh Waghmare
 
PDF
SINATRA + HAML + TWITTER
Elber Ribeiro
 
PDF
Entry-level PHP for WordPress
sprclldr
 
ODP
Mojolicious on Steroids
Tudor Constantin
 
PDF
WordCamp San Francisco 2011: Transients, Caching, and the Complexities of Mul...
andrewnacin
 
PDF
You Don't Know Query - WordCamp Portland 2011
andrewnacin
 
PDF
Build a bot workshop async primer - php[tek]
Adam Englander
 
PDF
IRC HTTP Stream in YAPC::Asia 2009
Yusuke Wada
 
PDF
Rest api with Python
Santosh Ghimire
 
PDF
A reviravolta do desenvolvimento web
Wallace Reis
 
PPTX
Webinar: AngularJS and the WordPress REST API
WP Engine UK
 
PDF
Cucumber Ru09 Web
Joseph Wilk
 
PDF
BDD with cucumber
Kerry Buckley
 
PDF
Django REST Framework
Load Impact
 
PDF
Mojolicious, real-time web framework
taggg
 
PDF
Automated Testing with Ruby
Keith Pitty
 
ODP
GAEO
guest1d183d
 
PPT
Speeding up Page Load Times by Using the Starling Queue Server
Erik Osterman
 
PDF
Kazantseva
IdeasFirst
 
PPTX
Presentation1
Mohammad Hameed
 
PDF
My cv 016
Ibrahim Ali
 

More Related Content

What's hot (19)

PDF
Writing Software not Code with Cucumber
Ben Mabey
 
DOCX
Cucumber testing
Yogesh Waghmare
 
PDF
SINATRA + HAML + TWITTER
Elber Ribeiro
 
PDF
Entry-level PHP for WordPress
sprclldr
 
ODP
Mojolicious on Steroids
Tudor Constantin
 
PDF
WordCamp San Francisco 2011: Transients, Caching, and the Complexities of Mul...
andrewnacin
 
PDF
You Don't Know Query - WordCamp Portland 2011
andrewnacin
 
PDF
Build a bot workshop async primer - php[tek]
Adam Englander
 
PDF
IRC HTTP Stream in YAPC::Asia 2009
Yusuke Wada
 
PDF
Rest api with Python
Santosh Ghimire
 
PDF
A reviravolta do desenvolvimento web
Wallace Reis
 
PPTX
Webinar: AngularJS and the WordPress REST API
WP Engine UK
 
PDF
Cucumber Ru09 Web
Joseph Wilk
 
PDF
BDD with cucumber
Kerry Buckley
 
PDF
Django REST Framework
Load Impact
 
PDF
Mojolicious, real-time web framework
taggg
 
PDF
Automated Testing with Ruby
Keith Pitty
 
ODP
GAEO
guest1d183d
 
PPT
Speeding up Page Load Times by Using the Starling Queue Server
Erik Osterman
 
Writing Software not Code with Cucumber
Ben Mabey
 
Cucumber testing
Yogesh Waghmare
 
SINATRA + HAML + TWITTER
Elber Ribeiro
 
Entry-level PHP for WordPress
sprclldr
 
Mojolicious on Steroids
Tudor Constantin
 
WordCamp San Francisco 2011: Transients, Caching, and the Complexities of Mul...
andrewnacin
 
You Don't Know Query - WordCamp Portland 2011
andrewnacin
 
Build a bot workshop async primer - php[tek]
Adam Englander
 
IRC HTTP Stream in YAPC::Asia 2009
Yusuke Wada
 
Rest api with Python
Santosh Ghimire
 
A reviravolta do desenvolvimento web
Wallace Reis
 
Webinar: AngularJS and the WordPress REST API
WP Engine UK
 
Cucumber Ru09 Web
Joseph Wilk
 
BDD with cucumber
Kerry Buckley
 
Django REST Framework
Load Impact
 
Mojolicious, real-time web framework
taggg
 
Automated Testing with Ruby
Keith Pitty
 
Speeding up Page Load Times by Using the Starling Queue Server
Erik Osterman
 

Viewers also liked (12)

PDF
Kazantseva
IdeasFirst
 
PPTX
Presentation1
Mohammad Hameed
 
PDF
My cv 016
Ibrahim Ali
 
PDF
Presentation1
Mohammad Hameed
 
PDF
certificate
Ivan Magda
 
PDF
Feldman Feldman & Associates Pc
DiligentHospital359
 
PPS
Koss
IdeasFirst
 
PDF
Feldman Feldman & Associates PC
FurtiveArm426
 
PDF
Feldman Feldman & Associates PC
FurtiveArm426
 
PDF
Feldman Feldman & Associates
FurtiveArm426
 
PPT
Lido del faro competenze 2015
lidodelfaro
 
PDF
Presentation app
Soham Mondal
 
Kazantseva
IdeasFirst
 
Presentation1
Mohammad Hameed
 
My cv 016
Ibrahim Ali
 
Presentation1
Mohammad Hameed
 
certificate
Ivan Magda
 
Feldman Feldman & Associates Pc
DiligentHospital359
 
Feldman Feldman & Associates PC
FurtiveArm426
 
Feldman Feldman & Associates PC
FurtiveArm426
 
Feldman Feldman & Associates
FurtiveArm426
 
Lido del faro competenze 2015
lidodelfaro
 
Presentation app
Soham Mondal
 
Ad

Similar to Selenium Sandwich Part 1: Data driven Selenium (20)

PDF
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Ondřej Machulda
 
PDF
Selenium Tips & Tricks, presented at the Tel Aviv Selenium Meetup
Dave Haeffner
 
PDF
How To Use Selenium Successfully (Java Edition)
Sauce Labs
 
PDF
How To Use Selenium Successfully
Dave Haeffner
 
PPT
Selenium-Webdriver With PHPUnit Automation test for Joomla CMS!
Puneet Kala
 
PPTX
Selenium Automation
Anuradha Malalasena
 
PDF
Mastering Test Automation: How to Use Selenium Successfully
Applitools
 
PDF
How To Use Selenium Successfully (Java Edition)
Dave Haeffner
 
PPTX
Selenium.pptx
Pandiya Rajan
 
PDF
Introduction to Selenium and Test Automation
Ahmed Mubbashir Khan
 
PDF
Selenium Ide Tutorial
metapix
 
PDF
How to use selenium successfully
TEST Huddle
 
PPTX
Selenium ui paradigm - DDD North 2
Nathan Gloyn
 
KEY
Graceful Failure with Selenium and Continuous Integration
Chris B. France
 
PDF
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Ondřej Machulda
 
PPT
Selenium
Daksh Sharma
 
PDF
Selenium Automation Testing - A Complete Guide
Abhay Kumar
 
PDF
Efficient Rails Test-Driven Development - Week 6
Marakana Inc.
 
PDF
2010 07-18.wa.rails tdd-6
Marakana Inc.
 
PPTX
Selenium
mdfkhan625
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Ondřej Machulda
 
Selenium Tips & Tricks, presented at the Tel Aviv Selenium Meetup
Dave Haeffner
 
How To Use Selenium Successfully (Java Edition)
Sauce Labs
 
How To Use Selenium Successfully
Dave Haeffner
 
Selenium-Webdriver With PHPUnit Automation test for Joomla CMS!
Puneet Kala
 
Selenium Automation
Anuradha Malalasena
 
Mastering Test Automation: How to Use Selenium Successfully
Applitools
 
How To Use Selenium Successfully (Java Edition)
Dave Haeffner
 
Selenium.pptx
Pandiya Rajan
 
Introduction to Selenium and Test Automation
Ahmed Mubbashir Khan
 
Selenium Ide Tutorial
metapix
 
How to use selenium successfully
TEST Huddle
 
Selenium ui paradigm - DDD North 2
Nathan Gloyn
 
Graceful Failure with Selenium and Continuous Integration
Chris B. France
 
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Ondřej Machulda
 
Selenium
Daksh Sharma
 
Selenium Automation Testing - A Complete Guide
Abhay Kumar
 
Efficient Rails Test-Driven Development - Week 6
Marakana Inc.
 
2010 07-18.wa.rails tdd-6
Marakana Inc.
 
Selenium
mdfkhan625
 
Ad

More from Workhorse Computing (20)

PDF
Object::Trampoline: Follow the bouncing object.
Workhorse Computing
 
PDF
Wheels we didn't re-invent: Perl's Utility Modules
Workhorse Computing
 
PDF
mro-every.pdf
Workhorse Computing
 
PDF
Paranormal statistics: Counting What Doesn't Add Up
Workhorse Computing
 
PDF
The $path to knowledge: What little it take to unit-test Perl.
Workhorse Computing
 
PDF
Unit Testing Lots of Perl
Workhorse Computing
 
PDF
Generating & Querying Calendar Tables in Posgresql
Workhorse Computing
 
PDF
Hypers and Gathers and Takes! Oh my!
Workhorse Computing
 
PDF
BSDM with BASH: Command Interpolation
Workhorse Computing
 
PDF
Findbin libs
Workhorse Computing
 
PDF
Memory Manglement in Raku
Workhorse Computing
 
PDF
BASH Variables Part 1: Basic Interpolation
Workhorse Computing
 
PDF
Effective Benchmarks
Workhorse Computing
 
PDF
Metadata-driven Testing
Workhorse Computing
 
PDF
The W-curve and its application.
Workhorse Computing
 
PDF
Keeping objects healthy with Object::Exercise.
Workhorse Computing
 
PDF
Perl6 Regexen: Reduce the line noise in your code.
Workhorse Computing
 
PDF
Smoking docker
Workhorse Computing
 
PDF
Getting Testy With Perl6
Workhorse Computing
 
PDF
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Workhorse Computing
 
Object::Trampoline: Follow the bouncing object.
Workhorse Computing
 
Wheels we didn't re-invent: Perl's Utility Modules
Workhorse Computing
 
mro-every.pdf
Workhorse Computing
 
Paranormal statistics: Counting What Doesn't Add Up
Workhorse Computing
 
The $path to knowledge: What little it take to unit-test Perl.
Workhorse Computing
 
Unit Testing Lots of Perl
Workhorse Computing
 
Generating & Querying Calendar Tables in Posgresql
Workhorse Computing
 
Hypers and Gathers and Takes! Oh my!
Workhorse Computing
 
BSDM with BASH: Command Interpolation
Workhorse Computing
 
Findbin libs
Workhorse Computing
 
Memory Manglement in Raku
Workhorse Computing
 
BASH Variables Part 1: Basic Interpolation
Workhorse Computing
 
Effective Benchmarks
Workhorse Computing
 
Metadata-driven Testing
Workhorse Computing
 
The W-curve and its application.
Workhorse Computing
 
Keeping objects healthy with Object::Exercise.
Workhorse Computing
 
Perl6 Regexen: Reduce the line noise in your code.
Workhorse Computing
 
Smoking docker
Workhorse Computing
 
Getting Testy With Perl6
Workhorse Computing
 
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Workhorse Computing
 

Recently uploaded (20)

PDF
Cyber Defense Matrix Workshop - RSA Conference
Priyanka Aash
 
PDF
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
PDF
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
PDF
PyCon SG 25 - Firecracker Made Easy with Python.pdf
Muhammad Yuga Nugraha
 
PDF
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
PDF
Securing AI - There Is No Try, Only Do!.pdf
Priyanka Aash
 
PDF
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
PDF
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
PPTX
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
PDF
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
PPTX
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
PDF
Salesforce Summer '25 Release Frenchgathering.pptx.pdf
yosra Saidani
 
PDF
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
PDF
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
PPTX
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
PDF
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
PDF
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
Safe Software
 
PPTX
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
PPTX
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
PPTX
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
Cyber Defense Matrix Workshop - RSA Conference
Priyanka Aash
 
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
PyCon SG 25 - Firecracker Made Easy with Python.pdf
Muhammad Yuga Nugraha
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Securing AI - There Is No Try, Only Do!.pdf
Priyanka Aash
 
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
Salesforce Summer '25 Release Frenchgathering.pptx.pdf
yosra Saidani
 
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
Safe Software
 
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 

Selenium Sandwich Part 1: Data driven Selenium

  • 1. Selenium Sandwich Part 1: Automating Selenium Sequences Steven Lembark Workhorse Computing [email protected]
  • 2. Testing web front ends is different Much of the testing is manual. Tests validate multiple systems at once. Often cannot test without a running back end. Here is the first installment of a better way.
  • 3. Been there? Hey where did that come from? Check the logs... Can't use that database: dropped it last week... Server isn't using your version any more...
  • 4. Q: Why is it this bad? A: Because you aren't testing the front end.
  • 5. Q: Why is it this bad? A: Because you aren't testing the front end. Q: Where do you get the content for testing?
  • 6. Q: Why is it this bad? A: Because you aren't testing the front end. Q: Where do you get the content for testing? A: The back end.
  • 7. Q: Why is it this bad? A: Because you aren't testing the front end. Q: Where do you get the content for testing? A: The back end. You are testing both ends at once.
  • 8. Q: Why is it this bad? A: Because you aren't testing the front end. Q: Where do you get the content for testing? A: The back end. You are testing both ends at once. That makes front ends different.
  • 9. Testing just the front end Isolation and repeatiblity are key to testing. Selenium helps with repeatability. Catch: Hardwired code required for each test.
  • 11. Q: Is there a better way? A: Data driven code. With Object::Exercise code like: $object->method( @argz )->... Becomes [ $method => @argz ], ...
  • 12. Daisy-chain logic find_element returns an object: $driver->find_element( ... )->click; $driver ->find_element( ... ) ->send_keys( ... ) ->send_keys( KEY->{ enter } );
  • 13. False Lazyness Calls to “find_element” use the element. Hardwiring multiple calls is extra work. Why not “find_and_click”, “find_and_type”? A: Selenium interface doesn't declare them. Q: Why can't we do better than the interface?
  • 14. True Lazyness Adding high-level abstractions is easy. Wrap the object. Add an AUTOLOAD. Redispatch low-level calls.
  • 15. Selenium::Easy What would you use for a wrapper object?
  • 16. Selenium::Easy What would you use for a wrapper object? Usual suggestion: { wrapped => $object }
  • 17. Selenium::Easy What would you use for a wrapper object? Usual suggestion: { wrapped => $object } Downsides: Bulky, Slow, Klutzy->{ syntax }
  • 18. Simpler wrapper sub construct { my $proto = shift; bless ( my $obj = '' ), blessed $proto || $proto }
  • 19. Simpler packaging sub initialize { state $pkg = 'Remote::Selenium::Driver'; my $wrapper = shift; $$wrapper = $pkg->new( @_ ); $wrapper }
  • 20. High-level methods sub find_and_key { my ( $wrapper, $find ) = splice @_,0,2; my $found = $$wrapper->find_element( @$find ); $found->send_key( $_ ) for @_, KEYS->{ enter }; } High-level methods
  • 21. Dispatching low-level methods our $AUTOLOAD = ''; AUTOLOAD { my $wrapper = shift; my $i = 1 + rindex $AUTOLOAD, ':'; my $name = substr $AUTOLOAD, $i; $$wrapper->$name( @_ ) }
  • 22. Q: Why not just drive a new class? A: Avoid knowing base class structure. AUTOLOAD and $$wrapper have no idea what the wrapped object is.
  • 23. Replacing custom code Daisy chains now become single-steps: $wrapper->find_and_key( ... ); $wrapper->find_and_click( ... );
  • 24. Replacing custom code Passed to Object::Exercise as: $wrapper->$exercise ( [ [ find_and_key => ... ], ... ], [ [ find_and_click => ... ], ... ], );
  • 25. Replacing custom code Or with YAML like: --- - - - find_and_key - ... - - - find_and_click - ...
  • 26. Data-driven equivalent # use Object::Exercise; # $wrapper->$exercise( $yaml ); --- - # verbose speicfic to "prepare_test" block. # prepare test ignores return values. - verbose - - prepare_test - - set_implicit_wait_timeout - 50000 - - get - http://www.google.com - - - find_send_keys - - q - name - YAPC Salt Lake City - - - find_click - '#rso li h3 a' - css
  • 27. Data-driven equivalent - - regex - - get_title - YAPC - Title includes 'YAPC' - - - find_click - Talks and Schedule - - - find_click - Schedule - - - find_click - Wednesday - - - find_click - Selenium - partial_link_text - - regex - - get_title - Selenium - Title includes 'Selenium'
  • 28. So ends our first episode... Developing wrapper classes in Perl is trivial. Repeatable test metadata is simple enough: Use high-level calls with Selenium. Coming up next: Isolating the front end.
  • 29. =head1 SEE ALSO Good general talk on Selenium. Introduces the Selenium Playground on github: <http://www.slidesearchengine.com/slide/ testing-your-website-with-selenium-perl>
  • 30. =head1 SEE ALSO Overview of Object::Exercise <http://www.slideshare.net/lembark/object- exercise?qid=6ed2ecf1-2520-4d4a-b6fa- 545b95693ebc&v=qf1&b=&from_search=1> Current documentation: <http://search.cpan.org/~lembark/Object- Exercise-3.02/lib/Object/Exercise.pm>