Module: PageObject::PageFactory

Includes:
PageNavigation
Defined in:
lib/page-object/page_factory.rb

Overview

Module to facilitate to creating of page objects in step definitions. You can make the methods below available to all of your step definitions by adding this module to World. This idea was first discussed in Alister Scott's blog entry watirmelon.com/2011/06/07/removing-local-page-references-from-cucumber-steps/.

If you plan to use the navigate_to method you will need to ensure you setup the possible routes ahead of time. You must always have a default route in order for this to work. Here is an example of how you define routes:

Notice the first entry of :another_route is passing an argument to the method.

Examples:

Making the PageFactory available to your step definitions

World PageObject::PageFactory

Visiting a page for the first time in a Scenario

visit_page MyPageObject do |page|
  page.name = 'Cheezy'
end

using a page that has already been visited in a Scenario

on_page MyPageObject do |page|
  page.name.should == 'Cheezy'
end

Example routes defined in env.rb

PageObject::PageFactory.routes = {
  :default => [[PageOne,:method1], [PageTwoA,:method2], [PageThree,:method3]],
  :another_route => [[PageOne,:method1, "arg1"], [PageTwoB,:method2b], [PageThree,:method3]]
}

Instance Method Summary collapse

Instance Method Details

#if_page(page_class, params = {:using_params => {}}, &block) ⇒ PageObject Also known as: if

Create a page object if and only if the current page is the same page to be created

available in the @params instance variable.

Parameters:

  • a (PageObject, String)

    class that has included the PageObject module or a string containing the name of the class

  • Hash

    values that is pass through to page class a

  • an (block)

    optional block to be called

Returns:


91
92
93
94
95
# File 'lib/page-object/page_factory.rb', line 91

def if_page(page_class, params={:using_params => {}},&block)
  page_class = class_from_string(page_class) if page_class.is_a? String
  return @current_page unless @current_page.class == page_class
  on_page(page_class, params, false, &block)
end

#on_page(page_class, params = {:using_params => {}}, visit = false, &block) ⇒ PageObject Also known as: on

Create a page object.

available in the @params instance variable.

Parameters:

  • a (PageObject, String)

    class that has included the PageObject module or a string containing the name of the class

  • Hash

    values that is pass through to page class a

  • a (Boolean)

    boolean indicating if the page should be visited? default is false.

  • an (block)

    optional block to be called

Returns:


69
70
71
72
73
74
75
76
77
# File 'lib/page-object/page_factory.rb', line 69

def on_page(page_class, params={:using_params => {}}, visit=false, &block)
  page_class = class_from_string(page_class) if page_class.is_a? String
  return super(page_class, params, visit, &block) unless page_class.ancestors.include? PageObject
  merged = page_class.params.merge(params[:using_params])
  page_class.instance_variable_set("@merged_params", merged) unless merged.empty?
  @current_page = page_class.new(@browser, visit)
  block.call @current_page if block
  @current_page
end

#visit_page(page_class, params = {:using_params => {}}, &block) ⇒ PageObject Also known as: visit

Create and navigate to a page object. The navigation will only work if the 'page_url' method was call on the page object.

PageObject module or a string containing the name of the class available in the @params instance variable.

Parameters:

  • a (PageObject, String)

    class that has included the

  • Hash

    values that is pass through to page class a

  • an

    optional block to be called

Returns:


52
53
54
# File 'lib/page-object/page_factory.rb', line 52

def visit_page(page_class, params={:using_params => {}}, &block)
  on_page page_class, params, true, &block
end