page-object 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rvmrc +1 -1
- data/ChangeLog +9 -1
- data/features/button.feature +13 -1
- data/features/element.feature +6 -0
- data/features/html/images/submit.gif +0 -0
- data/features/html/static_elements.html +3 -1
- data/features/step_definitions/button_steps.rb +12 -0
- data/features/step_definitions/element_steps.rb +16 -0
- data/features/step_definitions/table_steps.rb +12 -2
- data/features/support/page.rb +6 -0
- data/features/table.feature +2 -0
- data/lib/page-object/accessors.rb +2 -0
- data/lib/page-object/elements/button.rb +2 -2
- data/lib/page-object/elements/table.rb +18 -0
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +3 -0
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +1 -1
- data/spec/page-object/elements/button_spec.rb +3 -3
- data/spec/page-object/elements/table_spec.rb +21 -1
- metadata +58 -63
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.9.
|
1
|
+
rvm 1.9.3-p0@page-object --create
|
data/ChangeLog
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
=== Version 0.5.
|
1
|
+
=== Version 0.5.2 / 2011-11-30
|
2
|
+
* Enhancements
|
3
|
+
* Added ability to find image buttons by src
|
4
|
+
* Added ability to find image button by alt
|
5
|
+
* Added first_row and last_row methods to Table
|
6
|
+
* Updated to use selenium-webdriver 2.14.0
|
7
|
+
* Updated to use watir-webdriver 0.3.9
|
8
|
+
|
9
|
+
=== Version 0.5.1 / 2011-11-18
|
2
10
|
* Enhancements
|
3
11
|
* Added instance level in_frame method
|
4
12
|
* Support for nesting all *_element instance methods inside in_frame call
|
data/features/button.feature
CHANGED
@@ -6,9 +6,21 @@ Feature: Button
|
|
6
6
|
Background:
|
7
7
|
Given I am on the static elements page
|
8
8
|
|
9
|
-
Scenario:
|
9
|
+
Scenario: Clicking a button (type=submit)
|
10
10
|
When I click the button
|
11
11
|
Then I should be on the success page
|
12
|
+
|
13
|
+
Scenario: Clicking a button (type=image)
|
14
|
+
When I click the button with type image
|
15
|
+
Then I should be on the success page
|
16
|
+
|
17
|
+
Scenario: Clicking an image button by src
|
18
|
+
When I click the image button using src
|
19
|
+
Then I should be on the success page
|
20
|
+
|
21
|
+
Scenario: Clicking an image button by alt
|
22
|
+
When I click the image button using alt
|
23
|
+
Then I should be on the success page
|
12
24
|
|
13
25
|
Scenario: Retrieve a button element
|
14
26
|
When I retrieve a button element
|
data/features/element.feature
CHANGED
@@ -9,6 +9,12 @@ Feature: Elements
|
|
9
9
|
When I clear the text field
|
10
10
|
Then the text field should contain ""
|
11
11
|
|
12
|
+
Scenario: Elements enabled?
|
13
|
+
When I check an enabled button
|
14
|
+
Then it should know it is enabled
|
15
|
+
When I check a disabled button
|
16
|
+
Then it should know it is not enabled
|
17
|
+
|
12
18
|
Scenario: Link element methods
|
13
19
|
When I retrieve a link element
|
14
20
|
Then I should know it exists
|
Binary file
|
@@ -46,8 +46,10 @@
|
|
46
46
|
</table>
|
47
47
|
|
48
48
|
<form method="get" action="success.html">
|
49
|
-
<input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me"
|
49
|
+
<input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me"/>
|
50
|
+
<input id='button_image_id' type='image' src='images/submit.gif' alt='Submit'/>
|
50
51
|
<button type='button' id='btn_id' name='btn_name' class='btn_class'>Click Me Too</button>
|
52
|
+
<input value="Disabled" disabled="true" type ="submit"/>
|
51
53
|
</form>
|
52
54
|
|
53
55
|
<img src="images/circle.png" id="image_id" name="image_name" class="image_class">
|
@@ -2,6 +2,18 @@ When /^I click the button$/ do
|
|
2
2
|
@page.button_id
|
3
3
|
end
|
4
4
|
|
5
|
+
When /^I click the button with type image$/ do
|
6
|
+
@page.button_image_id
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I click the image button using src$/ do
|
10
|
+
@page.button_image_src
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I click the image button using alt$/ do
|
14
|
+
@page.button_image_alt
|
15
|
+
end
|
16
|
+
|
5
17
|
When /^I search for the button by "([^\"]*)"$/ do |how|
|
6
18
|
@how = how
|
7
19
|
end
|
@@ -107,3 +107,19 @@ end
|
|
107
107
|
When /^I clear the text field$/ do
|
108
108
|
@page.text_field_id_element.clear
|
109
109
|
end
|
110
|
+
|
111
|
+
When /^I check an enabled button$/ do
|
112
|
+
@element = @page.button_id_element
|
113
|
+
end
|
114
|
+
|
115
|
+
Then /^it should know it is enabled$/ do
|
116
|
+
@element.should be_enabled
|
117
|
+
end
|
118
|
+
|
119
|
+
When /^I check a disabled button$/ do
|
120
|
+
@element = @page.disabled_button_element
|
121
|
+
end
|
122
|
+
|
123
|
+
Then /^it should know it is not enabled$/ do
|
124
|
+
@element.should_not be_enabled
|
125
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Then /^the data for row "([
|
1
|
+
Then /^the data for row "([^\"]*)" should be "([^\"]*)" and "([^\"]*)"$/ do |row, col1, col2|
|
2
2
|
table_row = @element[row.to_i - 1]
|
3
3
|
table_row[0].text.should == col1
|
4
4
|
table_row[1].text.should == col2
|
@@ -17,10 +17,20 @@ When /^I retrieve a table element by "([^\"]*)"$/ do |how|
|
|
17
17
|
@element = @page.send "table_#{how}_element"
|
18
18
|
end
|
19
19
|
|
20
|
-
When /^I retrieve a table element by "([
|
20
|
+
When /^I retrieve a table element by "([^\"]*)" and "([^\"]*)"$/ do |param1, param2|
|
21
21
|
@element = @page.send "table_#{param1}_#{param2}_element"
|
22
22
|
end
|
23
23
|
|
24
24
|
When /^I retrieve a table element while the script is executing$/ do
|
25
25
|
@element = @page.table_element(:id => 'table_id')
|
26
26
|
end
|
27
|
+
|
28
|
+
Then /^the data for the first row should be "([^\"]*)" and "([^\"]*)"$/ do |col1, col2|
|
29
|
+
@element.first_row[0].text.should == col1
|
30
|
+
@element.first_row[1].text.should == col2
|
31
|
+
end
|
32
|
+
|
33
|
+
Then /^the data for the last row should be "([^\"]*)" and "([^\"]*)"$/ do |col1, col2|
|
34
|
+
@element.last_row[0].text.should == col1
|
35
|
+
@element.last_row[1].text.should == col2
|
36
|
+
end
|
data/features/support/page.rb
CHANGED
@@ -125,6 +125,10 @@ class Page
|
|
125
125
|
button(:button_class_index, :class => "button_class", :index => 0)
|
126
126
|
button(:button_name_index, :name => "button_name", :index => 0)
|
127
127
|
|
128
|
+
button(:button_image_id, :id => 'button_image_id')
|
129
|
+
button(:button_image_src, :src => 'images/submit.gif')
|
130
|
+
button(:button_image_alt, :alt => 'Submit')
|
131
|
+
|
128
132
|
button(:btn_id, :id => 'btn_id')
|
129
133
|
button(:btn_name, :name => 'btn_name')
|
130
134
|
button(:btn_class, :class => 'btn_class')
|
@@ -134,6 +138,8 @@ class Page
|
|
134
138
|
button(:btn_class_index, :class => "btn_class", :index => 0)
|
135
139
|
button(:btn_name_index, :name => "btn_name", :index => 0)
|
136
140
|
|
141
|
+
button(:disabled_button, :value => 'Disabled')
|
142
|
+
|
137
143
|
image(:image_id, :id => 'image_id')
|
138
144
|
image(:image_name, :name => 'image_name')
|
139
145
|
image(:image_class, :class => 'image_class')
|
data/features/table.feature
CHANGED
@@ -23,6 +23,8 @@ Feature: Table
|
|
23
23
|
And each row should contain "Data"
|
24
24
|
And row "1" should have "2" columns
|
25
25
|
And each column should contain "Data"
|
26
|
+
And the data for the first row should be "Data1" and "Data2"
|
27
|
+
And the data for the last row should be "Data3" and "Data4"
|
26
28
|
|
27
29
|
Scenario Outline: Locating table cells on the Page
|
28
30
|
When I retrieve a table element by "<search_by>"
|
@@ -323,6 +323,8 @@ module PageObject
|
|
323
323
|
# * :text => Watir and Selenium
|
324
324
|
# * :value => Watir and Selenium
|
325
325
|
# * :xpath => Watir and Selenium
|
326
|
+
# * :src => Watir and Selenium (input type=image only)
|
327
|
+
# * :alt => Watir and Selenium (input type=image only)
|
326
328
|
# @param optional block to be invoked when element method is called
|
327
329
|
#
|
328
330
|
def button(name, identifier=nil, &block)
|
@@ -11,11 +11,11 @@ module PageObject
|
|
11
11
|
protected
|
12
12
|
|
13
13
|
def self.watir_finders
|
14
|
-
super + [:text, :value]
|
14
|
+
super + [:text, :value, :src, :alt]
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.selenium_finders
|
18
|
-
super + [:value]
|
18
|
+
super + [:value, :src, :alt]
|
19
19
|
end
|
20
20
|
|
21
21
|
def include_platform_for platform
|
@@ -20,6 +20,24 @@ module PageObject
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
#
|
24
|
+
# return the first row
|
25
|
+
#
|
26
|
+
# @return PageObject::Elements::TableRow
|
27
|
+
#
|
28
|
+
def first_row
|
29
|
+
self[0]
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# return the last row
|
34
|
+
#
|
35
|
+
# @return PageObject::Elements::TableRow
|
36
|
+
#
|
37
|
+
def last_row
|
38
|
+
self[-1]
|
39
|
+
end
|
40
|
+
|
23
41
|
protected
|
24
42
|
|
25
43
|
def child_xpath
|
@@ -462,6 +462,7 @@ module PageObject
|
|
462
462
|
#
|
463
463
|
def click_button_for(identifier)
|
464
464
|
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Button, 'input', :type => 'submit')
|
465
|
+
puts "how=#{how}, what=#{what}"
|
465
466
|
switch_to_frame(frame_identifiers)
|
466
467
|
@browser.find_element(how, what).click
|
467
468
|
@browser.switch_to.default_content unless frame_identifiers.nil?
|
@@ -781,6 +782,8 @@ module PageObject
|
|
781
782
|
return false if identifier[:href] and tag == 'a'
|
782
783
|
return false if identifier[:text] and ['div', 'span', 'td'].include? tag
|
783
784
|
return false if identifier[:value] and tag == 'input' and additional[:type] == 'submit'
|
785
|
+
return false if identifier[:src] and tag == 'input' and additional[:type] == 'submit'
|
786
|
+
return false if identifier[:alt] and tag == 'input' and additional[:type] == 'submit'
|
784
787
|
return false if identifier[:value] and tag == 'input' and additional[:type] == 'radio'
|
785
788
|
true
|
786
789
|
end
|
data/lib/page-object/version.rb
CHANGED
data/page-object.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
22
|
s.add_dependency 'watir-webdriver', '>= 0.3.9'
|
23
|
-
s.add_dependency 'selenium-webdriver', '>= 2.
|
23
|
+
s.add_dependency 'selenium-webdriver', '>= 2.14.0'
|
24
24
|
|
25
25
|
s.add_development_dependency 'rspec', '>= 2.6.0'
|
26
26
|
s.add_development_dependency 'cucumber', '>= 1.1.0'
|
@@ -6,14 +6,14 @@ describe PageObject::Elements::Button do
|
|
6
6
|
|
7
7
|
context "when mapping how to find an element" do
|
8
8
|
it "should map watir types to same" do
|
9
|
-
[:class, :id, :index, :name, :value, :xpath].each do |t|
|
9
|
+
[:class, :id, :index, :name, :value, :xpath, :src, :alt].each do |t|
|
10
10
|
identifier = button.watir_identifier_for t => 'value'
|
11
11
|
identifier.keys.first.should == t
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :index, :name, :value, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :value, :xpath, :src, :alt].each do |t|
|
17
17
|
key, value = button.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -31,4 +31,4 @@ describe PageObject::Elements::Button do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
end
|
34
|
+
end
|
@@ -34,6 +34,16 @@ describe PageObject::Elements::Table do
|
|
34
34
|
watir_table[1].should be_instance_of PageObject::Elements::TableRow
|
35
35
|
end
|
36
36
|
|
37
|
+
it "should return the first row" do
|
38
|
+
table_element.stub(:[]).with(0).and_return(table_element)
|
39
|
+
watir_table.first_row.should be_instance_of PageObject::Elements::TableRow
|
40
|
+
end
|
41
|
+
|
42
|
+
it "shoudl return the last row" do
|
43
|
+
table_element.stub(:[]).with(-1).and_return(table_element)
|
44
|
+
watir_table.last_row.should be_instance_of PageObject::Elements::TableRow
|
45
|
+
end
|
46
|
+
|
37
47
|
it "should return the number of rows" do
|
38
48
|
table_element.stub(:wd).and_return(table_element)
|
39
49
|
table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
|
@@ -57,6 +67,16 @@ describe PageObject::Elements::Table do
|
|
57
67
|
selenium_table[1].should be_instance_of PageObject::Elements::TableRow
|
58
68
|
end
|
59
69
|
|
70
|
+
it "should return the first row" do
|
71
|
+
table_element.stub(:[]).with(0).and_return(table_element)
|
72
|
+
selenium_table.first_row.should be_instance_of PageObject::Elements::TableRow
|
73
|
+
end
|
74
|
+
|
75
|
+
it "shoudl return the last row" do
|
76
|
+
table_element.stub(:[]).with(-1).and_return(table_element)
|
77
|
+
selenium_table.last_row.should be_instance_of PageObject::Elements::TableRow
|
78
|
+
end
|
79
|
+
|
60
80
|
it "should return the number of rows" do
|
61
81
|
table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
|
62
82
|
table_element.should_receive(:size).and_return(2)
|
@@ -71,4 +91,4 @@ describe PageObject::Elements::Table do
|
|
71
91
|
end
|
72
92
|
end
|
73
93
|
end
|
74
|
-
end
|
94
|
+
end
|
metadata
CHANGED
@@ -1,82 +1,78 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: page-object
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.2
|
4
5
|
prerelease:
|
5
|
-
version: 0.5.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Jeff Morgan
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-11-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: watir-webdriver
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70095900630940 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
23
21
|
version: 0.3.9
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: selenium-webdriver
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *70095900630940
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: selenium-webdriver
|
27
|
+
requirement: &70095900629300 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 2.
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.14.0
|
35
33
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rspec
|
39
34
|
prerelease: false
|
40
|
-
|
35
|
+
version_requirements: *70095900629300
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70095900627260 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
45
43
|
version: 2.6.0
|
46
44
|
type: :development
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: cucumber
|
50
45
|
prerelease: false
|
51
|
-
|
46
|
+
version_requirements: *70095900627260
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: cucumber
|
49
|
+
requirement: &70095900626440 !ruby/object:Gem::Requirement
|
52
50
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
56
54
|
version: 1.1.0
|
57
55
|
type: :development
|
58
|
-
version_requirements: *id004
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: yard
|
61
56
|
prerelease: false
|
62
|
-
|
57
|
+
version_requirements: *70095900626440
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: yard
|
60
|
+
requirement: &70095900625280 !ruby/object:Gem::Requirement
|
63
61
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
67
65
|
version: 0.7.2
|
68
66
|
type: :development
|
69
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70095900625280
|
70
69
|
description: Page Object DSL that works with both Watir and Selenium
|
71
|
-
email:
|
70
|
+
email:
|
72
71
|
- jeff.morgan@leandog.com
|
73
72
|
executables: []
|
74
|
-
|
75
73
|
extensions: []
|
76
|
-
|
77
74
|
extra_rdoc_files: []
|
78
|
-
|
79
|
-
files:
|
75
|
+
files:
|
80
76
|
- .gitignore
|
81
77
|
- .rspec
|
82
78
|
- .rvmrc
|
@@ -102,6 +98,7 @@ files:
|
|
102
98
|
- features/html/frames.html
|
103
99
|
- features/html/iframes.html
|
104
100
|
- features/html/images/circle.png
|
101
|
+
- features/html/images/submit.gif
|
105
102
|
- features/html/modal.html
|
106
103
|
- features/html/modal_1.html
|
107
104
|
- features/html/modal_2.html
|
@@ -254,32 +251,29 @@ files:
|
|
254
251
|
- spec/spec_helper.rb
|
255
252
|
homepage: http://github.com/cheezy/page-object
|
256
253
|
licenses: []
|
257
|
-
|
258
254
|
post_install_message:
|
259
255
|
rdoc_options: []
|
260
|
-
|
261
|
-
require_paths:
|
256
|
+
require_paths:
|
262
257
|
- lib
|
263
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
258
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
264
259
|
none: false
|
265
|
-
requirements:
|
266
|
-
- -
|
267
|
-
- !ruby/object:Gem::Version
|
268
|
-
version:
|
269
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
260
|
+
requirements:
|
261
|
+
- - ! '>='
|
262
|
+
- !ruby/object:Gem::Version
|
263
|
+
version: '0'
|
264
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
265
|
none: false
|
271
|
-
requirements:
|
272
|
-
- -
|
273
|
-
- !ruby/object:Gem::Version
|
274
|
-
version:
|
266
|
+
requirements:
|
267
|
+
- - ! '>='
|
268
|
+
- !ruby/object:Gem::Version
|
269
|
+
version: '0'
|
275
270
|
requirements: []
|
276
|
-
|
277
271
|
rubyforge_project: page-object
|
278
272
|
rubygems_version: 1.8.10
|
279
273
|
signing_key:
|
280
274
|
specification_version: 3
|
281
275
|
summary: Page Object DSL for browser testing
|
282
|
-
test_files:
|
276
|
+
test_files:
|
283
277
|
- features/async.feature
|
284
278
|
- features/button.feature
|
285
279
|
- features/check_box.feature
|
@@ -295,6 +289,7 @@ test_files:
|
|
295
289
|
- features/html/frames.html
|
296
290
|
- features/html/iframes.html
|
297
291
|
- features/html/images/circle.png
|
292
|
+
- features/html/images/submit.gif
|
298
293
|
- features/html/modal.html
|
299
294
|
- features/html/modal_1.html
|
300
295
|
- features/html/modal_2.html
|