page-object 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ === Version 0.4.2 / 2011-10-01
2
+ * Enhancements
3
+ * Proper handling of <button> elements
4
+ * Changed PageFactory so it also sets and instance variable @current_page to the newly created page
5
+
1
6
  === Version 0.4.1 / 2011-09-30
2
7
  * Fixes
3
8
  * Fixed error when loading plugins using Selenium
@@ -28,6 +28,18 @@ Feature: Button
28
28
  | index |
29
29
  | value |
30
30
 
31
+ Scenario Outline: Locating real buttons on the page
32
+ When I search for the button by "<search_by>"
33
+ Then I should be able to click the real button
34
+
35
+ Scenarios:
36
+ | search_by |
37
+ | id |
38
+ | class |
39
+ | name |
40
+ | index |
41
+ | value |
42
+
31
43
  @watir_only
32
44
  Scenario Outline: Locating buttons on Watir only
33
45
  When I search for the button by "<search_by>"
@@ -46,6 +58,16 @@ Feature: Button
46
58
  | class | index |
47
59
  | name | index |
48
60
 
61
+ Scenario Outline: Locating real button using multiple parameters
62
+ When I search for the button by "<param1>" and "<param2>"
63
+ Then I should be able to click the real button
64
+
65
+ Scenarios:
66
+ | param1 | param2 |
67
+ | class | index |
68
+ | name | index |
69
+
70
+
49
71
  Scenario: Finding a button dynamically
50
72
  When I find a button while the script is executing
51
73
  Then I should be able to click the button element
@@ -47,6 +47,7 @@
47
47
 
48
48
  <form method="get" action="success.html">
49
49
  <input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me">
50
+ <button type='button' id='btn_id' name='btn_name' class='btn_class'>Click Me Too</button>
50
51
  </form>
51
52
 
52
53
  <img src="images/circle.png" id="image_id" name="image_name" class="image_class">
@@ -14,6 +14,10 @@ Then /^I should be able to click the button$/ do
14
14
  @page.send "button_#{@how}"
15
15
  end
16
16
 
17
+ Then /^I should be able to click the real button$/ do
18
+ @page.send "btn_#{@how}"
19
+ end
20
+
17
21
  When /^I find a button while the script is executing$/ do
18
22
  @button = @page.button_element(:id => 'button_id')
19
23
  end
@@ -124,6 +124,15 @@ class Page
124
124
  button(:button_class_index, :class => "button_class", :index => 0)
125
125
  button(:button_name_index, :name => "button_name", :index => 0)
126
126
 
127
+ button(:btn_id, :id => 'btn_id')
128
+ button(:btn_name, :name => 'btn_name')
129
+ button(:btn_class, :class => 'btn_class')
130
+ button(:btn_index, :index => 0)
131
+ button(:btn_text, :text => 'Click Me Too')
132
+ button(:btn_value, :value => 'Click Me Too')
133
+ button(:btn_class_index, :class => "btn_class", :index => 0)
134
+ button(:btn_name_index, :name => "btn_name", :index => 0)
135
+
127
136
  image(:image_id, :id => 'image_id')
128
137
  image(:image_name, :name => 'image_name')
129
138
  image(:image_class, :class => 'image_class')
@@ -84,8 +84,21 @@ module PageObject
84
84
  def self.build_xpath_for identifier
85
85
  tag_locator = identifier.delete(:tag_name)
86
86
  idx = identifier.delete(:index)
87
- identifier.delete(:tag_name)
88
- xpath = ".//#{tag_locator}"
87
+ if tag_locator == 'input' and identifier[:type] == 'submit'
88
+ identifier.delete(:type)
89
+ btn_ident = identifier.clone
90
+ if btn_ident[:value]
91
+ btn_ident[:text] = btn_ident[:value]
92
+ btn_ident.delete(:value)
93
+ end
94
+ xpath = ".//button"
95
+ xpath << "[#{attribute_expression(btn_ident)}]" unless btn_ident.empty?
96
+ xpath << "[#{idx+1}]" if idx
97
+ identifier[:type] = %w[button reset submit image]
98
+ xpath << " | .//input"
99
+ else
100
+ xpath = ".//#{tag_locator}"
101
+ end
89
102
  xpath << "[#{attribute_expression(identifier)}]" unless identifier.empty?
90
103
  xpath << "[#{idx+1}]" if idx
91
104
  xpath
@@ -41,9 +41,9 @@ module PageObject
41
41
  # @return [PageObject] the newly created page object
42
42
  #
43
43
  def on_page(page_class, visit=false, &block)
44
- page = page_class.new(@browser, visit)
45
- block.call page if block
46
- page
44
+ @current_page = page_class.new(@browser, visit)
45
+ block.call @current_page if block
46
+ @current_page
47
47
  end
48
48
 
49
49
  end
@@ -1,4 +1,4 @@
1
1
  module PageObject
2
2
  # @private
3
- VERSION = "0.4.1"
3
+ VERSION = "0.4.2"
4
4
  end
@@ -29,7 +29,7 @@ describe "Element class methods" do
29
29
  end
30
30
 
31
31
  def all_input_elements
32
- ['text', 'hidden', 'checkbox', 'radio', 'submit']
32
+ ['text', 'hidden', 'checkbox', 'radio']
33
33
  end
34
34
 
35
35
  it "should build xpath when index is provided for basic elements" do
@@ -46,7 +46,7 @@ describe "Element class methods" do
46
46
  identifier = {:tag_name => 'input', :type => tag, :index => 1}
47
47
  how, what = PageObject::Elements::Element.selenium_identifier_for identifier
48
48
  how.should == :xpath
49
- what.should == ".//input[@type='#{tag}'][2]"
49
+ what.should include ".//input[@type='#{tag}'][2]"
50
50
  end
51
51
  end
52
52
 
@@ -64,7 +64,7 @@ describe "Element class methods" do
64
64
  identifier = {:tag_name => 'input', :type => "#{type}", :name => 'blah', :index => 0}
65
65
  how, what = PageObject::Elements::Element.selenium_identifier_for identifier
66
66
  how.should == :xpath
67
- what.should == ".//input[@type='#{type}' and @name='blah'][1]"
67
+ what.should include ".//input[@type='#{type}' and @name='blah'][1]"
68
68
  end
69
69
  end
70
70
 
@@ -81,7 +81,7 @@ describe "Element class methods" do
81
81
  all_input_elements.each do |type|
82
82
  identifier = {:tag_name => 'input', :type => "#{type}", :name => 'foo', :class => 'bar'}
83
83
  how, what = PageObject::Elements::Element.selenium_identifier_for identifier
84
- what.should == ".//input[@type='#{type}' and @name='foo' and @class='bar']"
84
+ what.should include ".//input[@type='#{type}' and @name='foo' and @class='bar']"
85
85
  end
86
86
  end
87
87
  end
@@ -31,4 +31,10 @@ describe PageObject::PageFactory do
31
31
  page.should be_instance_of FactoryTestPageObject
32
32
  end
33
33
  end
34
+
35
+ it "should set an instance variable that can be used outside of the block" do
36
+ page = @world.on_page FactoryTestPageObject
37
+ current_page = @world.instance_variable_get "@current_page"
38
+ current_page.should === page
39
+ end
34
40
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: page-object
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.1
5
+ version: 0.4.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jeff Morgan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-09-30 00:00:00 Z
13
+ date: 2011-10-01 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: watir-webdriver