page-object 0.0.3 → 0.0.4
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/ChangeLog +10 -1
- data/Gemfile +3 -0
- data/README.md +2 -2
- data/cucumber.yml +2 -0
- data/features/element.feature +81 -8
- data/features/form.feature +28 -0
- data/features/hidden_field.feature +32 -0
- data/features/html/static_elements.html +26 -0
- data/features/list_item.feature +36 -0
- data/features/ordered_list.feature +39 -0
- data/features/step_definitions/accessor_steps.rb +71 -0
- data/features/step_definitions/element_steps.rb +23 -0
- data/features/support/page.rb +43 -0
- data/features/text_area.feature +32 -0
- data/features/text_field.feature +1 -2
- data/features/unordered_list.feature +39 -0
- data/lib/page-object.rb +48 -3
- data/lib/page-object/accessors.rb +282 -111
- data/lib/page-object/elements.rb +6 -0
- data/lib/page-object/elements/element.rb +5 -1
- data/lib/page-object/elements/form.rb +25 -0
- data/lib/page-object/elements/hidden_field.rb +28 -0
- data/lib/page-object/elements/list_item.rb +7 -0
- data/lib/page-object/elements/ordered_list.rb +31 -0
- data/lib/page-object/elements/text_area.rb +24 -0
- data/lib/page-object/elements/text_field.rb +1 -1
- data/lib/page-object/elements/unordered_list.rb +31 -0
- data/lib/page-object/platforms/selenium_button.rb +1 -1
- data/lib/page-object/platforms/selenium_element.rb +3 -0
- data/lib/page-object/platforms/selenium_form.rb +14 -0
- data/lib/page-object/platforms/selenium_image.rb +6 -2
- data/lib/page-object/platforms/selenium_ordered_list.rb +18 -0
- data/lib/page-object/platforms/selenium_unordered_list.rb +18 -0
- data/lib/page-object/platforms/watir_element.rb +3 -0
- data/lib/page-object/platforms/watir_form.rb +14 -0
- data/lib/page-object/platforms/watir_ordered_list.rb +18 -0
- data/lib/page-object/platforms/watir_unordered_list.rb +18 -0
- data/lib/page-object/selenium_page_object.rb +101 -0
- data/lib/page-object/version.rb +2 -1
- data/lib/page-object/watir_page_object.rb +103 -2
- data/spec/page-object/accessors_spec.rb +203 -2
- data/spec/page-object/elements/form_spec.rb +24 -0
- data/spec/page-object/elements/hidden_field_spec.rb +32 -0
- data/spec/page-object/elements/list_item_spec.rb +22 -0
- data/spec/page-object/elements/ordered_list_spec.rb +43 -0
- data/spec/page-object/elements/text_area_spec.rb +32 -0
- data/spec/page-object/elements/text_field_spec.rb +1 -1
- data/spec/page-object/elements/unordered_list_spec.rb +43 -0
- metadata +39 -5
data/ChangeLog
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
|
1
|
+
=== Version 0.0.4 / 2011-06-13
|
2
|
+
* Enhancements
|
3
|
+
* Added support for the following elements
|
4
|
+
* hidden field
|
5
|
+
* form
|
6
|
+
* list item
|
7
|
+
* unordered list
|
8
|
+
* ordered list
|
9
|
+
|
10
|
+
=== Version 0.0.3 / 2011-06-02
|
2
11
|
* Enhancements
|
3
12
|
* Added support for the following elements
|
4
13
|
* span
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -16,7 +16,7 @@ You define a new page object by including the PageObject module:
|
|
16
16
|
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:
|
17
17
|
|
18
18
|
class LoginPage
|
19
|
-
include
|
19
|
+
include PageObject
|
20
20
|
|
21
21
|
text_field(:username, :id => 'username')
|
22
22
|
text_field(:password, :id => 'password')
|
@@ -32,7 +32,7 @@ Calling the _text_field_ and _button_ methods adds several methods to our page o
|
|
32
32
|
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:
|
33
33
|
|
34
34
|
class LoginPage
|
35
|
-
include
|
35
|
+
include PageObject
|
36
36
|
|
37
37
|
text_field(:username, :id => 'username')
|
38
38
|
text_field(:password, :id => 'password')
|
data/cucumber.yml
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
default: DRIVER=WATIR --no-source --color --format pretty --tags ~@selenium_only
|
2
2
|
watir: DRIVER=WATIR --no-source --color --format pretty --tags ~@selenium_only
|
3
3
|
selenium: DRIVER=SELENIUM --no-source --color --format pretty --tags ~@watir_only
|
4
|
+
watir_focus: DRIVER=WATIR --no-source --color --format pretty --tags @focus
|
5
|
+
selenium_focus: DRIVER=SELENIUM --no-source --color --format pretty --tags @focus
|
4
6
|
autotest: DRIVER=WATIR --no-source --color --format pretty --tags ~@selenium_only
|
5
7
|
|
data/features/element.feature
CHANGED
@@ -138,6 +138,17 @@ Feature: Elements
|
|
138
138
|
And I should know the attribute "readonly" is false
|
139
139
|
And I should be able to click it
|
140
140
|
|
141
|
+
Scenario: Text Area element methods
|
142
|
+
When I retrieve the text area
|
143
|
+
Then I should know it exists
|
144
|
+
And I should know it is visible
|
145
|
+
And I should know its' text includes ""
|
146
|
+
And I should know its' value is ""
|
147
|
+
And I should know it is equal to itself
|
148
|
+
And I should know its' tag name is "textarea"
|
149
|
+
And I should know the attribute "readonly" is false
|
150
|
+
And I should be able to click it
|
151
|
+
|
141
152
|
Scenario: Image element methods
|
142
153
|
When I get the image element
|
143
154
|
Then I should know it exists
|
@@ -148,13 +159,75 @@ Feature: Elements
|
|
148
159
|
And I should know the attribute "readonly" is false
|
149
160
|
And I should be able to click it
|
150
161
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
162
|
+
@watir_only
|
163
|
+
Scenario: Image element methods in watir
|
164
|
+
When I get the image element
|
165
|
+
Then I should know its' value is ""
|
155
166
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
167
|
+
@selenium_only
|
168
|
+
Scenario: Image element methods in selenium
|
169
|
+
When I get the image element
|
170
|
+
Then I should know its' value is nil
|
171
|
+
|
172
|
+
Scenario: Hidden Field element methods
|
173
|
+
When I retrieve the hidden field element
|
174
|
+
Then I should know it exists
|
175
|
+
And I should know it is not visible
|
176
|
+
And I should know its' text includes ""
|
177
|
+
And I should know its' value is "12345"
|
178
|
+
And I should know it is equal to itself
|
179
|
+
And I should know its' tag name is "input"
|
180
|
+
And I should know the attribute "readonly" is false
|
160
181
|
|
182
|
+
Scenario: Form element methods
|
183
|
+
When I locate the form
|
184
|
+
Then I should know it exists
|
185
|
+
And I should know it is visible
|
186
|
+
And I should know its' text includes ""
|
187
|
+
And I should know it is equal to itself
|
188
|
+
And I should know its' tag name is "form"
|
189
|
+
And I should know the attribute "readonly" is false
|
190
|
+
|
191
|
+
@watir_only
|
192
|
+
Scenario: Form element methods in watir
|
193
|
+
When I locate the form
|
194
|
+
Then I should know its' value is ""
|
195
|
+
|
196
|
+
@selenium_only
|
197
|
+
Scenario: Form element methods in selenium
|
198
|
+
When I locate the form
|
199
|
+
Then I should know its' value is nil
|
200
|
+
|
201
|
+
Scenario: List item element methods
|
202
|
+
When I retrieve a list item element
|
203
|
+
Then I should know it exists
|
204
|
+
And I should know it is visible
|
205
|
+
And I should know its' text is "Item One"
|
206
|
+
And I should know it is equal to itself
|
207
|
+
And I should know its' tag name is "li"
|
208
|
+
And I should know the attribute "readonly" is false
|
209
|
+
And I should be able to click it
|
210
|
+
|
211
|
+
Scenario: Unordered list element methods
|
212
|
+
When I retrieve an unordered list element
|
213
|
+
Then I should know it exists
|
214
|
+
And I should know it is visible
|
215
|
+
And I should know its' text includes "Item One"
|
216
|
+
And I should know its' text includes "Item Two"
|
217
|
+
And I should know its' text includes "Item Three"
|
218
|
+
And I should know it is equal to itself
|
219
|
+
And I should know its' tag name is "ul"
|
220
|
+
And I should know the attribute "readonly" is false
|
221
|
+
And I should be able to click it
|
222
|
+
|
223
|
+
Scenario: Ordered list element methods
|
224
|
+
When I retrieve an ordered list element
|
225
|
+
Then I should know it exists
|
226
|
+
And I should know it is visible
|
227
|
+
And I should know its' text includes "Number One"
|
228
|
+
And I should know its' text includes "Number Two"
|
229
|
+
And I should know its' text includes "Number Three"
|
230
|
+
And I should know it is equal to itself
|
231
|
+
And I should know its' tag name is "ol"
|
232
|
+
And I should know the attribute "readonly" is false
|
233
|
+
And I should be able to click it
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Feature: Form
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Submitting a form
|
7
|
+
When I locate the form by "id"
|
8
|
+
Then I should be able to submit the form
|
9
|
+
|
10
|
+
Scenario Outline: Locating a form on the page
|
11
|
+
When I locate the form by "<search_by>"
|
12
|
+
Then I should be able to submit the form
|
13
|
+
|
14
|
+
Scenarios:
|
15
|
+
| search_by |
|
16
|
+
| id |
|
17
|
+
| class |
|
18
|
+
| xpath |
|
19
|
+
|
20
|
+
@watir_only
|
21
|
+
Scenario Outline: Locating a form on the page watir only
|
22
|
+
When I locate the form by "<search_by>"
|
23
|
+
Then I should be able to submit the form
|
24
|
+
|
25
|
+
Scenarios:
|
26
|
+
| search_by |
|
27
|
+
| index |
|
28
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Hidden Fields
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Setting and getting a value from a hidden field
|
7
|
+
When I retrieve the hidden field element
|
8
|
+
Then I should see the hidden field contains "12345"
|
9
|
+
|
10
|
+
Scenario Outline: Locating hidden fields on the Page
|
11
|
+
When I search for the hidden field by "<search_by>"
|
12
|
+
Then hidden field element should contains "12345"
|
13
|
+
|
14
|
+
Scenarios:
|
15
|
+
| search_by |
|
16
|
+
| id |
|
17
|
+
| class |
|
18
|
+
| name |
|
19
|
+
| xpath |
|
20
|
+
| css |
|
21
|
+
| tag_name |
|
22
|
+
|
23
|
+
@watir_only
|
24
|
+
Scenario Outline: Locating hidden fields on Watir only
|
25
|
+
When I search for the hidden field by "<search_by>"
|
26
|
+
Then hidden field element should contains "12345"
|
27
|
+
|
28
|
+
Scenarios:
|
29
|
+
| search_by |
|
30
|
+
| index |
|
31
|
+
| text |
|
32
|
+
|
@@ -10,6 +10,13 @@
|
|
10
10
|
<input id="text_field_id" name="text_field_name" class="text_field_class"
|
11
11
|
size="40" type="text" />
|
12
12
|
|
13
|
+
<h3>Hidden Field</h3>
|
14
|
+
<input id="hidden_field_id" name="hidden_field_name" class="hidden_field_class"
|
15
|
+
size="40" type="hidden" value="12345" />
|
16
|
+
|
17
|
+
<h3>Text Area</h3>
|
18
|
+
<textarea rows="2" cols="20" id="text_area_id" class="text_area_class" name="text_area_name"></textarea>
|
19
|
+
|
13
20
|
<h3>Select List</h3>
|
14
21
|
<select name="sel_list_name" id="sel_list_id", class="sel_list_class">
|
15
22
|
<option value="option1">Test 1</option>
|
@@ -54,6 +61,25 @@
|
|
54
61
|
|
55
62
|
<h3>Image</h3>
|
56
63
|
<img src="images/circle.png" id="image_id" name="image_name" class="image_class">
|
64
|
+
|
65
|
+
<h3>Form</h3>
|
66
|
+
<form id="form_id" class="form_class" name="form_name" action="/">
|
67
|
+
</form>
|
68
|
+
|
69
|
+
<h3>Unordered List</h3>
|
70
|
+
<ul id="ul_id" name="ul_name" class="ul_class">
|
71
|
+
<li id="li_id" name="li_name" class="li_class">Item One</li>
|
72
|
+
<li>Item Two</li>
|
73
|
+
<li>Item Three</li>
|
74
|
+
</ul>
|
75
|
+
|
76
|
+
<h3>Ordered List</h3>
|
77
|
+
<ol id="ol_id" name="ol_name" class="ol_class">
|
78
|
+
<li>Number One</li>
|
79
|
+
<li>Number Two</li>
|
80
|
+
<li>Number Three</li>
|
81
|
+
</ol>
|
82
|
+
|
57
83
|
</body>
|
58
84
|
</html>
|
59
85
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
Feature: List item
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Getting the text from a list item
|
7
|
+
When I get the text from the list item
|
8
|
+
Then the text should be "Item One"
|
9
|
+
|
10
|
+
Scenario Outline: Locating list items on the page
|
11
|
+
When I search for the list item by "<search_by>"
|
12
|
+
Then the text should be "Item One"
|
13
|
+
|
14
|
+
Scenarios:
|
15
|
+
| search_by |
|
16
|
+
| id |
|
17
|
+
| class |
|
18
|
+
| xpath |
|
19
|
+
|
20
|
+
@watir_only
|
21
|
+
Scenario Outline: Locating list items on Watir only
|
22
|
+
When I search for the list item by "<search_by>"
|
23
|
+
Then the text should be "Item One"
|
24
|
+
|
25
|
+
Scenarios:
|
26
|
+
| search_by |
|
27
|
+
| index |
|
28
|
+
|
29
|
+
@selenium_only
|
30
|
+
Scenario Outline: Locating list items on Watir only
|
31
|
+
When I search for the list item by "<search_by>"
|
32
|
+
Then the text should be "Item One"
|
33
|
+
|
34
|
+
Scenarios:
|
35
|
+
| search_by |
|
36
|
+
| name |
|
@@ -0,0 +1,39 @@
|
|
1
|
+
Feature: Ordered list
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Getting the first element from the ordered list
|
7
|
+
When I get the first item from the ordered list
|
8
|
+
Then the list item's text should be "Number One"
|
9
|
+
|
10
|
+
Scenario Outline: Locating ordered lists on the page
|
11
|
+
When I search for the ordered list by "<search_by>"
|
12
|
+
And I get the first item from the list
|
13
|
+
Then the list item's text should be "Number One"
|
14
|
+
|
15
|
+
Scenarios:
|
16
|
+
| search_by |
|
17
|
+
| id |
|
18
|
+
| class |
|
19
|
+
| xpath |
|
20
|
+
|
21
|
+
@watir_only
|
22
|
+
Scenario Outline: Locating ordered lists in Watir only
|
23
|
+
When I search for the ordered list by "<search_by>"
|
24
|
+
And I get the first item from the list
|
25
|
+
Then the list item's text should be "Number One"
|
26
|
+
|
27
|
+
Scenarios:
|
28
|
+
| search_by |
|
29
|
+
| index |
|
30
|
+
|
31
|
+
@selenium_only
|
32
|
+
Scenario Outline: Locating ordered lists in Selenium only
|
33
|
+
When I search for the ordered list by "<search_by>"
|
34
|
+
And I get the first item from the list
|
35
|
+
Then the list item's text should be "Number One"
|
36
|
+
|
37
|
+
Scenarios:
|
38
|
+
| search_by |
|
39
|
+
| name |
|
@@ -14,6 +14,22 @@ Then /^I should be able to type "([^\"]*)" into the field$/ do |value|
|
|
14
14
|
@page.send "text_field_#{@how}=".to_sym, value
|
15
15
|
end
|
16
16
|
|
17
|
+
When /^I type "([^"]*)" into the text area$/ do |text|
|
18
|
+
@page.text_area_id = text
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^the text area should contain "([^"]*)"$/ do |expected_text|
|
22
|
+
@page.text_area_id.should == expected_text
|
23
|
+
end
|
24
|
+
|
25
|
+
When /^I search for the text area by "([^"]*)"$/ do |how|
|
26
|
+
@how = how
|
27
|
+
end
|
28
|
+
|
29
|
+
Then /^I should be able to type "([^"]*)" into the area$/ do |value|
|
30
|
+
@page.send "text_area_#{@how}=".to_sym, value
|
31
|
+
end
|
32
|
+
|
17
33
|
When /^I select the link labeled "([^\"]*)"$/ do |text|
|
18
34
|
@page.google_search_id
|
19
35
|
end
|
@@ -149,3 +165,58 @@ When /^I get the image element by "([^"]*)"$/ do |how|
|
|
149
165
|
@element = @page.send "image_#{how}_image"
|
150
166
|
end
|
151
167
|
|
168
|
+
When /^I retrieve the hidden field element$/ do
|
169
|
+
@element = @page.hidden_field_id_hidden_field
|
170
|
+
end
|
171
|
+
|
172
|
+
Then /^I should see the hidden field contains "([^"]*)"$/ do |text|
|
173
|
+
@page.hidden_field_id.should == text
|
174
|
+
end
|
175
|
+
|
176
|
+
When /^I search for the hidden field by "([^"]*)"$/ do |how|
|
177
|
+
@element = @page.send "hidden_field_#{how}_hidden_field"
|
178
|
+
end
|
179
|
+
|
180
|
+
Then /^hidden field element should contains "([^"]*)"$/ do |text|
|
181
|
+
@element.value.should == text
|
182
|
+
end
|
183
|
+
|
184
|
+
Then /^I should be able to submit the form$/ do
|
185
|
+
@element.submit
|
186
|
+
end
|
187
|
+
|
188
|
+
When /^I locate the form by "([^"]*)"$/ do |how|
|
189
|
+
@element = @page.send "form_#{how}_form"
|
190
|
+
end
|
191
|
+
|
192
|
+
When /^I get the text from the list item$/ do
|
193
|
+
@text = @page.li_id
|
194
|
+
end
|
195
|
+
|
196
|
+
When /^I search for the list item by "([^"]*)"$/ do |how|
|
197
|
+
@text = @page.send "li_#{how}"
|
198
|
+
end
|
199
|
+
|
200
|
+
When /^I get the first item from the unordered list$/ do
|
201
|
+
@element = @page.ul_id_unordered_list[0]
|
202
|
+
end
|
203
|
+
|
204
|
+
Then /^the list item's text should be "([^"]*)"$/ do |expected_text|
|
205
|
+
@element.text.should == expected_text
|
206
|
+
end
|
207
|
+
|
208
|
+
When /^I search for the unordered list by "([^"]*)"$/ do |how|
|
209
|
+
@list = @page.send "ul_#{how}_unordered_list"
|
210
|
+
end
|
211
|
+
|
212
|
+
When /^I get the first item from the list$/ do
|
213
|
+
@element = @list[0]
|
214
|
+
end
|
215
|
+
|
216
|
+
When /^I get the first item from the ordered list$/ do
|
217
|
+
@element = @page.ol_id_ordered_list[0]
|
218
|
+
end
|
219
|
+
|
220
|
+
When /^I search for the ordered list by "([^"]*)"$/ do |how|
|
221
|
+
@list = @page.send "ol_#{how}_ordered_list"
|
222
|
+
end
|
@@ -18,6 +18,10 @@ When /^I retrieve a text field$/ do
|
|
18
18
|
@element = @page.text_field_id_text_field
|
19
19
|
end
|
20
20
|
|
21
|
+
When /^I retrieve the text area$/ do
|
22
|
+
@element = @page.text_area_id_text_area
|
23
|
+
end
|
24
|
+
|
21
25
|
When /^I retrieve the div element$/ do
|
22
26
|
@element = @page.div_id_div
|
23
27
|
end
|
@@ -34,6 +38,9 @@ When /^I retrieve table cell$/ do
|
|
34
38
|
@element = @page.cell_id_cell
|
35
39
|
end
|
36
40
|
|
41
|
+
When /^I locate the form$/ do
|
42
|
+
@element = @page.form_id_form
|
43
|
+
end
|
37
44
|
|
38
45
|
|
39
46
|
Then /^I should know it exists$/ do
|
@@ -44,6 +51,10 @@ Then /^I should know it is visible$/ do
|
|
44
51
|
@element.should be_visible
|
45
52
|
end
|
46
53
|
|
54
|
+
Then /^I should know it is not visible$/ do
|
55
|
+
@element.should_not be_visible
|
56
|
+
end
|
57
|
+
|
47
58
|
Then /^I should know its' text is "([^"]*)"$/ do |text|
|
48
59
|
@element.text.should == text
|
49
60
|
end
|
@@ -77,3 +88,15 @@ end
|
|
77
88
|
Then /^I should be able to click it$/ do
|
78
89
|
@element.click
|
79
90
|
end
|
91
|
+
|
92
|
+
When /^I retrieve a list item element$/ do
|
93
|
+
@element = @page.li_id_list_item
|
94
|
+
end
|
95
|
+
|
96
|
+
When /^I retrieve an unordered list element$/ do
|
97
|
+
@element = @page.ul_id_unordered_list
|
98
|
+
end
|
99
|
+
|
100
|
+
When /^I retrieve an ordered list element$/ do
|
101
|
+
@element = @page.ol_id_ordered_list
|
102
|
+
end
|