Giter Club home page Giter Club logo

page-object's Introduction

page-object

Gem Version Build Status Coverage Status

A simple gem that assists in creating flexible page objects for testing browser based applications. The goal is to facilitate creating abstraction layers in your tests to decouple the tests from the item they are testing and to provide a simple interface to the elements on a page. It works with both watir and selenium-webdriver.

Documentation

The project wiki is the first place to go to learn about how to use page-object.

The rdocs for this project can be found at rubydoc.info.

To see the changes from release to release please look at the ChangeLog

To read about the motivation for this gem please read this blog entry

There is a book that describes in detail how to use this gem and others to create a complete view of testing web and other types of applications. The book is named Cucumber & Cheese

Support

If you need help using the page-object gem please ask your questions on Stack Overflow. Please be sure to use the page-object-gem tag. If you wish to report an issue or request a new feature use the github issue tracking page.

Basic Usage

Defining your page object

You define a new page object by including the PageObject module:

class LoginPage
  include PageObject
end

When you include this module numerous methods are added to your class that allow you to easily define your page. For the login page you might add the following:

class LoginPage
  include PageObject
      
  text_field(:username, :id => 'username')
  text_field(:password, :id => 'password')
  button(:login, :id => 'login')
end

Calling the text_field and button methods adds several methods to our page object that allow us to interact with the items on the page. To login using this page we could simply write the following code:

login_page.username = 'cheezy'
login_page.password = 'secret'
login_page.login

Another approach might be to create higher level methods on our page object that hide the implementation details even further. Our page object might look like this:

class LoginPage
  include PageObject
  
  text_field(:username, :id => 'username')
  text_field(:password, :id => 'password')
  button(:login, :id => 'login')
  
  def login_with(username, password)
    self.username = username
    self.password = password
    login
  end
end

and your usage of the page would become:

login_page.login_with 'cheezy', 'secret'

Creating your page object

page-object supports both watir and selenium-webdriver. The one used will be determined by which driver you pass into the constructor of your page object. The page object can be created like this:

browser = Watir::Browser.new :firefox
my_page_object = MyPageObject.new(browser)

or

browser = Selenium::WebDriver.for :firefox
my_page_object = MyPageObject.new(browser)

Known Issues

See http://github.com/cheezy/page-object/issues

Contribute

  • Fork the project.
  • Test drive your feature addition or bug fix. Adding specs is important and I will not accept a pull request that does not have tests.
  • Make sure you describe your new feature with a cucumber scenario.
  • Make sure you provide RDoc comments for any new public method you add. Remember, others will be using this gem.
  • Commit, do not mess with Rakefile, version, or ChangeLog. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011-2012 Jeffrey S. Morgan. See LICENSE for details.

page-object's People

Contributors

cheezy avatar p0deje avatar titusfortner avatar jkotests avatar davidbasarab-vht avatar wjpowell avatar cohen-carlisle avatar sivart84 avatar leviwilson avatar bootstraponline avatar joesho112358 avatar ehedrick avatar stephenturley avatar sedx avatar smartkiwi avatar alexiskandersen avatar elben avatar nmunson avatar samjonester avatar achambers avatar alisterscott avatar enkessler avatar 32bitkid avatar neall avatar olleolleolle avatar trcjr avatar tcfodor avatar ohousden avatar vveliev-tc avatar dangilkerson avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.