SlideShare a Scribd company logo
1 of 14
and the PageObject Design Model
www.Seleniumonlinetraining.info
1
 How Selenium Remote Control works
 You launch a server on your test machine.
 Your tests connect to that server via IP.
 The server launches a browser, with selenium CORE
embedded as javascript into the page.
 Selenium CORE simulates user actions with javascript.
www.Seleniumonlinetraining.info
2
THE GOOD THE BAD
 Doesn’t steal your
mouse/keyboard.
 Works with any browser that
uses javascript
 Works for any OS that
supports java.
 Very fast page interactions.
 Large API
 Supports a variety of
programming languages.
 Can be run on remote
machines
 Can’t see anything outside
the page object.
 Not all browsers support all
functionality.
 Some pages aren’t
automatable.
 Can’t see inside third party
apps
 XSS Limitations
www.Seleniumonlinetraining.info
3
 A different way of automating the browser.
 Create a browser-specific driver to control the browser
directly.
 Have to do this for each browser!
 Object oriented API
 Doesn’t need a real browser
 No javascript limitations
 No need for a server.
 Isn’t as delicate as selenium.
www.Seleniumonlinetraining.info
4
 Went into Beta Dec 24th
.
 WebDriver + Selenium
 The two projects have merged (literally) into
Selenium 2.0
 Large browser support and no javascript limitations.
 No server
 The old API’s are still available.
 New API’s are becoming available.
www.Seleniumonlinetraining.info
5
 You have 2 options:
 IWebDriver
 This is just the WebDriver api
 Doesn’t support a lot of browsers.
 Will need to change all your tests.
 WebDriverBackedSelenium
 Uses the old Selenium 1 API
 But uses WebDriver to run things if possible
 Can use selenium 1 if the browser isn’t supported.
