page-object 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,13 @@
1
+ === Version 0.2.3 / 2011-08-01
2
+ * Enhancements
3
+ * Can now find a TableCell by its' text
4
+ * If we receive an error calling #attach_to_window, wait one second and try again
5
+ * Will call callback method #initialize_page method if it exists on a page object
6
+ * Renamed all *_<element_type> methods to *_element. Created alias for backward compatability
7
+ * Delegating unknown method calls on Element to the driver element object
8
+ * Improved block handling when passed to element creation method
9
+ * Updated to use selenium-webdriver 2.3.2
10
+
1
11
  === Version 0.2.2 / 2011-07-31
2
12
  * Enhancements
3
13
  * Can find frame by name
@@ -53,8 +53,7 @@ html>
53
53
  </tr>
54
54
  <tr>
55
55
  <td>Data3</td>
56
- <td id='cell_id'
57
- , name='cell_name' class='cell_class'>Data4</td>
56
+ <td id='cell_id' name='cell_name' class='cell_class'>Data4</td>
58
57
  </tr>
59
58
  </table>
60
59
 
@@ -181,11 +181,11 @@ When /^I retrieve a table cell element by "([^"]*)" and "([^"]*)"$/ do |param1,
181
181
  end
182
182
 
183
183
  When /^I retrieve a table element by "([^\"]*)"$/ do |how|
184
- @element = @page.send "table_#{how}_table"
184
+ @element = @page.send "table_#{how}_element"
185
185
  end
186
186
 
187
187
  When /^I retrieve a table element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
188
- @element = @page.send "table_#{param1}_#{param2}_table"
188
+ @element = @page.send "table_#{param1}_#{param2}_element"
189
189
  end
190
190
 
191
191
  When /^I get the image element$/ do
@@ -201,15 +201,15 @@ Then /^the image should be "([^\"]*)" pixels tall$/ do |height|
201
201
  end
202
202
 
203
203
  When /^I get the image element by "([^\"]*)"$/ do |how|
204
- @element = @page.send "image_#{how}_image"
204
+ @element = @page.send "image_#{how}_element"
205
205
  end
206
206
 
207
207
  When /^I get the image element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
208
- @element = @page.send "image_#{param1}_#{param2}_image"
208
+ @element = @page.send "image_#{param1}_#{param2}_element"
209
209
  end
210
210
 
211
211
  When /^I retrieve the hidden field element$/ do
212
- @element = @page.hidden_field_id_hidden_field
212
+ @element = @page.hidden_field_id_element
213
213
  end
214
214
 
215
215
  Then /^I should see the hidden field contains "([^\"]*)"$/ do |text|
@@ -217,7 +217,7 @@ Then /^I should see the hidden field contains "([^\"]*)"$/ do |text|
217
217
  end
218
218
 
219
219
  When /^I search for the hidden field by "([^\"]*)"$/ do |how|
220
- @element = @page.send "hidden_field_#{how}_hidden_field"
220
+ @element = @page.send "hidden_field_#{how}_element"
221
221
  end
222
222
 
223
223
  Then /^hidden field element should contains "([^\"]*)"$/ do |text|
@@ -225,7 +225,7 @@ Then /^hidden field element should contains "([^\"]*)"$/ do |text|
225
225
  end
226
226
 
227
227
  When /^I search for the hidden field by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
228
- @element = @page.send "hidden_field_#{param1}_#{param2}_hidden_field"
228
+ @element = @page.send "hidden_field_#{param1}_#{param2}_element"
229
229
  end
230
230
 
231
231
  Then /^I should be able to submit the form$/ do
@@ -233,11 +233,11 @@ Then /^I should be able to submit the form$/ do
233
233
  end
234
234
 
235
235
  When /^I locate the form by "([^\"]*)"$/ do |how|
236
- @element = @page.send "form_#{how}_form"
236
+ @element = @page.send "form_#{how}_element"
237
237
  end
238
238
 
239
239
  When /^I locate the form using "([^"]*)" and "([^"]*)"$/ do |param1, param2|
240
- @element = @page.send "form_#{param1}_#{param2}_form"
240
+ @element = @page.send "form_#{param1}_#{param2}_element"
241
241
  end
242
242
 
243
243
  When /^I get the text from the list item$/ do
@@ -253,7 +253,7 @@ When /^I search for the list item by "([^"]*)" and "([^"]*)"$/ do |param1, param
253
253
  end
254
254
 
255
255
  When /^I get the first item from the unordered list$/ do
256
- @element = @page.ul_id_unordered_list[0]
256
+ @element = @page.ul_id_element[0]
257
257
  end
258
258
 
259
259
  Then /^the list items text should be "([^\"]*)"$/ do |expected_text|
@@ -261,11 +261,11 @@ Then /^the list items text should be "([^\"]*)"$/ do |expected_text|
261
261
  end
262
262
 
263
263
  When /^I search for the unordered list by "([^\"]*)"$/ do |how|
264
- @list = @page.send "ul_#{how}_unordered_list"
264
+ @list = @page.send "ul_#{how}_element"
265
265
  end
266
266
 
267
267
  When /^I search for the unordered list by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
268
- @list = @page.send "ul_#{param1}_#{param2}_unordered_list"
268
+ @list = @page.send "ul_#{param1}_#{param2}_element"
269
269
  end
270
270
 
271
271
 
@@ -274,15 +274,15 @@ When /^I get the first item from the list$/ do
274
274
  end
275
275
 
276
276
  When /^I get the first item from the ordered list$/ do
277
- @element = @page.ol_id_ordered_list[0]
277
+ @element = @page.ol_id_element[0]
278
278
  end
279
279
 
280
280
  When /^I search for the ordered list by "([^\"]*)"$/ do |how|
281
- @list = @page.send "ol_#{how}_ordered_list"
281
+ @list = @page.send "ol_#{how}_element"
282
282
  end
283
283
 
284
284
  When /^I search for the ordered list by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
285
- @list = @page.send "ol_#{param1}_#{param2}_ordered_list"
285
+ @list = @page.send "ol_#{param1}_#{param2}_element"
286
286
  end
287
287
 
288
288
  Then /^the table should have "([^\"]*)" rows$/ do |rows|
@@ -315,7 +315,7 @@ Then /^each item should contain "([^\"]*)"$/ do |text|
315
315
  end
316
316
 
317
317
  Then /^option "([^\"]*)" should contain "([^\"]*)"$/ do |opt_num, text|
318
- @element = @page.send "sel_list_#{@how}_select_list".to_sym
318
+ @element = @page.send "sel_list_#{@how}_element".to_sym
319
319
  @element[opt_num.to_i - 1].text.should == text
320
320
  end
321
321
 
@@ -3,50 +3,49 @@ When /^I select a link labeled "([^"]*)" and index "([^"]*)"$/ do |label, index|
3
3
  end
4
4
 
5
5
  When /^I retrieve a check box element$/ do
6
- @element = @page.cb_id_checkbox
6
+ @element = @page.cb_id_element
7
7
  end
8
8
 
9
9
  When /^I retrieve a link element$/ do
10
- @element = @page.google_search_id_link
10
+ @element = @page.google_search_id_element
11
11
  end
12
12
 
13
13
  When /^I retrieve a radio button$/ do
14
- @element = @page.milk_id_radio_button
14
+ @element = @page.milk_id_element
15
15
  end
16
16
 
17
17
  When /^I retrieve a select list$/ do
18
- @element = @page.sel_list_id_select_list
18
+ @element = @page.sel_list_id_element
19
19
  end
20
20
 
21
21
  When /^I retrieve a text field$/ do
22
- @element = @page.text_field_id_text_field
22
+ @element = @page.text_field_id_element
23
23
  end
24
24
 
25
25
  When /^I retrieve the text area$/ do
26
- @element = @page.text_area_id_text_area
26
+ @element = @page.text_area_id_element
27
27
  end
28
28
 
29
29
  When /^I retrieve the div element$/ do
30
- @element = @page.div_id_div
30
+ @element = @page.div_id_element
31
31
  end
32
32
 
33
33
  When /^I retrieve a table element$/ do
34
- @element = @page.table_id_table
34
+ @element = @page.table_id_element
35
35
  end
36
36
 
37
37
  When /^I retrieve a button element$/ do
38
- @element = @page.button_id_button
38
+ @element = @page.button_id_element
39
39
  end
40
40
 
41
41
  When /^I retrieve table cell$/ do
42
- @element = @page.cell_id_cell
42
+ @element = @page.cell_id_element
43
43
  end
44
44
 
45
45
  When /^I locate the form$/ do
46
- @element = @page.form_id_form
46
+ @element = @page.form_id_element
47
47
  end
48
48
 
49
-
50
49
  Then /^I should know it exists$/ do
51
50
  @element.should exist
52
51
  end
@@ -94,17 +93,17 @@ Then /^I should be able to click it$/ do
94
93
  end
95
94
 
96
95
  When /^I retrieve a list item element$/ do
97
- @element = @page.li_id_list_item
96
+ @element = @page.li_id_element
98
97
  end
99
98
 
100
99
  When /^I retrieve an unordered list element$/ do
101
- @element = @page.ul_id_unordered_list
100
+ @element = @page.ul_id_element
102
101
  end
103
102
 
104
103
  When /^I retrieve an ordered list element$/ do
105
- @element = @page.ol_id_ordered_list
104
+ @element = @page.ol_id_element
106
105
  end
107
106
 
108
107
  When /^I clear the text field$/ do
109
- @page.text_field_id_text_field.clear
108
+ @page.text_field_id_element.clear
110
109
  end
@@ -108,6 +108,7 @@ class Page
108
108
  cell(:cell_name, :name => 'cell_name')
109
109
  cell(:cell_class, :class => 'cell_class')
110
110
  cell(:cell_index, :index => 3)
111
+ cell(:cell_text, :text => 'Data4')
111
112
  cell(:cell_xpath, :xpath => '//table//tr[2]//td[2]')
112
113
  cell(:cell_class_index, :class => "cell_class", :index => 0)
113
114
  cell(:cell_name_index, :name => "cell_name", :index => 0)
@@ -18,6 +18,7 @@ Feature: Table Cell
18
18
  | class |
19
19
  | xpath |
20
20
  | name |
21
+ | text |
21
22
 
22
23
  @watir_only
23
24
  Scenario Outline: Locating table cells on the Page with watir
data/lib/page-object.rb CHANGED
@@ -38,7 +38,8 @@ module PageObject
38
38
  attr_reader :platform
39
39
 
40
40
  #
41
- # Construct a new page object.
41
+ # Construct a new page object. Upon initialization of the page it will call a method named
42
+ # initialize_page if it exists.
42
43
  #
43
44
  # @param [Watir::Browser or Selenium::WebDriver::Driver] the platform browser to use
44
45
  # @param [bool] open the page if page_url is set
@@ -46,6 +47,7 @@ module PageObject
46
47
  def initialize(browser, visit=false)
47
48
  @browser = browser
48
49
  include_platform_driver(browser)
50
+ initialize_page if respond_to?(:initialize_page)
49
51
  goto if visit && respond_to?(:goto)
50
52
  end
51
53
 
@@ -150,7 +152,8 @@ module PageObject
150
152
 
151
153
  #
152
154
  # Attach to a running window. You can locate the window using either
153
- # the window's title or url.
155
+ # the window's title or url. If it failes to connect to a window it will
156
+ # pause for 1 second and try again.
154
157
  #
155
158
  # @example
156
159
  # page.attach_to_window(:title => "other window's title")
@@ -159,7 +162,12 @@ module PageObject
159
162
  # be the entire url - it can just be the page name like index.html
160
163
  #
161
164
  def attach_to_window(identifier)
162
- platform.attach_to_window(identifier)
165
+ begin
166
+ platform.attach_to_window(identifier)
167
+ rescue
168
+ sleep 1
169
+ platform.attach_to_window(identifier)
170
+ end
163
171
  end
164
172
 
165
173
  #
@@ -174,4 +182,8 @@ module PageObject
174
182
  def include_platform_driver(browser)
175
183
  @platform = load_platform(browser, PageObject::Platforms.get)
176
184
  end
185
+
186
+ def call_block(&block)
187
+ block.arity == 1 ? block.call(self) : self.instance_eval(&block)
188
+ end
177
189
  end
@@ -51,7 +51,7 @@ module PageObject
51
51
  #
52
52
  # @example
53
53
  # text_field(:first_name, :id => "first_name")
54
- # # will generate 'first_name', 'first_name=' and 'first_name_text_field' methods
54
+ # # will generate 'first_name', 'first_name=' and 'first_name_element' methods
55
55
  #
56
56
  # @param [String] the name used for the generated methods
57
57
  # @param [Hash] identifier how we find a text field. You can use a multiple paramaters
@@ -74,18 +74,20 @@ module PageObject
74
74
  define_method("#{name}=") do |value|
75
75
  platform.text_field_value_set(identifier.clone, value)
76
76
  end
77
- define_method("#{name}_text_field") do
78
- block ? block.call(browser) : platform.text_field_for(identifier.clone)
77
+ define_method("#{name}_element") do
78
+ return call_block(&block) if block
79
+ platform.text_field_for(identifier.clone)
79
80
  end
81
+ alias_method "#{name}_text_field".to_sym, "#{name}_element".to_sym
80
82
  end
81
-
83
+
82
84
  #
83
85
  # adds two methods to the page object - one to get the text from a hidden field
84
86
  # and another to retrieve the hidden field element.
85
87
  #
86
88
  # @example
87
89
  # hidden_field(:user_id, :id => "user_identity")
88
- # # will generate 'user_id' and 'user_id_hidden_field' methods
90
+ # # will generate 'user_id' and 'user_id_element' methods
89
91
  #
90
92
  # @param [String] the name used for the generated methods
91
93
  # @param [Hash] identifier how we find a hidden field. You can use a multiple paramaters
@@ -104,9 +106,11 @@ module PageObject
104
106
  define_method(name) do
105
107
  platform.hidden_field_value_for identifier.clone
106
108
  end
107
- define_method("#{name}_hidden_field") do
108
- block ? block.call(browser) : platform.hidden_field_for(identifier.clone)
109
+ define_method("#{name}_element") do
110
+ return call_block(&block) if block
111
+ platform.hidden_field_for(identifier.clone)
109
112
  end
113
+ alias_method "#{name}_hidden_field".to_sym, "#{name}_element".to_sym
110
114
  end
111
115
 
112
116
  #
@@ -116,7 +120,7 @@ module PageObject
116
120
  #
117
121
  # @example
118
122
  # text_area(:address, :id => "address")
119
- # # will generate 'address', 'address=' and 'address_text_area methods
123
+ # # will generate 'address', 'address=' and 'address_element methods
120
124
  #
121
125
  # @param [String] the name used for the generated methods
122
126
  # @param [Hash] identifier how we find a text area. You can use a multiple paramaters
@@ -137,9 +141,11 @@ module PageObject
137
141
  define_method("#{name}=") do |value|
138
142
  platform.text_area_value_set(identifier.clone, value)
139
143
  end
140
- define_method("#{name}_text_area") do
141
- block ? block.call(browser) : platform.text_area_for(identifier.clone)
144
+ define_method("#{name}_element") do
145
+ return call_block(&block) if block
146
+ platform.text_area_for(identifier.clone)
142
147
  end
148
+ alias_method "#{name}_text_area".to_sym, "#{name}_element".to_sym
143
149
  end
144
150
 
145
151
  #
@@ -149,7 +155,7 @@ module PageObject
149
155
  #
150
156
  # @example
151
157
  # select_list(:state, :id => "state")
152
- # # will generate 'state', 'state=' and 'state_select_list' methods
158
+ # # will generate 'state', 'state=' and 'state_element' methods
153
159
  #
154
160
  # @param [String] the name used for the generated methods
155
161
  # @param [Hash] identifier how we find a select list. You can use a multiple paramaters
@@ -170,9 +176,11 @@ module PageObject
170
176
  define_method("#{name}=") do |value|
171
177
  platform.select_list_value_set(identifier.clone, value)
172
178
  end
173
- define_method("#{name}_select_list") do
174
- block ? block.call(browser) : platform.select_list_for(identifier.clone)
179
+ define_method("#{name}_element") do
180
+ return call_block(&block) if block
181
+ platform.select_list_for(identifier.clone)
175
182
  end
183
+ alias_method "#{name}_select_list".to_sym, "#{name}_element".to_sym
176
184
  end
177
185
 
178
186
  #
@@ -182,7 +190,7 @@ module PageObject
182
190
  #
183
191
  # @example
184
192
  # link(:add_to_cart, :text => "Add to Cart")
185
- # # will generate 'add_to_cart' and 'add_to_cart_link' methods
193
+ # # will generate 'add_to_cart' and 'add_to_cart_element' methods
186
194
  #
187
195
  # @param [String] the name used for the generated methods
188
196
  # @param [Hash] identifier how we find a link. You can use a multiple paramaters
@@ -202,9 +210,11 @@ module PageObject
202
210
  define_method(name) do
203
211
  platform.click_link_for identifier.clone
204
212
  end
205
- define_method("#{name}_link") do
206
- block ? block.call(browser) : platform.link_for(identifier.clone)
213
+ define_method("#{name}_element") do
214
+ return call_block(&block) if block
215
+ platform.link_for(identifier.clone)
207
216
  end
217
+ alias_method "#{name}_link".to_sym, "#{name}_element".to_sym
208
218
  end
209
219
 
210
220
  #
@@ -214,7 +224,7 @@ module PageObject
214
224
  #
215
225
  # @example
216
226
  # checkbox(:active, :name => "is_active")
217
- # # will generate 'check_active', 'uncheck_active', 'active_checked?' and 'active_checkbox' methods
227
+ # # will generate 'check_active', 'uncheck_active', 'active_checked?' and 'active_element' methods
218
228
  #
219
229
  # @param [String] the name used for the generated methods
220
230
  # @param [Hash] identifier how we find a checkbox. You can use a multiple paramaters
@@ -236,9 +246,11 @@ module PageObject
236
246
  define_method("#{name}_checked?") do
237
247
  platform.checkbox_checked?(identifier.clone)
238
248
  end
239
- define_method("#{name}_checkbox") do
240
- block ? block.call(browser) : platform.checkbox_for(identifier.clone)
249
+ define_method("#{name}_element") do
250
+ return call_block(&block) if block
251
+ platform.checkbox_for(identifier.clone)
241
252
  end
253
+ alias_method "#{name}_checkbox".to_sym, "#{name}_element".to_sym
242
254
  end
243
255
 
244
256
  #
@@ -249,7 +261,7 @@ module PageObject
249
261
  #
250
262
  # @example
251
263
  # radio_button(:north, :id => "north")
252
- # # will generate 'select_north', 'clear_north', 'north_selected?' and 'north_radio_button' methods
264
+ # # will generate 'select_north', 'clear_north', 'north_selected?' and 'north_element' methods
253
265
  #
254
266
  # @param [String] the name used for the generated methods
255
267
  # @param [Hash] identifier how we find a radio button. You can use a multiple paramaters
@@ -271,9 +283,11 @@ module PageObject
271
283
  define_method("#{name}_selected?") do
272
284
  platform.radio_selected?(identifier.clone)
273
285
  end
274
- define_method("#{name}_radio_button") do
275
- block ? block.call(browser) : platform.radio_button_for(identifier.clone)
286
+ define_method("#{name}_element") do
287
+ return call_block(&block) if block
288
+ platform.radio_button_for(identifier.clone)
276
289
  end
290
+ alias_method "#{name}_radio_button".to_sym, "#{name}_element".to_sym
277
291
  end
278
292
 
279
293
  #
@@ -282,7 +296,7 @@ module PageObject
282
296
  #
283
297
  # @example
284
298
  # button(:purchase, :id => 'purchase')
285
- # # will generate 'purchase' and 'purchase_button' methods
299
+ # # will generate 'purchase' and 'purchase_element' methods
286
300
  #
287
301
  # @param [String] the name used for the generated methods
288
302
  # @param [Hash] identifier how we find a button. You can use a multiple paramaters
@@ -299,9 +313,11 @@ module PageObject
299
313
  define_method(name) do
300
314
  platform.click_button_for identifier.clone
301
315
  end
302
- define_method("#{name}_button") do
303
- block ? block.call(browser) : platform.button_for(identifier.clone)
316
+ define_method("#{name}_element") do
317
+ return call_block(&block) if block
318
+ platform.button_for(identifier.clone)
304
319
  end
320
+ alias_method "#{name}_button".to_sym, "#{name}_element".to_sym
305
321
  end
306
322
 
307
323
  #
@@ -310,7 +326,7 @@ module PageObject
310
326
  #
311
327
  # @example
312
328
  # div(:message, :id => 'message')
313
- # # will generate 'message' and 'message_div' methods
329
+ # # will generate 'message' and 'message_element' methods
314
330
  #
315
331
  # @param [String] the name used for the generated methods
316
332
  # @param [Hash] identifier how we find a div. You can use a multiple paramaters
@@ -327,9 +343,11 @@ module PageObject
327
343
  define_method(name) do
328
344
  platform.div_text_for identifier.clone
329
345
  end
330
- define_method("#{name}_div") do
331
- block ? block.call(browser) : platform.div_for(identifier.clone)
346
+ define_method("#{name}_element") do
347
+ return call_block(&block) if block
348
+ platform.div_for(identifier.clone)
332
349
  end
350
+ alias_method "#{name}_div".to_sym, "#{name}_element".to_sym
333
351
  end
334
352
 
335
353
  #
@@ -338,7 +356,7 @@ module PageObject
338
356
  #
339
357
  # @example
340
358
  # span(:alert, :id => 'alert')
341
- # # will generate 'alert' and 'alert_span' methods
359
+ # # will generate 'alert' and 'alert_element' methods
342
360
  #
343
361
  # @param [String] the name used for the generated methods
344
362
  # @param [Hash] identifier how we find a span. You can use a multiple paramaters
@@ -354,9 +372,11 @@ module PageObject
354
372
  define_method(name) do
355
373
  platform.span_text_for identifier.clone
356
374
  end
357
- define_method("#{name}_span") do
358
- block ? block.call(browser) : platform.span_for(identifier.clone)
375
+ define_method("#{name}_element") do
376
+ return call_block(&block) if block
377
+ platform.span_for(identifier.clone)
359
378
  end
379
+ alias_method "#{name}_span".to_sym, "#{name}_element".to_sym
360
380
  end
361
381
 
362
382
  #
@@ -364,7 +384,7 @@ module PageObject
364
384
  #
365
385
  # @example
366
386
  # table(:cart, :id => 'shopping_cart')
367
- # # will generate a 'cart_table' method
387
+ # # will generate a 'cart_element' method
368
388
  #
369
389
  # @param [String] the name used for the generated methods
370
390
  # @param [Hash] identifier how we find a table. You can use a multiple paramaters
@@ -377,9 +397,11 @@ module PageObject
377
397
  # @param optional block to be invoked when element method is called
378
398
  #
379
399
  def table(name, identifier=nil, &block)
380
- define_method("#{name}_table") do
381
- block ? block.call(browser) : platform.table_for(identifier.clone)
400
+ define_method("#{name}_element") do
401
+ return call_block(&block) if block
402
+ platform.table_for(identifier.clone)
382
403
  end
404
+ alias_method "#{name}_table".to_sym, "#{name}_element".to_sym
383
405
  end
384
406
 
385
407
  #
@@ -388,7 +410,7 @@ module PageObject
388
410
  #
389
411
  # @example
390
412
  # cell(:total, :id => 'total_cell')
391
- # # will generate 'total' and 'total_cell' methods
413
+ # # will generate 'total' and 'total_element' methods
392
414
  #
393
415
  # @param [String] the name used for the generated methods
394
416
  # @param [Hash] identifier how we find a cell. You can use a multiple paramaters
@@ -397,6 +419,7 @@ module PageObject
397
419
  # * :id => Watir and Selenium
398
420
  # * :index => Watir only
399
421
  # * :name => Watir and Selenium
422
+ # * :text => Watir and Selenium
400
423
  # * :xpath => Watir and Selenium
401
424
  # @param optional block to be invoked when element method is called
402
425
  #
@@ -404,9 +427,11 @@ module PageObject
404
427
  define_method("#{name}") do
405
428
  platform.cell_text_for identifier.clone
406
429
  end
407
- define_method("#{name}_cell") do
408
- block ? block.call(browser) : platform.cell_for(identifier.clone)
430
+ define_method("#{name}_element") do
431
+ return call_block(&block) if block
432
+ platform.cell_for(identifier.clone)
409
433
  end
434
+ alias_method "#{name}_cell".to_sym, "#{name}_element".to_sym
410
435
  end
411
436
 
412
437
  #
@@ -414,7 +439,7 @@ module PageObject
414
439
  #
415
440
  # @example
416
441
  # image(:logo, :id => 'logo')
417
- # # will generate a 'logo_image' method
442
+ # # will generate a 'logo_element' method
418
443
  #
419
444
  # @param [String] the name used for the generated methods
420
445
  # @param [Hash] identifier how we find an image. You can use a multiple paramaters
@@ -427,9 +452,11 @@ module PageObject
427
452
  # @param optional block to be invoked when element method is called
428
453
  #
429
454
  def image(name, identifier=nil, &block)
430
- define_method("#{name}_image") do
431
- block ? block.call(browser) : platform.image_for(identifier.clone)
455
+ define_method("#{name}_element") do
456
+ return call_block(&block) if block
457
+ platform.image_for(identifier.clone)
432
458
  end
459
+ alias_method "#{name}_image".to_sym, "#{name}_element".to_sym
433
460
  end
434
461
 
435
462
  #
@@ -437,7 +464,7 @@ module PageObject
437
464
  #
438
465
  # @example
439
466
  # form(:login, :id => 'login')
440
- # # will generate a 'login_form' method
467
+ # # will generate a 'login_element' method
441
468
  #
442
469
  # @param [String] the name used for the generated methods
443
470
  # @param [Hash] identifier how we find a form. You can use a multiple paramaters
@@ -449,9 +476,11 @@ module PageObject
449
476
  # @param optional block to be invoked when element method is called
450
477
  #
451
478
  def form(name, identifier=nil, &block)
452
- define_method("#{name}_form") do
453
- block ? block.call(browser) : platform.form_for(identifier.clone)
479
+ define_method("#{name}_element") do
480
+ return call_block(&block) if block
481
+ platform.form_for(identifier.clone)
454
482
  end
483
+ alias_method "#{name}_form".to_sym, "#{name}_element".to_sym
455
484
  end
456
485
 
457
486
  #
@@ -460,7 +489,7 @@ module PageObject
460
489
  #
461
490
  # @example
462
491
  # list_item(:item_one, :id => 'one')
463
- # # will generate 'item_one' and 'item_one_list_item' methods
492
+ # # will generate 'item_one' and 'item_one_element' methods
464
493
  #
465
494
  # @param [String] the name used for the generated methods
466
495
  # @param [Hash] identifier how we find a list item. You can use a multiple paramaters
@@ -476,9 +505,11 @@ module PageObject
476
505
  define_method(name) do
477
506
  platform.list_item_text_for identifier.clone
478
507
  end
479
- define_method("#{name}_list_item") do
480
- block ? block.call(browser) : platform.list_item_for(identifier.clone)
508
+ define_method("#{name}_element") do
509
+ return call_block(&block) if block
510
+ platform.list_item_for(identifier.clone)
481
511
  end
512
+ alias_method "#{name}_list_item".to_sym, "#{name}_element".to_sym
482
513
  end
483
514
 
484
515
  #
@@ -486,7 +517,7 @@ module PageObject
486
517
  #
487
518
  # @example
488
519
  # unordered_list(:menu, :id => 'main_menu')
489
- # # will generate a 'menu_unordered_list' method
520
+ # # will generate a 'menu_element' method
490
521
  #
491
522
  # @param [String] the name used for the generated methods
492
523
  # @param [Hash] identifier how we find an unordered list. You can use a multiple paramaters
@@ -499,9 +530,11 @@ module PageObject
499
530
  # @param optional block to be invoked when element method is called
500
531
  #
501
532
  def unordered_list(name, identifier=nil, &block)
502
- define_method("#{name}_unordered_list") do
503
- block ? block.call(browser) : platform.unordered_list_for(identifier.clone)
533
+ define_method("#{name}_element") do
534
+ return call_block(&block) if block
535
+ platform.unordered_list_for(identifier.clone)
504
536
  end
537
+ alias_method "#{name}_unordered_list".to_sym, "#{name}_element".to_sym
505
538
  end
506
539
 
507
540
  #
@@ -509,7 +542,7 @@ module PageObject
509
542
  #
510
543
  # @example
511
544
  # ordered_list(:top_five, :id => 'top')
512
- # # will generate a 'top_five_ordered_list' method
545
+ # # will generate a 'top_five_element' method
513
546
  #
514
547
  # @param [String] the name used for the generated methods
515
548
  # @param [Hash] identifier how we find an ordered list. You can use a multiple paramaters
@@ -522,9 +555,11 @@ module PageObject
522
555
  # @param optional block to be invoked when element method is called
523
556
  #
524
557
  def ordered_list(name, identifier=nil, &block)
525
- define_method("#{name}_ordered_list") do
526
- block ? block.call(browser) : platform.ordered_list_for(identifier.clone)
558
+ define_method("#{name}_element") do
559
+ return call_block(&block) if block
560
+ platform.ordered_list_for(identifier.clone)
527
561
  end
562
+ alias_method "#{name}_ordered_list".to_sym, "#{name}_element".to_sym
528
563
  end
529
564
  end
530
565
  end