automation w selenium_brian_kitchner (1)

14
and the PageObject Design Model www.Seleniumonlinetraining .info 1

Upload: onlinemindq

Post on 06-May-2015

215 views

Category:

Education


0 download

DESCRIPTION

SELENIUM COURSE CONTENT: Course Description Within fast moving agile software development teams it becomes important to test user interfaces as they are being coded. Automated Testing techniques using Selenium 2 allow for test replay of important features as development progresses. Selenium IDE and Selenium Web Driver are important tools for any tester or developer to use in ensuring software quality and making changes with confidence. This interactive, hands-on workshop provides an understanding and advanced techniques in the use of Selenium 2 with hands on practice. The practice exercises are tailored to various skill levels and type of application being tested, from simple forms to complex web applications. Objectives: The class will teach participants to: Understand trade-offs of automated vs. manual testing. Record, edit and play back Selenium IDE tests against multiple types of web applications. Minimize test failure due to normal changes to code. Understanding of basic Selenium commands to get through common issue with web applications. Use of Eclipse to run tests individually and as a group to generate test failure reports. Learn how to help developers understand the importance of making applications more testable to improve usability. Topics: Overview of automated testing Selenium Suite Overview Selenium 2 Limitations Selenium IDE HTML Locator strategy and false test failure Firefox Firebug and reading HTML Selenium Web Driver setup Eclipse and JUnit (Don't Panic it's just code) Convert Selenium IDE tests into Selenium 2 Java WebDriver tests Working with unsupported commands from Selenium IDE Dealing with security and certificates Selenium Web Driver practice workshop Learn how to test in multiple browsers and generate metrics and reports Discussion of setting up Selenium Web Driver for continuous integration Bonus Features: Sample Selenium Web Driver code Scripts to run JUnit test suites on multiple browsers and generate reports and metrics List of web resources and blogs for reference Laminated CSS selector cheat sheet Laminated Selenium 2 command reference Courses Offered in Our Training Institute: 1)Msbi 2)Dotnet 3)SharePoint 2010 4)Testing TOOLs - QTP, QC , Load Runner, Selenium 5)SQL SERVER Visit for the course Details www.mindqonline.com Mail us for details: [email protected] Call me at: +91-9502991277.

TRANSCRIPT

Page 1: Automation w selenium_brian_kitchner (1)

and the PageObject Design Model

www.Seleniumonlinetraining.info

1

Page 2: Automation w selenium_brian_kitchner (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

Page 3: Automation w selenium_brian_kitchner (1)

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.info3

Page 4: Automation w selenium_brian_kitchner (1)

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.info4

Page 5: Automation w selenium_brian_kitchner (1)

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.info5

Page 6: Automation w selenium_brian_kitchner (1)

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

Page 7: Automation w selenium_brian_kitchner (1)

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

Page 8: Automation w selenium_brian_kitchner (1)

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

Page 9: Automation w selenium_brian_kitchner (1)

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.info9

Page 10: Automation w selenium_brian_kitchner (1)

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.info10

Page 11: Automation w selenium_brian_kitchner (1)

[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

Page 12: Automation w selenium_brian_kitchner (1)

[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

Page 13: Automation w selenium_brian_kitchner (1)

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

Page 14: Automation w selenium_brian_kitchner (1)

www.Seleniumonlinetraining.info

14