www.Seleniumonlinetraining.info
6
 Object Oriented
 Doesn’t break nearly as often
 Handles pageloads automatically
 Fewer problems automating
 Somewhat more complicated API
 selenium.type(“password”,”thisIsMyPassword”);
 driver.findElement(By.id("password")).sendKeys(“thisIsMyPassword");
 By.Id, By.Xpath, By.Name, By.ClassName, By.PartialLinkText
 All the supported browsers work really well
 Can extend the API to add custom functionality.
 Works well with a Page Object design model.
www.Seleniumonlinetraining.info
7
 Adds a layer of abstraction into your code.
 Helps to organize your code once it grows large.
 All automation is automatically reusable and shareable.
 A way to separate tests from re-usable functions.
 A way to store information about how the system works.
 A way to specify what page functions start on, and what page they end on.
 A way to programmatically break your tests when functionality changes.
 Makes code maintenance easier.
 There is even a PageFactory class available to automatically create them.
www.Seleniumonlinetraining.info
8
 Each page is defined as it’s own class.
 Actions (including navigation) are represented as functions for a class.
 Each function returns a new Page object, signifying what page the actions stops
on.
 Your tests “know” what page you are on, and will only give you access to
functions available to that class.
 Tests only talk to the page objects.
 Page objects only talk to the driver.
 Elements on the page are stored as variables for the page object.
 Automatic page validations can be stored in the constructor for each page
object.
 Tests become a string of well defined functions, not meaningless gibberish.
 Tests can be grouped by namespace.
 Class Inheritance can be used to define functionality to a set of pages.
 We can make functional logic transparent to the tests by returning different
inherited classes.
www.Seleniumonlinetraining.info
9
globalVars.logDescription = "log in";
globalVars.selenium.Open(globalVars.mobiUrl);
functions.type("userId", globalVars.studName + "1");
functions.type("password", globalVars.studPass + "1");
functions.clickAndWait("signInBtn");
selenium.click("//a[@id='discussions']/span");
selenium.click("//a[@id='thingsToKnow']/span");
globalVars.logDescription = "Checking elements on happenings:by date page";
selenium.waitForElementNotVisible("//div[@id='THSContainer']//span[@class='ajaxLoadingHeader']");
selenium.waitForElementVisible("//div[@id='THSContainer']/ul[1]/li[1]");
selenium.click("//div[@id='THSContainer']//span[@class='replytext']");
selenium.click("backButton");
selenium.waitForElementVisible("//div[@id='TTHContainer']/ul[1]/li[1]");
selenium.click("//div[@id='TTHContainer']//span[@class='replytext']");
selenium.click("backButton");
globalVars.selenium.Select("byDateFilter", "label=Things Happening Soon");
selenium.waitForElementVisible("//div[@id='THSContainer']/ul[1]/li[1]");
selenium.click("//div[@id='THSContainer']//span[@class='replytext']");
selenium.click("backButton");
globalVars.selenium.Select("byDateFilter", "label=Things That Happened");
www.Seleniumonlinetraining.info
10
[Test]
public void testByDateTab()
{
funtions.loginMobi();
selenium.click("//a[@id='discussions']/span");
selenium.click("//a[@id='thingsToKnow']/span");
functions.verifyThingsToKnow();
functions.verifyThingsHappeningSoon();
selenium.Select("byDateFilter", "label=Things That Happened");
functions.verifyThingsThatHappened();
}
www.Seleniumonlinetraining.info
11
[Test]
public void testByDateTab()
{
selenium.Open(Moby_Common.MobyLoginUrl);
LoginPage loginPage = new LoginPage(selenium);
HappeningsPage happeningsPage = loginPage.loginAs(Common.stud1Name, Common.stud1Password);
happeningsPage.waitToLoad();
Assert.That(!happeningsPage.isByTypePageLoaded());
Assert.That(happeningsPage.isByDatePageLoaded());
Assert.That(!happeningsPage.isByCoursePageLoaded());
happeningsPage.filterResults("byDateFilter","Things That Happened");
Assert.That(happeningsPage.isVisible("TTHContainer"));
happeningsPage.filterResults("byDateFilter", "Things Happening Soon");
Assert.That(happeningsPage.isVisible("THSContainer"));
happeningsPage.filterResults("byDateFilter", "All Types");
Assert.That(happeningsPage.isVisible("TTHContainer"));
Assert.That(happeningsPage.isVisible("THSContainer"));
}
www.Seleniumonlinetraining.info
12
public class HappeningsPage : WebPageBaseClass
{
private string _loadingImage =
"//span[@class='ajaxLoadingHeader']";
private string _moreLink = "more";
public HappeningsPage(ISelenium selenium)
{
this.selenium = selenium;
this.title = "Happenings";
this.url = "index.html";
assertPageLoadedCorrectly();
}
public HappeningsPage waitToLoad()
{
waitForElementNotVisible(_loadingImage );
return new HappeningsPage(selenium);
}
public ContentItemPage goToItem(string type, string name)
{
click("//div[@id='" + type + "']//span[text()="" + name +
""]");
return new ContentItemPage(selenium);
}
public HappeningsPage clickMoreLink()
{
click(_moreLink);
return new HappeningsPage(selenium);
}
public HappeningsPage filterResults(string id, string name)
{
selectDropdown(id, name);
return new HappeningsPage(selenium);
}
}
www.Seleniumonlinetraining.info
13
www.Seleniumonlinetraining.info
14

More Related Content

More from onlinemindq

A Buffer's Guide to Selenium 2
A Buffer's Guide to Selenium 2A Buffer's Guide to Selenium 2
A Buffer's Guide to Selenium 2onlinemindq
 
Selenium Open Source Tool
Selenium Open Source ToolSelenium Open Source Tool
Selenium Open Source Toolonlinemindq
 

More from onlinemindq (6)

Selenium 2
Selenium 2Selenium 2
Selenium 2
 
Selenium (2)
Selenium (2)Selenium (2)
Selenium (2)
 
Selenium (1)
Selenium (1)Selenium (1)
Selenium (1)
 
Selenium.ppt
Selenium.pptSelenium.ppt
Selenium.ppt
 
A Buffer's Guide to Selenium 2
A Buffer's Guide to Selenium 2A Buffer's Guide to Selenium 2
A Buffer's Guide to Selenium 2
 
Selenium Open Source Tool
Selenium Open Source ToolSelenium Open Source Tool
Selenium Open Source Tool
 

Recently uploaded

The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAssociation for Project Management
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room servicediscovermytutordmt
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactPECB
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024Janet Corral
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Sapana Sha
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfAyushMahapatra5
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 

Recently uploaded (20)

The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room service
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdf
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 

Automation w selenium_brian_kitchner (1)

  • 1. and the PageObject Design Model www.Seleniumonlinetraining.info 1
  • 2.  How Selenium Remote Control works  You launch a server on your test machine.  Your tests connect to that server via IP.  The server launches a browser, with selenium CORE embedded as javascript into the page.  Selenium CORE simulates user actions with javascript. www.Seleniumonlinetraining.info 2
  • 3. THE GOOD THE BAD  Doesn’t steal your mouse/keyboard.  Works with any browser that uses javascript  Works for any OS that supports java.  Very fast page interactions.  Large API  Supports a variety of programming languages.  Can be run on remote machines  Can’t see anything outside the page object.  Not all browsers support all functionality.  Some pages aren’t automatable.  Can’t see inside third party apps  XSS Limitations www.Seleniumonlinetraining.info 3
  • 4.  A different way of automating the browser.  Create a browser-specific driver to control the browser directly.  Have to do this for each browser!  Object oriented API  Doesn’t need a real browser  No javascript limitations  No need for a server.  Isn’t as delicate as selenium. www.Seleniumonlinetraining.info 4
  • 5.  Went into Beta Dec 24th .  WebDriver + Selenium  The two projects have merged (literally) into Selenium 2.0  Large browser support and no javascript limitations.  No server  The old API’s are still available.  New API’s are becoming available. www.Seleniumonlinetraining.info 5
  • 6.  You have 2 options:  IWebDriver  This is just the WebDriver api  Doesn’t support a lot of browsers.  Will need to change all your tests.  WebDriverBackedSelenium  Uses the old Selenium 1 API  But uses WebDriver to run things if possible  Can use selenium 1 if the browser isn’t supported. www.Seleniumonlinetraining.info 6
  • 7.  Object Oriented  Doesn’t break nearly as often  Handles pageloads automatically  Fewer problems automating  Somewhat more complicated API  selenium.type(“password”,”thisIsMyPassword”);  driver.findElement(By.id("password")).sendKeys(“thisIsMyPassword");  By.Id, By.Xpath, By.Name, By.ClassName, By.PartialLinkText  All the supported browsers work really well  Can extend the API to add custom functionality.  Works well with a Page Object design model. www.Seleniumonlinetraining.info 7
  • 8.  Adds a layer of abstraction into your code.  Helps to organize your code once it grows large.  All automation is automatically reusable and shareable.  A way to separate tests from re-usable functions.  A way to store information about how the system works.  A way to specify what page functions start on, and what page they end on.  A way to programmatically break your tests when functionality changes.  Makes code maintenance easier.  There is even a PageFactory class available to automatically create them. www.Seleniumonlinetraining.info 8
  • 9.  Each page is defined as it’s own class.  Actions (including navigation) are represented as functions for a class.  Each function returns a new Page object, signifying what page the actions stops on.  Your tests “know” what page you are on, and will only give you access to functions available to that class.  Tests only talk to the page objects.  Page objects only talk to the driver.  Elements on the page are stored as variables for the page object.  Automatic page validations can be stored in the constructor for each page object.  Tests become a string of well defined functions, not meaningless gibberish.  Tests can be grouped by namespace.  Class Inheritance can be used to define functionality to a set of pages.  We can make functional logic transparent to the tests by returning different inherited classes. www.Seleniumonlinetraining.info 9
  • 10. globalVars.logDescription = "log in"; globalVars.selenium.Open(globalVars.mobiUrl); functions.type("userId", globalVars.studName + "1"); functions.type("password", globalVars.studPass + "1"); functions.clickAndWait("signInBtn"); selenium.click("//a[@id='discussions']/span"); selenium.click("//a[@id='thingsToKnow']/span"); globalVars.logDescription = "Checking elements on happenings:by date page"; selenium.waitForElementNotVisible("//div[@id='THSContainer']//span[@class='ajaxLoadingHeader']"); selenium.waitForElementVisible("//div[@id='THSContainer']/ul[1]/li[1]"); selenium.click("//div[@id='THSContainer']//span[@class='replytext']"); selenium.click("backButton"); selenium.waitForElementVisible("//div[@id='TTHContainer']/ul[1]/li[1]"); selenium.click("//div[@id='TTHContainer']//span[@class='replytext']"); selenium.click("backButton"); globalVars.selenium.Select("byDateFilter", "label=Things Happening Soon"); selenium.waitForElementVisible("//div[@id='THSContainer']/ul[1]/li[1]"); selenium.click("//div[@id='THSContainer']//span[@class='replytext']"); selenium.click("backButton"); globalVars.selenium.Select("byDateFilter", "label=Things That Happened"); www.Seleniumonlinetraining.info 10
  • 12. [Test] public void testByDateTab() { selenium.Open(Moby_Common.MobyLoginUrl); LoginPage loginPage = new LoginPage(selenium); HappeningsPage happeningsPage = loginPage.loginAs(Common.stud1Name, Common.stud1Password); happeningsPage.waitToLoad(); Assert.That(!happeningsPage.isByTypePageLoaded()); Assert.That(happeningsPage.isByDatePageLoaded()); Assert.That(!happeningsPage.isByCoursePageLoaded()); happeningsPage.filterResults("byDateFilter","Things That Happened"); Assert.That(happeningsPage.isVisible("TTHContainer")); happeningsPage.filterResults("byDateFilter", "Things Happening Soon"); Assert.That(happeningsPage.isVisible("THSContainer")); happeningsPage.filterResults("byDateFilter", "All Types"); Assert.That(happeningsPage.isVisible("TTHContainer")); Assert.That(happeningsPage.isVisible("THSContainer")); } www.Seleniumonlinetraining.info 12
  • 13. public class HappeningsPage : WebPageBaseClass { private string _loadingImage = "//span[@class='ajaxLoadingHeader']"; private string _moreLink = "more"; public HappeningsPage(ISelenium selenium) { this.selenium = selenium; this.title = "Happenings"; this.url = "index.html"; assertPageLoadedCorrectly(); } public HappeningsPage waitToLoad() { waitForElementNotVisible(_loadingImage ); return new HappeningsPage(selenium); } public ContentItemPage goToItem(string type, string name) { click("//div[@id='" + type + "']//span[text()="" + name + ""]"); return new ContentItemPage(selenium); } public HappeningsPage clickMoreLink() { click(_moreLink); return new HappeningsPage(selenium); } public HappeningsPage filterResults(string id, string name) { selectDropdown(id, name); return new HappeningsPage(selenium); } } www.Seleniumonlinetraining.info 13

Editor's Notes

  1. seleniumonlinetraining.info
  2. seleniumonlinetraining.info