page-object 0.0.5 → 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +46 -1
- data/README.md +2 -0
- data/cucumber.yml +2 -2
- data/features/button.feature +11 -2
- data/features/check_box.feature +7 -5
- data/features/div.feature +7 -15
- data/features/{element.feature → element_attributes.feature} +1 -1
- data/features/form.feature +7 -6
- data/features/hidden_field.feature +9 -1
- data/features/html/static_elements.html +6 -1
- data/features/image.feature +9 -9
- data/features/link.feature +8 -1
- data/features/list_item.feature +6 -13
- data/features/ordered_list.feature +9 -17
- data/features/radio_button.feature +7 -6
- data/features/select_list.feature +12 -10
- data/features/span.feature +7 -15
- data/features/step_definitions/accessor_steps.rb +101 -26
- data/features/step_definitions/element_steps.rb +5 -0
- data/features/support/page.rb +36 -0
- data/features/table.feature +6 -15
- data/features/table_cell.feature +6 -12
- data/features/text_area.feature +7 -6
- data/features/text_field.feature +7 -6
- data/features/unordered_list.feature +9 -17
- data/lib/page-object/accessors.rb +93 -76
- data/lib/page-object/elements.rb +1 -0
- data/lib/page-object/elements/element.rb +76 -6
- data/lib/page-object/elements/option.rb +7 -0
- data/lib/page-object/elements/select_list.rb +24 -1
- data/lib/page-object/page_factory.rb +3 -3
- data/lib/page-object/platforms/selenium_select_list.rb +29 -0
- data/lib/page-object/platforms/watir_select_list.rb +30 -0
- data/lib/page-object/selenium_page_object.rb +53 -3
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object/watir_page_object.rb +20 -1
- data/page-object.gemspec +2 -2
- data/spec/page-object/accessors_spec.rb +2 -2
- data/spec/page-object/elements/button_spec.rb +1 -1
- data/spec/page-object/elements/check_box_spec.rb +1 -1
- data/spec/page-object/elements/div_spec.rb +1 -1
- data/spec/page-object/elements/hidden_field_spec.rb +1 -1
- data/spec/page-object/elements/image_spec.rb +1 -1
- data/spec/page-object/elements/link_spec.rb +1 -1
- data/spec/page-object/elements/list_item_spec.rb +1 -1
- data/spec/page-object/elements/ordered_list_spec.rb +1 -1
- data/spec/page-object/elements/radio_button_spec.rb +1 -1
- data/spec/page-object/elements/select_list_spec.rb +43 -2
- data/spec/page-object/elements/span_spec.rb +1 -1
- data/spec/page-object/elements/table_row_spec.rb +5 -1
- data/spec/page-object/elements/table_spec.rb +1 -1
- data/spec/page-object/elements/text_area_spec.rb +1 -1
- data/spec/page-object/elements/text_field_spec.rb +1 -1
- data/spec/page-object/elements/unordered_list_spec.rb +1 -1
- metadata +9 -6
data/features/support/page.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
class Page
|
2
2
|
include PageObject
|
3
3
|
|
4
|
+
link(:hello0, {:text => "Hello", :index => 0})
|
5
|
+
link(:hello1, {:text => "Hello", :index => 1})
|
6
|
+
link(:hello2, {:text => "Hello", :index => 2})
|
7
|
+
|
4
8
|
text_field(:text_field_id, :id => "text_field_id")
|
5
9
|
text_field(:text_field_class, :class => "text_field_class")
|
6
10
|
text_field(:text_field_name, :name => "text_field_name")
|
@@ -10,6 +14,8 @@ class Page
|
|
10
14
|
text_field(:text_field_index, :index => 0)
|
11
15
|
text_field(:text_field_text, :text => "")
|
12
16
|
text_field(:text_field_value, :value => "")
|
17
|
+
text_field(:text_field_class_index, :class => "text_field_class", :index => 0)
|
18
|
+
text_field(:text_field_name_index, :name => "text_field_name", :index => 0)
|
13
19
|
|
14
20
|
text_area(:text_area_id, :id => "text_area_id")
|
15
21
|
text_area(:text_area_class, :class => "text_area_class")
|
@@ -20,6 +26,8 @@ class Page
|
|
20
26
|
text_area(:text_area_index, :index => 0)
|
21
27
|
text_area(:text_area_text, :text => "")
|
22
28
|
text_area(:text_area_value, :value => "")
|
29
|
+
text_area(:text_area_class_index, :class => "text_area_class", :index => 0)
|
30
|
+
text_area(:text_area_name_index, :name => "text_area_name", :index => 0)
|
23
31
|
|
24
32
|
hidden_field(:hidden_field_id, :id => "hidden_field_id")
|
25
33
|
hidden_field(:hidden_field_class, :class => "hidden_field_class")
|
@@ -30,6 +38,8 @@ class Page
|
|
30
38
|
hidden_field(:hidden_field_index, :index => 0)
|
31
39
|
hidden_field(:hidden_field_text, :text => "")
|
32
40
|
hidden_field(:hidden_field_value, :value => "")
|
41
|
+
hidden_field(:hidden_field_class_index, :class => "hidden_field_class", :index => 0)
|
42
|
+
hidden_field(:hidden_field_name_index, :name => "hidden_field_name", :index => 0)
|
33
43
|
|
34
44
|
link(:google_search_id, :id => "link_id")
|
35
45
|
link(:google_search_name, :name => "link_name")
|
@@ -48,18 +58,24 @@ class Page
|
|
48
58
|
select_list(:sel_list_value, :value => "option1")
|
49
59
|
select_list(:sel_list_xpath, :xpath => "//select")
|
50
60
|
select_list(:sel_list_text, :text => "Test 1")
|
61
|
+
select_list(:sel_list_class_index, :class => "sel_list_class", :index => 0)
|
62
|
+
select_list(:sel_list_name_index, :name => "sel_list_name", :index => 0)
|
51
63
|
|
52
64
|
checkbox(:cb_id, :id => 'cb_id')
|
53
65
|
checkbox(:cb_name, :name => 'cb_name')
|
54
66
|
checkbox(:cb_class, :class => 'cb_class')
|
55
67
|
checkbox(:cb_index, :index => 0)
|
56
68
|
checkbox(:cb_xpath, :xpath => "//input[@type='checkbox']")
|
69
|
+
checkbox(:cb_class_index, :class => "cb_class", :index => 0)
|
70
|
+
checkbox(:cb_name_index, :name => "cb_name", :index => 0)
|
57
71
|
|
58
72
|
radio_button(:milk_id, :id => 'milk_id')
|
59
73
|
radio_button(:milk_name, :name => 'milk_name')
|
60
74
|
radio_button(:milk_class, :class => 'milk_class')
|
61
75
|
radio_button(:milk_index, :index => 0)
|
62
76
|
radio_button(:milk_xpath, :xpath => "//input[@type='radio']")
|
77
|
+
radio_button(:milk_class_index, :class => "milk_class", :index => 0)
|
78
|
+
radio_button(:milk_name_index, :name => "milk_name", :index => 0)
|
63
79
|
|
64
80
|
radio_button(:butter_id, :id => 'butter_id')
|
65
81
|
|
@@ -68,24 +84,32 @@ class Page
|
|
68
84
|
div(:div_class, :class => 'div_class')
|
69
85
|
div(:div_index, :index => 0)
|
70
86
|
div(:div_xpath, :xpath => '//div')
|
87
|
+
div(:div_class_index, :class => "div_class", :index => 0)
|
88
|
+
div(:div_name_index, :name => "div_name", :index => 0)
|
71
89
|
|
72
90
|
span(:span_id, :id => 'span_id')
|
73
91
|
span(:span_name, :name => 'span_name')
|
74
92
|
span(:span_class, :class => 'span_class')
|
75
93
|
span(:span_index, :index => 0)
|
76
94
|
span(:span_xpath, :xpath => '//span')
|
95
|
+
span(:span_class_index, :class => "span_class", :index => 0)
|
96
|
+
span(:span_name_index, :name => "span_name", :index => 0)
|
77
97
|
|
78
98
|
table(:table_id, :id => 'table_id')
|
79
99
|
table(:table_name, :name => 'table_name')
|
80
100
|
table(:table_class, :class => 'table_class')
|
81
101
|
table(:table_index, :index => 0)
|
82
102
|
table(:table_xpath, :xpath => '//table')
|
103
|
+
table(:table_class_index, :class => "table_class", :index => 0)
|
104
|
+
table(:table_name_index, :name => "table_name", :index => 0)
|
83
105
|
|
84
106
|
cell(:cell_id, :id => 'cell_id')
|
85
107
|
cell(:cell_name, :name => 'cell_name')
|
86
108
|
cell(:cell_class, :class => 'cell_class')
|
87
109
|
cell(:cell_index, :index => 3)
|
88
110
|
cell(:cell_xpath, :xpath => '//table//tr[2]//td[2]')
|
111
|
+
cell(:cell_class_index, :class => "cell_class", :index => 0)
|
112
|
+
cell(:cell_name_index, :name => "cell_name", :index => 0)
|
89
113
|
|
90
114
|
button(:button_id, :id => 'button_id')
|
91
115
|
button(:button_name, :name => 'button_name')
|
@@ -93,34 +117,46 @@ class Page
|
|
93
117
|
button(:button_index, :index => 0)
|
94
118
|
button(:button_xpath, :xpath=> "//input[@type='submit']")
|
95
119
|
button(:button_text, :text => 'Click Me')
|
120
|
+
button(:button_class_index, :class => "button_class", :index => 0)
|
121
|
+
button(:button_name_index, :name => "button_name", :index => 0)
|
96
122
|
|
97
123
|
image(:image_id, :id => 'image_id')
|
98
124
|
image(:image_name, :name => 'image_name')
|
99
125
|
image(:image_class, :class => 'image_class')
|
100
126
|
image(:image_index, :index => 0)
|
101
127
|
image(:image_xpath, :xpath => '//img')
|
128
|
+
image(:image_class_index, :class => "image_class", :index => 0)
|
129
|
+
image(:image_name_index, :name => "image_name", :index => 0)
|
102
130
|
|
103
131
|
form(:form_id, :id => 'form_id')
|
104
132
|
form(:form_name, :id => 'form_name')
|
105
133
|
form(:form_class, :class => 'form_class')
|
106
134
|
form(:form_index, :index => 0)
|
107
135
|
form(:form_xpath, :xpath => '//form')
|
136
|
+
form(:form_class_index, :class => "form_class", :index => 0)
|
137
|
+
form(:form_name_index, :name => "form_name", :index => 0)
|
108
138
|
|
109
139
|
list_item(:li_id, :id => 'li_id')
|
110
140
|
list_item(:li_name, :name => 'li_name')
|
111
141
|
list_item(:li_class, :class => 'li_class')
|
112
142
|
list_item(:li_index, :index => 0)
|
113
143
|
list_item(:li_xpath, :xpath => '//li[1]')
|
144
|
+
list_item(:li_class_index, :class => "li_class", :index => 0)
|
145
|
+
list_item(:li_name_index, :name => "li_name", :index => 0)
|
114
146
|
|
115
147
|
unordered_list(:ul_id, :id => 'ul_id')
|
116
148
|
unordered_list(:ul_name, :name => 'ul_name')
|
117
149
|
unordered_list(:ul_class, :class => 'ul_class')
|
118
150
|
unordered_list(:ul_index, :index => 0)
|
119
151
|
unordered_list(:ul_xpath, :xpath => '//ul')
|
152
|
+
unordered_list(:ul_class_index, :class => "ul_class", :index => 0)
|
153
|
+
unordered_list(:ul_name_index, :name => "ul_name", :index => 0)
|
120
154
|
|
121
155
|
ordered_list(:ol_id, :id => 'ol_id')
|
122
156
|
ordered_list(:ol_name, :name => 'ol_name')
|
123
157
|
ordered_list(:ol_class, :class => 'ol_class')
|
124
158
|
ordered_list(:ol_index, :index => 0)
|
125
159
|
ordered_list(:ol_xpath, :xpath => '//ol')
|
160
|
+
ordered_list(:ol_class_index, :class => "ol_class", :index => 0)
|
161
|
+
ordered_list(:ol_name_index, :name => "ol_name", :index => 0)
|
126
162
|
end
|
data/features/table.feature
CHANGED
@@ -33,23 +33,14 @@ Feature: Table
|
|
33
33
|
| id |
|
34
34
|
| class |
|
35
35
|
| xpath |
|
36
|
-
|
37
|
-
|
38
|
-
@watir_only
|
39
|
-
Scenario Outline: Locating table cells on the Page with watir
|
40
|
-
When I retrieve a table element by "<search_by>"
|
41
|
-
Then the data for row "1" should be "Data1" and "Data2"
|
42
|
-
|
43
|
-
Scenarios:
|
44
|
-
| search_by |
|
45
36
|
| index |
|
37
|
+
| name |
|
46
38
|
|
47
|
-
|
48
|
-
|
49
|
-
Scenario Outline: Locating table cells on the Page with selenium
|
50
|
-
When I retrieve a table element by "<search_by>"
|
39
|
+
Scenario Outline: Locating table using multiple parameters
|
40
|
+
When I retrieve a table element by "<param1>" and "<param2>"
|
51
41
|
Then the data for row "1" should be "Data1" and "Data2"
|
52
42
|
|
53
43
|
Scenarios:
|
54
|
-
|
|
55
|
-
|
|
44
|
+
| param1 | param2 |
|
45
|
+
| class | index |
|
46
|
+
| name | index |
|
data/features/table_cell.feature
CHANGED
@@ -17,8 +17,8 @@ Feature: Table Cell
|
|
17
17
|
| id |
|
18
18
|
| class |
|
19
19
|
| xpath |
|
20
|
+
| name |
|
20
21
|
|
21
|
-
|
22
22
|
@watir_only
|
23
23
|
Scenario Outline: Locating table cells on the Page with watir
|
24
24
|
When I search for the table cell by "<search_by>"
|
@@ -28,18 +28,12 @@ Feature: Table Cell
|
|
28
28
|
| search_by |
|
29
29
|
| index |
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
When I search for the table cell by "<search_by>"
|
31
|
+
Scenario Outline: Locating table cell using multiple parameters
|
32
|
+
When I retrieve a table cell element by "<param1>" and "<param2>"
|
34
33
|
Then the cell data should be 'Data4'
|
35
34
|
|
36
35
|
Scenarios:
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
40
|
-
Scenario: Retrieve a cell from a table by id
|
41
|
-
When I retrieve table cell
|
42
|
-
Then I should know it exists
|
43
|
-
And I should know it is visible
|
44
|
-
|
36
|
+
| param1 | param2 |
|
37
|
+
| class | index |
|
38
|
+
| name | index |
|
45
39
|
|
data/features/text_area.feature
CHANGED
@@ -20,13 +20,14 @@ Feature: Text Area
|
|
20
20
|
| xpath |
|
21
21
|
| css |
|
22
22
|
| tag_name |
|
23
|
+
| index |
|
23
24
|
|
24
|
-
|
25
|
-
Scenario Outline: Locating text
|
26
|
-
When I search for the text area by "<
|
25
|
+
|
26
|
+
Scenario Outline: Locating a text area using multiple parameters
|
27
|
+
When I search for the text area by "<param1>" and "<param2>"
|
27
28
|
Then I should be able to type "I found it" into the area
|
28
29
|
|
29
30
|
Scenarios:
|
30
|
-
|
|
31
|
-
| index
|
32
|
-
|
31
|
+
| param1 | param2 |
|
32
|
+
| class | index |
|
33
|
+
| name | index |
|
data/features/text_field.feature
CHANGED
@@ -22,15 +22,16 @@ Feature: Text Fields
|
|
22
22
|
| xpath |
|
23
23
|
| css |
|
24
24
|
| tag_name |
|
25
|
-
|
26
|
-
|
27
|
-
Scenario Outline: Locating text
|
28
|
-
When I search for the text field by "<
|
25
|
+
| index |
|
26
|
+
|
27
|
+
Scenario Outline: Locating a text field using multiple parameters
|
28
|
+
When I search for the text field by "<param1>" and "<param2>"
|
29
29
|
Then I should be able to type "I found it" into the field
|
30
30
|
|
31
31
|
Scenarios:
|
32
|
-
|
|
33
|
-
| index
|
32
|
+
| param1 | param2 |
|
33
|
+
| class | index |
|
34
|
+
| name | index |
|
34
35
|
|
35
36
|
Scenario: Retrieve a text field
|
36
37
|
When I retrieve a text field
|
@@ -5,12 +5,12 @@ Feature: Unordered list
|
|
5
5
|
|
6
6
|
Scenario: Getting the first element from the unordered list
|
7
7
|
When I get the first item from the unordered list
|
8
|
-
Then the list
|
8
|
+
Then the list items text should be "Item One"
|
9
9
|
|
10
10
|
Scenario Outline: Locating unordered lists on the page
|
11
11
|
When I search for the unordered list by "<search_by>"
|
12
12
|
And I get the first item from the list
|
13
|
-
Then the list
|
13
|
+
Then the list items text should be "Item One"
|
14
14
|
And the list should contain 3 items
|
15
15
|
And each item should contain "Item"
|
16
16
|
|
@@ -19,23 +19,15 @@ Feature: Unordered list
|
|
19
19
|
| id |
|
20
20
|
| class |
|
21
21
|
| xpath |
|
22
|
-
|
23
|
-
@watir_only
|
24
|
-
Scenario Outline: Locating unordered lists in Watir only
|
25
|
-
When I search for the unordered list by "<search_by>"
|
26
|
-
And I get the first item from the list
|
27
|
-
Then the list item's text should be "Item One"
|
28
|
-
|
29
|
-
Scenarios:
|
30
|
-
| search_by |
|
31
22
|
| index |
|
23
|
+
| name |
|
32
24
|
|
33
|
-
|
34
|
-
|
35
|
-
When I search for the unordered list by "<search_by>"
|
25
|
+
Scenario Outline: Locating unordered lists using multiple parameters
|
26
|
+
When I search for the unordered list by "<param1>" and "<param2>"
|
36
27
|
And I get the first item from the list
|
37
|
-
Then the list
|
28
|
+
Then the list items text should be "Item One"
|
38
29
|
|
39
30
|
Scenarios:
|
40
|
-
|
|
41
|
-
|
|
31
|
+
| param1 | param2 |
|
32
|
+
| class | index |
|
33
|
+
| name | index |
|
@@ -32,11 +32,12 @@ module PageObject
|
|
32
32
|
# # will generate 'first_name', 'first_name=' and 'first_name_text_field' methods
|
33
33
|
#
|
34
34
|
# @param [String] the name used for the generated methods
|
35
|
-
# @param [Hash] identifier how we find a
|
35
|
+
# @param [Hash] identifier how we find a text field. You can use a multiple paramaters
|
36
|
+
# by combining of any of the following except xpath. The valid keys are:
|
36
37
|
# * :class => Watir and Selenium
|
37
38
|
# * :css => Watir and Selenium
|
38
39
|
# * :id => Watir and Selenium
|
39
|
-
# * :index => Watir
|
40
|
+
# * :index => Watir and Selenium
|
40
41
|
# * :name => Watir and Selenium
|
41
42
|
# * :tag_name => Watir and Selenium
|
42
43
|
# * :text => Watir only
|
@@ -46,13 +47,13 @@ module PageObject
|
|
46
47
|
#
|
47
48
|
def text_field(name, identifier=nil, &block)
|
48
49
|
define_method(name) do
|
49
|
-
platform.text_field_value_for identifier
|
50
|
+
platform.text_field_value_for identifier.clone
|
50
51
|
end
|
51
52
|
define_method("#{name}=") do |value|
|
52
|
-
platform.text_field_value_set(identifier, value)
|
53
|
+
platform.text_field_value_set(identifier.clone, value)
|
53
54
|
end
|
54
55
|
define_method("#{name}_text_field") do
|
55
|
-
block ? block.call(browser) : platform.text_field_for(identifier)
|
56
|
+
block ? block.call(browser) : platform.text_field_for(identifier.clone)
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
@@ -65,11 +66,12 @@ module PageObject
|
|
65
66
|
# # will generate 'user_id' and 'user_id_hidden_field' methods
|
66
67
|
#
|
67
68
|
# @param [String] the name used for the generated methods
|
68
|
-
# @param [Hash] identifier how we find a hidden field.
|
69
|
+
# @param [Hash] identifier how we find a hidden field. You can use a multiple paramaters
|
70
|
+
# by combining of any of the following except xpath. The valid keys are:
|
69
71
|
# * :class => Watir and Selenium
|
70
72
|
# * :css => Watir and Selenium
|
71
73
|
# * :id => Watir and Selenium
|
72
|
-
# * :index => Watir
|
74
|
+
# * :index => Watir and Selenium
|
73
75
|
# * :name => Watir and Selenium
|
74
76
|
# * :tag_name => Watir and Selenium
|
75
77
|
# * :text => Watir only
|
@@ -78,10 +80,10 @@ module PageObject
|
|
78
80
|
#
|
79
81
|
def hidden_field(name, identifier=nil, &block)
|
80
82
|
define_method(name) do
|
81
|
-
platform.hidden_field_value_for identifier
|
83
|
+
platform.hidden_field_value_for identifier.clone
|
82
84
|
end
|
83
85
|
define_method("#{name}_hidden_field") do
|
84
|
-
block ? block.call(browser) : platform.hidden_field_for(identifier)
|
86
|
+
block ? block.call(browser) : platform.hidden_field_for(identifier.clone)
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
@@ -95,11 +97,12 @@ module PageObject
|
|
95
97
|
# # will generate 'address', 'address=' and 'address_text_area methods
|
96
98
|
#
|
97
99
|
# @param [String] the name used for the generated methods
|
98
|
-
# @param [Hash] identifier how we find a text area.
|
100
|
+
# @param [Hash] identifier how we find a text area. You can use a multiple paramaters
|
101
|
+
# by combining of any of the following except xpath. The valid keys are:
|
99
102
|
# * :class => Watir and Selenium
|
100
103
|
# * :css => Watir and Selenium
|
101
104
|
# * :id => Watir and Selenium
|
102
|
-
# * :index => Watir
|
105
|
+
# * :index => Watir and Selenium
|
103
106
|
# * :name => Watir and Selenium
|
104
107
|
# * :tag_name => Watir and Selenium
|
105
108
|
# * :xpath => Watir and Selenium
|
@@ -107,13 +110,13 @@ module PageObject
|
|
107
110
|
#
|
108
111
|
def text_area(name, identifier=nil, &block)
|
109
112
|
define_method(name) do
|
110
|
-
platform.text_area_value_for identifier
|
113
|
+
platform.text_area_value_for identifier.clone
|
111
114
|
end
|
112
115
|
define_method("#{name}=") do |value|
|
113
|
-
platform.text_area_value_set(identifier, value)
|
116
|
+
platform.text_area_value_set(identifier.clone, value)
|
114
117
|
end
|
115
118
|
define_method("#{name}_text_area") do
|
116
|
-
block ? block.call(browser) : platform.text_area_for(identifier)
|
119
|
+
block ? block.call(browser) : platform.text_area_for(identifier.clone)
|
117
120
|
end
|
118
121
|
end
|
119
122
|
|
@@ -127,10 +130,11 @@ module PageObject
|
|
127
130
|
# # will generate 'state', 'state=' and 'state_select_list' methods
|
128
131
|
#
|
129
132
|
# @param [String] the name used for the generated methods
|
130
|
-
# @param [Hash] identifier how we find a
|
133
|
+
# @param [Hash] identifier how we find a select list. You can use a multiple paramaters
|
134
|
+
# by combining of any of the following except xpath. The valid keys are:
|
131
135
|
# * :class => Watir and Selenium
|
132
136
|
# * :id => Watir and Selenium
|
133
|
-
# * :index => Watir
|
137
|
+
# * :index => Watir and Selenium
|
134
138
|
# * :name => Watir and Selenium
|
135
139
|
# * :text => Watir only
|
136
140
|
# * :value => Watir only
|
@@ -139,13 +143,13 @@ module PageObject
|
|
139
143
|
#
|
140
144
|
def select_list(name, identifier=nil, &block)
|
141
145
|
define_method(name) do
|
142
|
-
platform.select_list_value_for identifier
|
146
|
+
platform.select_list_value_for identifier.clone
|
143
147
|
end
|
144
148
|
define_method("#{name}=") do |value|
|
145
|
-
platform.select_list_value_set(identifier, value)
|
149
|
+
platform.select_list_value_set(identifier.clone, value)
|
146
150
|
end
|
147
151
|
define_method("#{name}_select_list") do
|
148
|
-
block ? block.call(browser) : platform.select_list_for(identifier)
|
152
|
+
block ? block.call(browser) : platform.select_list_for(identifier.clone)
|
149
153
|
end
|
150
154
|
end
|
151
155
|
|
@@ -159,11 +163,12 @@ module PageObject
|
|
159
163
|
# # will generate 'add_to_cart' and 'add_to_cart_link' methods
|
160
164
|
#
|
161
165
|
# @param [String] the name used for the generated methods
|
162
|
-
# @param [Hash] identifier how we find a link.
|
166
|
+
# @param [Hash] identifier how we find a link. You can use a multiple paramaters
|
167
|
+
# by combining of any of the following except xpath. The valid keys are:
|
163
168
|
# * :class => Watir and Selenium
|
164
169
|
# * :href => Watir only
|
165
170
|
# * :id => Watir and Selenium
|
166
|
-
# * :index => Watir
|
171
|
+
# * :index => Watir and Selenium
|
167
172
|
# * :link => Watir and Selenium
|
168
173
|
# * :link_text => Watir and Selenium
|
169
174
|
# * :name => Watir and Selenium
|
@@ -173,10 +178,10 @@ module PageObject
|
|
173
178
|
#
|
174
179
|
def link(name, identifier=nil, &block)
|
175
180
|
define_method(name) do
|
176
|
-
platform.click_link_for identifier
|
181
|
+
platform.click_link_for identifier.clone
|
177
182
|
end
|
178
183
|
define_method("#{name}_link") do
|
179
|
-
block ? block.call(browser) : platform.link_for(identifier)
|
184
|
+
block ? block.call(browser) : platform.link_for(identifier.clone)
|
180
185
|
end
|
181
186
|
end
|
182
187
|
|
@@ -190,26 +195,27 @@ module PageObject
|
|
190
195
|
# # will generate 'check_active', 'uncheck_active', 'active_checked?' and 'active_checkbox' methods
|
191
196
|
#
|
192
197
|
# @param [String] the name used for the generated methods
|
193
|
-
# @param [Hash] identifier how we find a checkbox.
|
198
|
+
# @param [Hash] identifier how we find a checkbox. You can use a multiple paramaters
|
199
|
+
# by combining of any of the following except xpath. The valid keys are:
|
194
200
|
# * :class => Watir and Selenium
|
195
201
|
# * :id => Watir and Selenium
|
196
|
-
# * :index => Watir
|
202
|
+
# * :index => Watir and Selenium
|
197
203
|
# * :name => Watir and Selenium
|
198
204
|
# * :xpath => Watir and Selenium
|
199
205
|
# @param optional block to be invoked when element method is called
|
200
206
|
#
|
201
207
|
def checkbox(name, identifier=nil, &block)
|
202
208
|
define_method("check_#{name}") do
|
203
|
-
platform.check_checkbox(identifier)
|
209
|
+
platform.check_checkbox(identifier.clone)
|
204
210
|
end
|
205
211
|
define_method("uncheck_#{name}") do
|
206
|
-
platform.uncheck_checkbox(identifier)
|
212
|
+
platform.uncheck_checkbox(identifier.clone)
|
207
213
|
end
|
208
214
|
define_method("#{name}_checked?") do
|
209
|
-
platform.checkbox_checked?(identifier)
|
215
|
+
platform.checkbox_checked?(identifier.clone)
|
210
216
|
end
|
211
217
|
define_method("#{name}_checkbox") do
|
212
|
-
block ? block.call(browser) : platform.checkbox_for(identifier)
|
218
|
+
block ? block.call(browser) : platform.checkbox_for(identifier.clone)
|
213
219
|
end
|
214
220
|
end
|
215
221
|
|
@@ -224,26 +230,27 @@ module PageObject
|
|
224
230
|
# # will generate 'select_north', 'clear_north', 'north_selected?' and 'north_radio_button' methods
|
225
231
|
#
|
226
232
|
# @param [String] the name used for the generated methods
|
227
|
-
# @param [Hash] identifier how we find a radio button.
|
233
|
+
# @param [Hash] identifier how we find a radio button. You can use a multiple paramaters
|
234
|
+
# by combining of any of the following except xpath. The valid keys are:
|
228
235
|
# * :class => Watir and Selenium
|
229
236
|
# * :id => Watir and Selenium
|
230
|
-
# * :index => Watir
|
237
|
+
# * :index => Watir and Selenium
|
231
238
|
# * :name => Watir and Selenium
|
232
239
|
# * :xpath => Watir and Selenium
|
233
240
|
# @param optional block to be invoked when element method is called
|
234
241
|
#
|
235
242
|
def radio_button(name, identifier=nil, &block)
|
236
243
|
define_method("select_#{name}") do
|
237
|
-
platform.select_radio(identifier)
|
244
|
+
platform.select_radio(identifier.clone)
|
238
245
|
end
|
239
246
|
define_method("clear_#{name}") do
|
240
|
-
platform.clear_radio(identifier)
|
247
|
+
platform.clear_radio(identifier.clone)
|
241
248
|
end
|
242
249
|
define_method("#{name}_selected?") do
|
243
|
-
platform.radio_selected?(identifier)
|
250
|
+
platform.radio_selected?(identifier.clone)
|
244
251
|
end
|
245
252
|
define_method("#{name}_radio_button") do
|
246
|
-
block ? block.call(browser) : platform.radio_button_for(identifier)
|
253
|
+
block ? block.call(browser) : platform.radio_button_for(identifier.clone)
|
247
254
|
end
|
248
255
|
end
|
249
256
|
|
@@ -256,10 +263,11 @@ module PageObject
|
|
256
263
|
# # will generate 'purchase' and 'purchase_button' methods
|
257
264
|
#
|
258
265
|
# @param [String] the name used for the generated methods
|
259
|
-
# @param [Hash] identifier how we find a button.
|
266
|
+
# @param [Hash] identifier how we find a button. You can use a multiple paramaters
|
267
|
+
# by combining of any of the following except xpath. The valid keys are:
|
260
268
|
# * :class => Watir and Selenium
|
261
269
|
# * :id => Watir and Selenium
|
262
|
-
# * :index => Watir
|
270
|
+
# * :index => Watir and Selenium
|
263
271
|
# * :name => Watir and Selenium
|
264
272
|
# * :text => Watir only
|
265
273
|
# * :xpath => Watir and Selenium
|
@@ -267,10 +275,10 @@ module PageObject
|
|
267
275
|
#
|
268
276
|
def button(name, identifier=nil, &block)
|
269
277
|
define_method(name) do
|
270
|
-
platform.click_button_for identifier
|
278
|
+
platform.click_button_for identifier.clone
|
271
279
|
end
|
272
280
|
define_method("#{name}_button") do
|
273
|
-
block ? block.call(browser) : platform.button_for(identifier)
|
281
|
+
block ? block.call(browser) : platform.button_for(identifier.clone)
|
274
282
|
end
|
275
283
|
end
|
276
284
|
|
@@ -283,20 +291,21 @@ module PageObject
|
|
283
291
|
# # will generate 'message' and 'message_div' methods
|
284
292
|
#
|
285
293
|
# @param [String] the name used for the generated methods
|
286
|
-
# @param [Hash] identifier how we find a div.
|
294
|
+
# @param [Hash] identifier how we find a div. You can use a multiple paramaters
|
295
|
+
# by combining of any of the following except xpath. The valid keys are:
|
287
296
|
# * :class => Watir and Selenium
|
288
297
|
# * :id => Watir and Selenium
|
289
|
-
# * :index => Watir
|
290
|
-
# * :name => Selenium
|
298
|
+
# * :index => Watir and Selenium
|
299
|
+
# * :name => Watir and Selenium
|
291
300
|
# * :xpath => Watir and Selenium
|
292
301
|
# @param optional block to be invoked when element method is called
|
293
302
|
#
|
294
303
|
def div(name, identifier=nil, &block)
|
295
304
|
define_method(name) do
|
296
|
-
platform.div_text_for identifier
|
305
|
+
platform.div_text_for identifier.clone
|
297
306
|
end
|
298
307
|
define_method("#{name}_div") do
|
299
|
-
block ? block.call(browser) : platform.div_for(identifier)
|
308
|
+
block ? block.call(browser) : platform.div_for(identifier.clone)
|
300
309
|
end
|
301
310
|
end
|
302
311
|
|
@@ -309,20 +318,21 @@ module PageObject
|
|
309
318
|
# # will generate 'alert' and 'alert_span' methods
|
310
319
|
#
|
311
320
|
# @param [String] the name used for the generated methods
|
312
|
-
# @param [Hash] identifier how we find a span.
|
321
|
+
# @param [Hash] identifier how we find a span. You can use a multiple paramaters
|
322
|
+
# by combining of any of the following except xpath. The valid keys are:
|
313
323
|
# * :class => Watir and Selenium
|
314
324
|
# * :id => Watir and Selenium
|
315
|
-
# * :index => Watir
|
316
|
-
# * :name => Selenium
|
325
|
+
# * :index => Watir and Selenium
|
326
|
+
# * :name => Watir and Selenium
|
317
327
|
# * :xpath => Watir and Selenium
|
318
328
|
# @param optional block to be invoked when element method is called
|
319
329
|
#
|
320
330
|
def span(name, identifier=nil, &block)
|
321
331
|
define_method(name) do
|
322
|
-
platform.span_text_for identifier
|
332
|
+
platform.span_text_for identifier.clone
|
323
333
|
end
|
324
334
|
define_method("#{name}_span") do
|
325
|
-
block ? block.call(browser) : platform.span_for(identifier)
|
335
|
+
block ? block.call(browser) : platform.span_for(identifier.clone)
|
326
336
|
end
|
327
337
|
end
|
328
338
|
|
@@ -334,17 +344,18 @@ module PageObject
|
|
334
344
|
# # will generate a 'cart_table' method
|
335
345
|
#
|
336
346
|
# @param [String] the name used for the generated methods
|
337
|
-
# @param [Hash] identifier how we find a table.
|
347
|
+
# @param [Hash] identifier how we find a table. You can use a multiple paramaters
|
348
|
+
# by combining of any of the following except xpath. The valid keys are:
|
338
349
|
# * :class => Watir and Selenium
|
339
350
|
# * :id => Watir and Selenium
|
340
|
-
# * :index => Watir
|
341
|
-
# * :name => Selenium
|
351
|
+
# * :index => Watir and Selenium
|
352
|
+
# * :name => Watir and Selenium
|
342
353
|
# * :xpath => Watir and Selenium
|
343
354
|
# @param optional block to be invoked when element method is called
|
344
355
|
#
|
345
356
|
def table(name, identifier=nil, &block)
|
346
357
|
define_method("#{name}_table") do
|
347
|
-
block ? block.call(browser) : platform.table_for(identifier)
|
358
|
+
block ? block.call(browser) : platform.table_for(identifier.clone)
|
348
359
|
end
|
349
360
|
end
|
350
361
|
|
@@ -357,20 +368,21 @@ module PageObject
|
|
357
368
|
# # will generate 'total' and 'total_cell' methods
|
358
369
|
#
|
359
370
|
# @param [String] the name used for the generated methods
|
360
|
-
# @param [Hash] identifier how we find a cell.
|
371
|
+
# @param [Hash] identifier how we find a cell. You can use a multiple paramaters
|
372
|
+
# by combining of any of the following except xpath. The valid keys are:
|
361
373
|
# * :class => Watir and Selenium
|
362
374
|
# * :id => Watir and Selenium
|
363
375
|
# * :index => Watir only
|
364
|
-
# * :name => Selenium
|
376
|
+
# * :name => Watir and Selenium
|
365
377
|
# * :xpath => Watir and Selenium
|
366
378
|
# @param optional block to be invoked when element method is called
|
367
379
|
#
|
368
380
|
def cell(name, identifier=nil, &block)
|
369
381
|
define_method("#{name}") do
|
370
|
-
platform.cell_text_for identifier
|
382
|
+
platform.cell_text_for identifier.clone
|
371
383
|
end
|
372
384
|
define_method("#{name}_cell") do
|
373
|
-
block ? block.call(browser) : platform.cell_for(identifier)
|
385
|
+
block ? block.call(browser) : platform.cell_for(identifier.clone)
|
374
386
|
end
|
375
387
|
end
|
376
388
|
|
@@ -382,17 +394,18 @@ module PageObject
|
|
382
394
|
# # will generate a 'logo_image' method
|
383
395
|
#
|
384
396
|
# @param [String] the name used for the generated methods
|
385
|
-
# @param [Hash] identifier how we find an image.
|
397
|
+
# @param [Hash] identifier how we find an image. You can use a multiple paramaters
|
398
|
+
# by combining of any of the following except xpath. The valid keys are:
|
386
399
|
# * :class => Watir and Selenium
|
387
400
|
# * :id => Watir and Selenium
|
388
|
-
# * :index => Watir
|
401
|
+
# * :index => Watir and Selenium
|
389
402
|
# * :name => Watir and Selenium
|
390
403
|
# * :xpath => Watir and Selenium
|
391
404
|
# @param optional block to be invoked when element method is called
|
392
405
|
#
|
393
406
|
def image(name, identifier=nil, &block)
|
394
407
|
define_method("#{name}_image") do
|
395
|
-
block ? block.call(browser) : platform.image_for(identifier)
|
408
|
+
block ? block.call(browser) : platform.image_for(identifier.clone)
|
396
409
|
end
|
397
410
|
end
|
398
411
|
|
@@ -404,16 +417,17 @@ module PageObject
|
|
404
417
|
# # will generate a 'login_form' method
|
405
418
|
#
|
406
419
|
# @param [String] the name used for the generated methods
|
407
|
-
# @param [Hash] identifier how we find a form.
|
420
|
+
# @param [Hash] identifier how we find a form. You can use a multiple paramaters
|
421
|
+
# by combining of any of the following except xpath. The valid keys are:
|
408
422
|
# * :class => Watir and Selenium
|
409
423
|
# * :id => Watir and Selenium
|
410
|
-
# * :index => Watir
|
424
|
+
# * :index => Watir and Selenium
|
411
425
|
# * :xpath => Watir and Selenium
|
412
426
|
# @param optional block to be invoked when element method is called
|
413
427
|
#
|
414
428
|
def form(name, identifier=nil, &block)
|
415
429
|
define_method("#{name}_form") do
|
416
|
-
block ? block.call(browser) : platform.form_for(identifier)
|
430
|
+
block ? block.call(browser) : platform.form_for(identifier.clone)
|
417
431
|
end
|
418
432
|
end
|
419
433
|
|
@@ -426,20 +440,21 @@ module PageObject
|
|
426
440
|
# # will generate 'item_one' and 'item_one_list_item' methods
|
427
441
|
#
|
428
442
|
# @param [String] the name used for the generated methods
|
429
|
-
# @param [Hash] identifier how we find a list item.
|
443
|
+
# @param [Hash] identifier how we find a list item. You can use a multiple paramaters
|
444
|
+
# by combining of any of the following except xpath. The valid keys are:
|
430
445
|
# * :class => Watir and Selenium
|
431
446
|
# * :id => Watir and Selenium
|
432
|
-
# * :index => Watir
|
433
|
-
# * :name => Selenium
|
447
|
+
# * :index => Watir and Selenium
|
448
|
+
# * :name => Watir and Selenium
|
434
449
|
# * :xpath => Watir and Selenium
|
435
450
|
# @param optional block to be invoked when element method is called
|
436
451
|
#
|
437
452
|
def list_item(name, identifier=nil, &block)
|
438
453
|
define_method(name) do
|
439
|
-
platform.list_item_text_for identifier
|
454
|
+
platform.list_item_text_for identifier.clone
|
440
455
|
end
|
441
456
|
define_method("#{name}_list_item") do
|
442
|
-
block ? block.call(browser) : platform.list_item_for(identifier)
|
457
|
+
block ? block.call(browser) : platform.list_item_for(identifier.clone)
|
443
458
|
end
|
444
459
|
end
|
445
460
|
|
@@ -451,17 +466,18 @@ module PageObject
|
|
451
466
|
# # will generate a 'menu_unordered_list' method
|
452
467
|
#
|
453
468
|
# @param [String] the name used for the generated methods
|
454
|
-
# @param [Hash] identifier how we find an unordered list.
|
469
|
+
# @param [Hash] identifier how we find an unordered list. You can use a multiple paramaters
|
470
|
+
# by combining of any of the following except xpath. The valid keys are:
|
455
471
|
# * :class => Watir and Selenium
|
456
472
|
# * :id => Watir and Selenium
|
457
|
-
# * :index => Watir
|
458
|
-
# * :name => Selenium
|
473
|
+
# * :index => Watir and Selenium
|
474
|
+
# * :name => Watir and Selenium
|
459
475
|
# * :xpath => Watir and Selenium
|
460
476
|
# @param optional block to be invoked when element method is called
|
461
477
|
#
|
462
478
|
def unordered_list(name, identifier=nil, &block)
|
463
479
|
define_method("#{name}_unordered_list") do
|
464
|
-
block ? block.call(browser) : platform.unordered_list_for(identifier)
|
480
|
+
block ? block.call(browser) : platform.unordered_list_for(identifier.clone)
|
465
481
|
end
|
466
482
|
end
|
467
483
|
|
@@ -473,17 +489,18 @@ module PageObject
|
|
473
489
|
# # will generate a 'top_five_ordered_list' method
|
474
490
|
#
|
475
491
|
# @param [String] the name used for the generated methods
|
476
|
-
# @param [Hash] identifier how we find an
|
492
|
+
# @param [Hash] identifier how we find an ordered list. You can use a multiple paramaters
|
493
|
+
# by combining of any of the following except xpath. The valid keys are:
|
477
494
|
# * :class => Watir and Selenium
|
478
495
|
# * :id => Watir and Selenium
|
479
|
-
# * :index => Watir
|
480
|
-
# * :name => Selenium
|
496
|
+
# * :index => Watir and Selenium
|
497
|
+
# * :name => Watir and Selenium
|
481
498
|
# * :xpath => Watir and Selenium
|
482
499
|
# @param optional block to be invoked when element method is called
|
483
500
|
#
|
484
501
|
def ordered_list(name, identifier=nil, &block)
|
485
502
|
define_method("#{name}_ordered_list") do
|
486
|
-
block ? block.call(browser) : platform.ordered_list_for(identifier)
|
503
|
+
block ? block.call(browser) : platform.ordered_list_for(identifier.clone)
|
487
504
|
end
|
488
505
|
end
|
489
506
|
end
|