Automation w selenium_brian_kitchner (1)


Published on

MindQ are pioners in offering real time industrail experts hands Testing tools online training.
along with Real Time Project senarios. All the sessions are completely PRACTICAL.

- Learn selenium from experts having more that 6 years of experience in selenium projects
- Hands on goal oriented training with projects
- 75 hours of videos on selenium
- Interview preparation/questions on selenium
- All the types of frameworks are also covered in the training.(Datadriven, hybrid, Page object model, Keyword driven frameworks)
All the components in selenium will be covered. Components like:
1) Selenium IDE
2) Webdriver
3) Selenium RC
4) Grid
5) Selenium Database testing
6) Flash Testing
7) SVN
8) Maven
9) Applet testing
10) Junit
11)Test ng
12) Hybrid framework
13) Data driven framework
14) Page object model
Java is also taught during the training. We offer the best selenium training in the market.

About the tool:
- Selenium is a browser automation tool
- It works only on browsers and cannot automate desktop based applications
- Selenium IDE only tests the applications in Mozilla firefox
- WebDriver and Selenium RC can be used to test the application in multiple browsers
- Webdriver is also known as selenium 2.0
- RC is also known as 1.0
- Selenium Grid is used to test applications parallely in browsers
- Junit and testng are frameworks which can be used to implement selenium tests. Reports are also generated from these frameworks
- Selenium tool can be implemented in various programming languages
- Its more famous with java language. 70% of the industry uses java with selenium

* Resume preparation and Interview assistance will be provided.

For any further details please contact +91-9502991277 or
Please mail your queries to

Published in: Education, Technology
  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • Automation w selenium_brian_kitchner (1)

    1. 1. and the PageObject Design Model 1
    2. 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. 2
    3. 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 3
    4. 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. 4
    5. 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. 5
    6. 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. 6
    7. 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("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. 7
    8. 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. 8
    9. 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. 9
    10. 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");"//a[@id='discussions']/span");"//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]");"//div[@id='THSContainer']//span[@class='replytext']");"backButton"); selenium.waitForElementVisible("//div[@id='TTHContainer']/ul[1]/li[1]");"//div[@id='TTHContainer']//span[@class='replytext']");"backButton"); globalVars.selenium.Select("byDateFilter", "label=Things Happening Soon"); selenium.waitForElementVisible("//div[@id='THSContainer']/ul[1]/li[1]");"//div[@id='THSContainer']//span[@class='replytext']");"backButton"); globalVars.selenium.Select("byDateFilter", "label=Things That Happened"); 10
    11. 11. [Test] public void testByDateTab() { funtions.loginMobi();"//a[@id='discussions']/span");"//a[@id='thingsToKnow']/span"); functions.verifyThingsToKnow(); functions.verifyThingsHappeningSoon(); selenium.Select("byDateFilter", "label=Things That Happened"); functions.verifyThingsThatHappened(); } 11
    12. 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")); } 12
    13. 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); } } 13
    14. 14. 14