page-object 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|