Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Selenium 2

Selenium 2

Marc Philipp

May 09, 2011
Tweet

More Decks by Marc Philipp

Other Decks in Programming

Transcript

  1. What is Selenium?
    Testing framework for web applications, 3 variants:
    Selenium IDE
    Firefox add-on
    Record and playback user actions on a web site
    Not recommend for stable, long staying test suites
    © 2011 andrena objects ag. All rights reserved. 2

    View full-size slide

  2. What is Selenium? (cont.)
    Selenium RC (Remote Control, Selenium 1)
    Java Server that controls various browsers
    Executes scripted user actions from a programming environment,
    typically JUnit
    Has a “string-based” programming API
    Supports a variety of browsers (Internet Explorer 6, 7, 8, Firefox 2, 3,
    Safari, Chrome, Opera)
    Selenium WebDriver (Selenium 2)
    Java Library, which controls the browser
    Has a object-oriented programming API
    Supports Internet Explorer, Firefox, Chrome and HtmlUnit as drivers
    We recommend using the WebDriver API!
    © 2011 andrena objects ag. All rights reserved. 3

    View full-size slide

  3. Selenium WebDriver API
    An instance implementing the WebDriver interface allows access to the
    browser and to retrieve WebElements (input fields, buttons, etc.):
    get(String url)
    Loads new web page by URL.
    findElement(By locator)
    Finds WebElement or throws exception.
    findElements(By locator)
    Finds list of WebElements, possibly empty.
    . . .
    © 2011 andrena objects ag. All rights reserved. 4

    View full-size slide

  4. Locating Elements on a Page
    Locators: instances of the By class identifying an element in the HTML
    page.
    By.id("okay-button")
    Selects an element by its HTML id attribute.
    By.name("okayButton")
    Selects an element by its HTML name attribute.
    By.xpath("//div[@class=’navi’]//a[text()=’click’]")
    Treats the HTML as XML and uses an XPath expression to select an
    element.
    © 2011 andrena objects ag. All rights reserved. 5

    View full-size slide

  5. Locating Elements on a Page (cont.)
    By.className("mainMenu")
    Uses a CSS class name to select an element.
    By.cssSelector(".mainMenu a")
    Uses CSS selector syntax to select an element.
    By.linkText("click here")
    Finds a link by its text shown on the page.
    © 2011 andrena objects ag. All rights reserved. 6

    View full-size slide

  6. Interacting With Elements on a Page
    element.click()
    Clicks on an element.
    element.sendKeys("some text")
    Enters text into text field.
    element.clear()
    Clears the contents of a text field.
    element.setSelected()
    Selects an option element.
    . . .
    © 2011 andrena objects ag. All rights reserved. 7

    View full-size slide

  7. Coding Dojo I
    Task
    Write Selenium tests driven by JUnit that log in and out of a web
    application
    Dojo Rules
    1. Two people are coding: 1 driver (has keyboard), 1 navigator.
    2. They think aloud and comment their actions so the audience
    understands what’s going on.
    3. After 3 minutes: driver leaves, navigator becomes driver.
    4. Someone else joins as the new navigator.
    5. Repeat.
    © 2011 andrena objects ag. All rights reserved. 8

    View full-size slide

  8. Page Objects
    A page object
    is a Java class representing a web page
    holds a WebDriver instance
    knows about locators
    public class LoginPage extends PageObject {
    public void setUsername(String username) {
    WebElement usernameField = driver.findElement(By.id("
    j_username"));
    usernameField.clear();
    usernameField.sendKeys(username);
    }
    ...
    }
    © 2011 andrena objects ag. All rights reserved. 9

    View full-size slide

  9. Web Element Annotations
    Web elements can additionally be found using annotations:
    public class LoginPage extends PageObject {
    @FindBy(id = "j_username")
    private WebElement usernameField;
    public void setUsername(String username) {
    usernameField.clear();
    usernameField.sendKeys(username);
    }
    }
    This will instantiate the LoginPage class and create a proxy for each
    WebElement by evaluating the @FindBy annotation:
    PageFactory.initElements(driver, LoginPage.class)
    © 2011 andrena objects ag. All rights reserved. 10

    View full-size slide

  10. Page Objects
    Actions
    A method that changes to another page returns a new page object
    public class LoginPage extends PageObject {
    @FindBy(id = "registration-link")
    private WebElement registrationLink;
    public LoginPage(WebDriver driver) {
    super(driver);
    }
    public RegistrationPage clickRegistrationLink() {
    registrationLink.click();
    return PageFactory.initElements(driver, RegistrationPage.
    class);
    }
    }
    © 2011 andrena objects ag. All rights reserved. 11

    View full-size slide

  11. Coding Dojo II
    Task
    Write Selenium tests driven by JUnit that log in and out of a web
    application using Page Objects!
    Dojo Rules
    1. Two people are coding: 1 driver (has keyboard), 1 navigator.
    2. They think aloud and comment their actions so the audience
    understands what’s going on.
    3. After 3 minutes: driver leaves, navigator becomes driver.
    4. Someone else joins as the new navigator.
    5. Repeat.
    © 2011 andrena objects ag. All rights reserved. 12

    View full-size slide

  12. Page Objects
    Benefits
    Page objects allow test code be separated from details about page
    structures
    Tests are written on a higher level of abstraction
    Structural knowledge is reused
    Reduces overall code size and development effort on page structure
    changes
    In summary, Page Objects help write Selenium tests which are
    More readable
    More maintainable
    Less fragile
    © 2011 andrena objects ag. All rights reserved. 13

    View full-size slide

  13. Thank you!
    References and Further Reading:
    http://www.seleniumhq.org/
    http://code.google.com/p/selenium/wiki/PageObjects
    Marc Philipp
    E-Mail [email protected]
    Twitter @marcphilipp
    andrena objects ag
    Albert-Nestler-Straße 11
    D-76131 Karlsruhe
    Tel. +49 (0) 721 6105-122
    Büro Frankfurt
    Clemensstraße 8
    D-60487 Frankfurt
    Tel. +49 (0) 69 977 860 38
    © 2011 andrena objects ag. All rights reserved. 14

    View full-size slide