page-object 0.2.3 → 0.2.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.
Files changed (43) hide show
  1. data/.rvmrc +1 -1
  2. data/ChangeLog +14 -1
  3. data/features/button.feature +1 -0
  4. data/features/html/static_elements.html +1 -1
  5. data/features/page_level_actions.feature +9 -0
  6. data/features/span.feature +1 -0
  7. data/features/step_definitions/page_level_actions_steps.rb +7 -0
  8. data/features/support/page.rb +2 -0
  9. data/lib/page-object.rb +14 -0
  10. data/lib/page-object/accessors.rb +39 -19
  11. data/lib/page-object/elements/button.rb +5 -1
  12. data/lib/page-object/elements/check_box.rb +19 -0
  13. data/lib/page-object/elements/radio_button.rb +20 -1
  14. data/lib/page-object/elements/span.rb +5 -1
  15. data/lib/page-object/elements/text_area.rb +18 -0
  16. data/lib/page-object/elements/text_field.rb +18 -0
  17. data/lib/page-object/platforms/selenium/check_box.rb +29 -0
  18. data/lib/page-object/platforms/selenium/element.rb +2 -2
  19. data/lib/page-object/platforms/selenium/page_object.rb +18 -2
  20. data/lib/page-object/platforms/selenium/radio_button.rb +29 -0
  21. data/lib/page-object/platforms/selenium/select_list.rb +7 -0
  22. data/lib/page-object/platforms/selenium/text_area.rb +17 -0
  23. data/lib/page-object/platforms/selenium/text_field.rb +17 -0
  24. data/lib/page-object/platforms/watir/check_box.rb +29 -0
  25. data/lib/page-object/platforms/watir/element.rb +0 -7
  26. data/lib/page-object/platforms/watir/page_object.rb +16 -0
  27. data/lib/page-object/platforms/watir/radio_button.rb +29 -0
  28. data/lib/page-object/platforms/watir/select_list.rb +7 -0
  29. data/lib/page-object/platforms/watir/text_area.rb +16 -0
  30. data/lib/page-object/platforms/watir/text_field.rb +16 -0
  31. data/lib/page-object/version.rb +1 -1
  32. data/page-object.gemspec +1 -1
  33. data/spec/page-object/elements/button_spec.rb +2 -2
  34. data/spec/page-object/elements/check_box_spec.rb +25 -0
  35. data/spec/page-object/elements/element_spec.rb +20 -0
  36. data/spec/page-object/elements/radio_button_spec.rb +24 -0
  37. data/spec/page-object/elements/select_list_spec.rb +6 -1
  38. data/spec/page-object/elements/span_spec.rb +2 -2
  39. data/spec/page-object/elements/table_spec.rb +4 -6
  40. data/spec/page-object/elements/text_area_spec.rb +12 -0
  41. data/spec/page-object/elements/text_field_spec.rb +14 -1
  42. data/spec/page-object/page-object_spec.rb +22 -0
  43. metadata +11 -3
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm 1.9.2-p180@page-object --create
1
+ rvm 1.9.2-p290@page-object --create
data/ChangeLog CHANGED
@@ -1,9 +1,22 @@
1
+ === Version 0.2.4 / 2011-08-80
2
+ * Ehnancements
3
+ * Can now find span by :text
4
+ * Can now find button by :value
5
+ * Added #forward and #back methods to PageObject
6
+ * Added #right_click and #double_click methods to Element
7
+ * Added #value= to TextField and TextArea
8
+ * Added #select to SelectList
9
+ * Added #check, #uncheck, and #checked? to CheckBox
10
+ * Added #select, #clear, and #selected? to RadioButton
11
+ * Can properly pass blocks to all accessor methods
12
+ * Updated to use watir-webdriver 0.3.0
13
+
1
14
  === Version 0.2.3 / 2011-08-01
2
15
  * Enhancements
3
16
  * Can now find a TableCell by its' text
4
17
  * If we receive an error calling #attach_to_window, wait one second and try again
5
18
  * 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
19
+ * Renamed all *_<element_type> methods to *_element. Created alias for backward compatibility
7
20
  * Delegating unknown method calls on Element to the driver element object
8
21
  * Improved block handling when passed to element creation method
9
22
  * Updated to use selenium-webdriver 2.3.2
@@ -26,6 +26,7 @@ Feature: Button
26
26
  | name |
27
27
  | xpath |
28
28
  | index |
29
+ | value |
29
30
 
30
31
  @watir_only
31
32
  Scenario Outline: Locating buttons on Watir only
@@ -1,4 +1,4 @@
1
- html>
1
+ <html>
2
2
  <head>
3
3
  <title>Static Elements Page</title>
4
4
  </head>
@@ -40,3 +40,12 @@ Feature: Page level actions
40
40
 
41
41
  Scenario: Refreshing the page
42
42
  Then I should be able to refresh the page
43
+
44
+ Scenario: Going back and forward
45
+ When I select the link labeled "Google Search"
46
+ Then the page should contain the text "Success"
47
+ When I press the back button
48
+ Then the page should contain the text "Static Elements Page"
49
+ When I press the forward button
50
+ Then the page should contain the text "Success"
51
+
@@ -18,6 +18,7 @@ Feature: Span
18
18
  | xpath |
19
19
  | index |
20
20
  | name |
21
+ | text |
21
22
 
22
23
  Scenario Outline: Locating span using multiple parameters
23
24
  When I search for the span by "<param1>" and "<param2>"
@@ -70,4 +70,11 @@ Then /^I should be able to refresh the page$/ do
70
70
  @page.refresh
71
71
  end
72
72
 
73
+ When /^I press the back button$/ do
74
+ @page.back
75
+ end
76
+
77
+ When /^I press the forward button$/ do
78
+ @page.forward
79
+ end
73
80
 
@@ -92,6 +92,7 @@ class Page
92
92
  span(:span_name, :name => 'span_name')
93
93
  span(:span_class, :class => 'span_class')
94
94
  span(:span_index, :index => 0)
95
+ span(:span_text, :text => 'My alert')
95
96
  span(:span_xpath, :xpath => '//span')
96
97
  span(:span_class_index, :class => "span_class", :index => 0)
97
98
  span(:span_name_index, :name => "span_name", :index => 0)
@@ -119,6 +120,7 @@ class Page
119
120
  button(:button_index, :index => 0)
120
121
  button(:button_xpath, :xpath=> "//input[@type='submit']")
121
122
  button(:button_text, :text => 'Click Me')
123
+ button(:button_value, :value => 'Click Me')
122
124
  button(:button_class_index, :class => "button_class", :index => 0)
123
125
  button(:button_name_index, :name => "button_name", :index => 0)
124
126
 
@@ -176,6 +176,20 @@ module PageObject
176
176
  def refresh
177
177
  platform.refresh
178
178
  end
179
+
180
+ #
181
+ # Go back to the previous page
182
+ #
183
+ def back
184
+ platform.back
185
+ end
186
+
187
+ #
188
+ # Go forward to the next page
189
+ #
190
+ def forward
191
+ platform.forward
192
+ end
179
193
 
180
194
  private
181
195
 
@@ -69,10 +69,12 @@ module PageObject
69
69
  #
70
70
  def text_field(name, identifier=nil, &block)
71
71
  define_method(name) do
72
- platform.text_field_value_for identifier.clone
72
+ return platform.text_field_value_for identifier.clone unless block
73
+ self.send("#{name}_element").value
73
74
  end
74
75
  define_method("#{name}=") do |value|
75
- platform.text_field_value_set(identifier.clone, value)
76
+ return platform.text_field_value_set(identifier.clone, value) unless block
77
+ self.send("#{name}_element").value = value
76
78
  end
77
79
  define_method("#{name}_element") do
78
80
  return call_block(&block) if block
@@ -104,7 +106,8 @@ module PageObject
104
106
  #
105
107
  def hidden_field(name, identifier=nil, &block)
106
108
  define_method(name) do
107
- platform.hidden_field_value_for identifier.clone
109
+ return platform.hidden_field_value_for identifier.clone unless block
110
+ self.send("#{name}_element").value
108
111
  end
109
112
  define_method("#{name}_element") do
110
113
  return call_block(&block) if block
@@ -136,10 +139,12 @@ module PageObject
136
139
  #
137
140
  def text_area(name, identifier=nil, &block)
138
141
  define_method(name) do
139
- platform.text_area_value_for identifier.clone
142
+ return platform.text_area_value_for identifier.clone unless block
143
+ self.send("#{name}_element").value
140
144
  end
141
145
  define_method("#{name}=") do |value|
142
- platform.text_area_value_set(identifier.clone, value)
146
+ return platform.text_area_value_set(identifier.clone, value) unless block
147
+ self.send("#{name}_element").value = value
143
148
  end
144
149
  define_method("#{name}_element") do
145
150
  return call_block(&block) if block
@@ -171,10 +176,12 @@ module PageObject
171
176
  #
172
177
  def select_list(name, identifier=nil, &block)
173
178
  define_method(name) do
174
- platform.select_list_value_for identifier.clone
179
+ return platform.select_list_value_for identifier.clone unless block
180
+ self.send("#{name}_element").value
175
181
  end
176
182
  define_method("#{name}=") do |value|
177
- platform.select_list_value_set(identifier.clone, value)
183
+ return platform.select_list_value_set(identifier.clone, value) unless block
184
+ self.send("#{name}_element").select(value)
178
185
  end
179
186
  define_method("#{name}_element") do
180
187
  return call_block(&block) if block
@@ -208,7 +215,8 @@ module PageObject
208
215
  #
209
216
  def link(name, identifier=nil, &block)
210
217
  define_method(name) do
211
- platform.click_link_for identifier.clone
218
+ return platform.click_link_for identifier.clone unless block
219
+ self.send("#{name}_element").click
212
220
  end
213
221
  define_method("#{name}_element") do
214
222
  return call_block(&block) if block
@@ -238,13 +246,16 @@ module PageObject
238
246
  #
239
247
  def checkbox(name, identifier=nil, &block)
240
248
  define_method("check_#{name}") do
241
- platform.check_checkbox(identifier.clone)
249
+ return platform.check_checkbox(identifier.clone) unless block
250
+ self.send("#{name}_element").check
242
251
  end
243
252
  define_method("uncheck_#{name}") do
244
- platform.uncheck_checkbox(identifier.clone)
253
+ return platform.uncheck_checkbox(identifier.clone) unless block
254
+ self.send("#{name}_element").uncheck
245
255
  end
246
256
  define_method("#{name}_checked?") do
247
- platform.checkbox_checked?(identifier.clone)
257
+ return platform.checkbox_checked?(identifier.clone) unless block
258
+ self.send("#{name}_element").checked?
248
259
  end
249
260
  define_method("#{name}_element") do
250
261
  return call_block(&block) if block
@@ -275,13 +286,16 @@ module PageObject
275
286
  #
276
287
  def radio_button(name, identifier=nil, &block)
277
288
  define_method("select_#{name}") do
278
- platform.select_radio(identifier.clone)
289
+ return platform.select_radio(identifier.clone) unless block
290
+ self.send("#{name}_element").select
279
291
  end
280
292
  define_method("clear_#{name}") do
281
- platform.clear_radio(identifier.clone)
293
+ return platform.clear_radio(identifier.clone) unless block
294
+ self.send("#{name}_element").clear
282
295
  end
283
296
  define_method("#{name}_selected?") do
284
- platform.radio_selected?(identifier.clone)
297
+ return platform.radio_selected?(identifier.clone) unless block
298
+ self.send("#{name}_element").selected?
285
299
  end
286
300
  define_method("#{name}_element") do
287
301
  return call_block(&block) if block
@@ -306,12 +320,14 @@ module PageObject
306
320
  # * :index => Watir and Selenium
307
321
  # * :name => Watir and Selenium
308
322
  # * :text => Watir only
323
+ # * :value => Watir and Selenium
309
324
  # * :xpath => Watir and Selenium
310
325
  # @param optional block to be invoked when element method is called
311
326
  #
312
327
  def button(name, identifier=nil, &block)
313
328
  define_method(name) do
314
- platform.click_button_for identifier.clone
329
+ return platform.click_button_for identifier.clone unless block
330
+ self.send("#{name}_element").click
315
331
  end
316
332
  define_method("#{name}_element") do
317
333
  return call_block(&block) if block
@@ -341,7 +357,8 @@ module PageObject
341
357
  #
342
358
  def div(name, identifier=nil, &block)
343
359
  define_method(name) do
344
- platform.div_text_for identifier.clone
360
+ return platform.div_text_for identifier.clone unless block
361
+ self.send("#{name}_element").text
345
362
  end
346
363
  define_method("#{name}_element") do
347
364
  return call_block(&block) if block
@@ -370,7 +387,8 @@ module PageObject
370
387
  #
371
388
  def span(name, identifier=nil, &block)
372
389
  define_method(name) do
373
- platform.span_text_for identifier.clone
390
+ return platform.span_text_for identifier.clone unless block
391
+ self.send("#{name}_element").text
374
392
  end
375
393
  define_method("#{name}_element") do
376
394
  return call_block(&block) if block
@@ -425,7 +443,8 @@ module PageObject
425
443
  #
426
444
  def cell(name, identifier=nil, &block)
427
445
  define_method("#{name}") do
428
- platform.cell_text_for identifier.clone
446
+ return platform.cell_text_for identifier.clone unless block
447
+ self.send("#{name}_element").text
429
448
  end
430
449
  define_method("#{name}_element") do
431
450
  return call_block(&block) if block
@@ -503,7 +522,8 @@ module PageObject
503
522
  #
504
523
  def list_item(name, identifier=nil, &block)
505
524
  define_method(name) do
506
- platform.list_item_text_for identifier.clone
525
+ return platform.list_item_text_for identifier.clone unless block
526
+ self.send("#{name}_element").text
507
527
  end
508
528
  define_method("#{name}_element") do
509
529
  return call_block(&block) if block
@@ -10,7 +10,11 @@ module PageObject
10
10
  protected
11
11
 
12
12
  def self.watir_finders
13
- super + [:text]
13
+ super + [:text, :value]
14
+ end
15
+
16
+ def self.selenium_finders
17
+ super + [:value]
14
18
  end
15
19
 
16
20
  def include_platform_for platform
@@ -2,6 +2,25 @@ module PageObject
2
2
  module Elements
3
3
  class CheckBox < Element
4
4
 
5
+ def initialize(element, platform)
6
+ @element = element
7
+ include_platform_for platform
8
+ end
9
+
10
+ protected
11
+
12
+ def include_platform_for platform
13
+ super
14
+ if platform[:platform] == :watir
15
+ require 'page-object/platforms/watir/check_box'
16
+ self.class.send :include, PageObject::Platforms::Watir::CheckBox
17
+ elsif platform[:platform] == :selenium
18
+ require 'page-object/platforms/selenium/check_box'
19
+ self.class.send :include, PageObject::Platforms::Selenium::CheckBox
20
+ else
21
+ raise ArgumentError, "expect platform to be :watir or :selenium"
22
+ end
23
+ end
5
24
  end
6
25
  end
7
26
  end
@@ -2,6 +2,25 @@ module PageObject
2
2
  module Elements
3
3
  class RadioButton < Element
4
4
 
5
+ def initialize(element, platform)
6
+ @element = element
7
+ include_platform_for platform
8
+ end
9
+
10
+ protected
11
+
12
+ def include_platform_for platform
13
+ super
14
+ if platform[:platform] == :watir
15
+ require 'page-object/platforms/watir/radio_button'
16
+ self.class.send :include, PageObject::Platforms::Watir::RadioButton
17
+ elsif platform[:platform] == :selenium
18
+ require 'page-object/platforms/selenium/radio_button'
19
+ self.class.send :include, PageObject::Platforms::Selenium::RadioButton
20
+ else
21
+ raise ArgumentError, "expect platform to be :watir or :selenium"
22
+ end
23
+ end
5
24
  end
6
25
  end
7
- end
26
+ end
@@ -5,7 +5,11 @@ module PageObject
5
5
  protected
6
6
 
7
7
  def self.watir_finders
8
- [:class, :id, :index, :xpath]
8
+ [:class, :id, :index, :text, :xpath]
9
+ end
10
+
11
+ def self.selenium_finders
12
+ [:class, :id, :name, :text, :xpath, :index]
9
13
  end
10
14
  end
11
15
  end
@@ -2,6 +2,11 @@ module PageObject
2
2
  module Elements
3
3
  class TextArea < Element
4
4
 
5
+ def initialize(element, platform)
6
+ @element = element
7
+ include_platform_for platform
8
+ end
9
+
5
10
  protected
6
11
 
7
12
  def self.watir_finders
@@ -19,6 +24,19 @@ module PageObject
19
24
  def self.selenium_mapping
20
25
  super.merge({:tag_name => :css})
21
26
  end
27
+
28
+ def include_platform_for platform
29
+ super
30
+ if platform[:platform] == :watir
31
+ require 'page-object/platforms/watir/text_area'
32
+ self.class.send :include, PageObject::Platforms::Watir::TextArea
33
+ elsif platform[:platform] == :selenium
34
+ require 'page-object/platforms/selenium/text_area'
35
+ self.class.send :include, PageObject::Platforms::Selenium::TextArea
36
+ else
37
+ raise ArgumentError, "expect platform to be :watir or :selenium"
38
+ end
39
+ end
22
40
  end
23
41
  end
24
42
  end
@@ -2,6 +2,11 @@ module PageObject
2
2
  module Elements
3
3
  class TextField < Element
4
4
 
5
+ def initialize(element, platform)
6
+ @element = element
7
+ include_platform_for platform
8
+ end
9
+
5
10
  protected
6
11
 
7
12
  def self.watir_finders
@@ -19,6 +24,19 @@ module PageObject
19
24
  def self.selenium_mapping
20
25
  super.merge({:tag_name => :css})
21
26
  end
27
+
28
+ def include_platform_for platform
29
+ super
30
+ if platform[:platform] == :watir
31
+ require 'page-object/platforms/watir/text_field'
32
+ self.class.send :include, PageObject::Platforms::Watir::TextField
33
+ elsif platform[:platform] == :selenium
34
+ require 'page-object/platforms/selenium/text_field'
35
+ self.class.send :include, PageObject::Platforms::Selenium::TextField
36
+ else
37
+ raise ArgumentError, "expect platform to be :watir or :selenium"
38
+ end
39
+ end
22
40
  end
23
41
  end
24
42
  end
@@ -0,0 +1,29 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Selenium
4
+ module CheckBox
5
+
6
+ #
7
+ # check the checkbox
8
+ #
9
+ def check
10
+ element.click unless selected?
11
+ end
12
+
13
+ #
14
+ # uncheck the checkbox
15
+ #
16
+ def uncheck
17
+ element.click if selected?
18
+ end
19
+
20
+ #
21
+ # return true if it is checked
22
+ #
23
+ def checked?
24
+ element.selected?
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -86,8 +86,8 @@ module PageObject
86
86
  #
87
87
  # Click this element
88
88
  #
89
- def click
90
- @element.click
89
+ def right_click
90
+ @element.context_click
91
91
  end
92
92
 
93
93
  #
@@ -113,6 +113,22 @@ module PageObject
113
113
  @browser.navigate.refresh
114
114
  end
115
115
 
116
+ #
117
+ # platform method to go back to the previous page
118
+ # See PageObject#back
119
+ #
120
+ def back
121
+ @browser.navigate.back
122
+ end
123
+
124
+ #
125
+ # platform method to go forward to the next page
126
+ # See PageObject#forward
127
+ #
128
+ def forward
129
+ @browser.navigate.forward
130
+ end
131
+
116
132
  #
117
133
  # platform method to get the value stored in a text field
118
134
  # See PageObject::Accessors#text_field
@@ -561,8 +577,8 @@ module PageObject
561
577
  return false if identifier[:index]
562
578
  return false if identifier[:text] and tag == 'input' and additional[:type] == 'hidden'
563
579
  return false if identifier[:href] and tag == 'a'
564
- return false if identifier[:text] and tag == 'div'
565
- return false if identifier[:text] and tag == 'td'
580
+ return false if identifier[:text] and ['div', 'span', 'td'].include? tag
581
+ return false if identifier[:value] and tag == 'input' and additional[:type] == 'submit'
566
582
  true
567
583
  end
568
584
 
@@ -0,0 +1,29 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Selenium
4
+ module RadioButton
5
+
6
+ #
7
+ # select the radiobutton
8
+ #
9
+ def select
10
+ element.click unless selected?
11
+ end
12
+
13
+ #
14
+ # clear the radiobutton
15
+ #
16
+ def clear
17
+ element.click if selected?
18
+ end
19
+
20
+ #
21
+ # return if it is selected
22
+ #
23
+ def selected?
24
+ element.selected?
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -12,6 +12,13 @@ module PageObject
12
12
  def [](idx)
13
13
  options[idx]
14
14
  end
15
+
16
+ #
17
+ # Select a value from the list
18
+ #
19
+ def select(value)
20
+ @element.send_keys(value)
21
+ end
15
22
 
16
23
  #
17
24
  # Return an array of Options contained in the select lit.
@@ -0,0 +1,17 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Selenium
4
+
5
+ module TextArea
6
+
7
+ #
8
+ # Set the value of the TextArea
9
+ #
10
+ def value=(new_value)
11
+ element.clear
12
+ element.send_keys(new_value)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Selenium
4
+
5
+ module TextField
6
+
7
+ #
8
+ # Set the value of the TextField
9
+ #
10
+ def value=(new_value)
11
+ element.clear
12
+ element.send_keys(new_value)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Watir
4
+ module CheckBox
5
+
6
+ #
7
+ # check the checkbox
8
+ #
9
+ def check
10
+ element.set
11
+ end
12
+
13
+ #
14
+ # uncheck the checkbox
15
+ #
16
+ def uncheck
17
+ element.clear
18
+ end
19
+
20
+ #
21
+ # return true if checkbox is checked
22
+ #
23
+ def checked?
24
+ element.set?
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -83,13 +83,6 @@ module PageObject
83
83
  @element.attribute_value attribute_name
84
84
  end
85
85
 
86
- #
87
- # Click this element
88
- #
89
- def click
90
- @element.click
91
- end
92
-
93
86
  #
94
87
  # Waits until the element is present
95
88
  #
@@ -95,6 +95,22 @@ module PageObject
95
95
  def refresh
96
96
  @browser.refresh
97
97
  end
98
+
99
+ #
100
+ # platform method to go back to the previous page
101
+ # See PageObject#back
102
+ #
103
+ def back
104
+ @browser.back
105
+ end
106
+
107
+ #
108
+ # platform method to go forward to the next page
109
+ # See PageObject#forward
110
+ #
111
+ def forward
112
+ @browser.forward
113
+ end
98
114
 
99
115
  #
100
116
  # platform method to get the value stored in a text field
@@ -0,0 +1,29 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Watir
4
+ module RadioButton
5
+
6
+ #
7
+ # select the radiobutton
8
+ #
9
+ def select
10
+ element.set
11
+ end
12
+
13
+ #
14
+ # clear the radiobutton
15
+ #
16
+ def clear
17
+ element.clear
18
+ end
19
+
20
+ #
21
+ # return if it is selected
22
+ #
23
+ def selected?
24
+ element.set?
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -13,6 +13,13 @@ module PageObject
13
13
  PageObject::Elements::Option.new(options[idx], :platform => :watir)
14
14
  end
15
15
 
16
+ #
17
+ # Select a value from the list
18
+ #
19
+ def select(value)
20
+ @element.select(value)
21
+ end
22
+
16
23
  #
17
24
  # Return an array of Options contained in the select lit.
18
25
  #
@@ -0,0 +1,16 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Watir
4
+
5
+ module TextArea
6
+
7
+ #
8
+ # Set the value of the TextArea
9
+ #
10
+ def value=(new_value)
11
+ element.set(new_value)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module PageObject
2
+ module Platforms
3
+ module Watir
4
+
5
+ module TextField
6
+
7
+ #
8
+ # Set the value of the TextField
9
+ #
10
+ def value=(new_value)
11
+ element.set(new_value)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,4 +1,4 @@
1
1
  module PageObject
2
2
  # @private
3
- VERSION = "0.2.3"
3
+ VERSION = "0.2.4"
4
4
  end
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency 'watir-webdriver', '>= 0.2.8'
22
+ s.add_dependency 'watir-webdriver', '>= 0.3.0'
23
23
  s.add_dependency 'selenium-webdriver', '>= 2.3.2'
24
24
 
25
25
  s.add_development_dependency 'rspec', '>= 2.6.0'
@@ -6,14 +6,14 @@ describe PageObject::Elements::Button do
6
6
 
7
7
  context "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
- [:class, :id, :index, :name, :xpath].each do |t|
9
+ [:class, :id, :index, :name, :value, :xpath].each do |t|
10
10
  identifier = button.watir_identifier_for t => 'value'
11
11
  identifier.keys.first.should == t
12
12
  end
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :index, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :value, :xpath].each do |t|
17
17
  key, value = button.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -18,4 +18,29 @@ describe PageObject::Elements::CheckBox do
18
18
  end
19
19
  end
20
20
  end
21
+
22
+ describe "interface" do
23
+ let(:check_box) { double('check_box') }
24
+ let(:selenium_cb) { PageObject::Elements::CheckBox.new(check_box, :platform => :selenium) }
25
+
26
+
27
+ context "for selenium" do
28
+ it "should check" do
29
+ check_box.should_receive(:click)
30
+ check_box.should_receive(:selected?).and_return(false)
31
+ selenium_cb.check
32
+ end
33
+
34
+ it "should uncheck" do
35
+ check_box.should_receive(:click)
36
+ check_box.should_receive(:selected?).and_return(true)
37
+ selenium_cb.uncheck
38
+ end
39
+
40
+ it "should know if it is checked" do
41
+ check_box.should_receive(:selected?).and_return(true)
42
+ selenium_cb.should be_checked
43
+ end
44
+ end
45
+ end
21
46
  end
@@ -139,6 +139,16 @@ describe PageObject::Elements::Element do
139
139
  watir_driver.should_receive(:click)
140
140
  watir_element.click
141
141
  end
142
+
143
+ it "should be double clickable" do
144
+ watir_driver.should_receive(:double_click)
145
+ watir_element.double_click
146
+ end
147
+
148
+ it "should be right clickable" do
149
+ watir_driver.should_receive(:right_click)
150
+ watir_element.right_click
151
+ end
142
152
 
143
153
  it "should be able to block until it is present" do
144
154
  watir_driver.should_receive(:wait_until_present).with(10)
@@ -222,6 +232,16 @@ describe PageObject::Elements::Element do
222
232
  selenium_element.click
223
233
  end
224
234
 
235
+ it "should be double clickable" do
236
+ selenium_driver.should_receive(:double_click)
237
+ selenium_element.double_click
238
+ end
239
+
240
+ it "should be right clickable" do
241
+ selenium_driver.should_receive(:context_click)
242
+ selenium_element.right_click
243
+ end
244
+
225
245
  it "should be able to block until it is present" do
226
246
  wait = double('wait')
227
247
  Object::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
@@ -18,4 +18,28 @@ describe PageObject::Elements::RadioButton do
18
18
  end
19
19
  end
20
20
  end
21
+
22
+ describe "interface" do
23
+ context "for selenium" do
24
+ let(:selenium_rb) { double('radio_button') }
25
+ let(:radio_button) { PageObject::Elements::RadioButton.new(selenium_rb, :platform => :selenium) }
26
+
27
+ it "should select" do
28
+ selenium_rb.should_receive(:click)
29
+ selenium_rb.should_receive(:selected?).and_return(false)
30
+ radio_button.select
31
+ end
32
+
33
+ it "should clear" do
34
+ selenium_rb.should_receive(:click)
35
+ selenium_rb.should_receive(:selected?).and_return(true)
36
+ radio_button.clear
37
+ end
38
+
39
+ it "should know if it is selected" do
40
+ selenium_rb.should_receive(:selected?).and_return(true)
41
+ radio_button.should be_selected
42
+ end
43
+ end
44
+ end
21
45
  end
@@ -43,7 +43,6 @@ describe PageObject::Elements::SelectList do
43
43
  sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
44
44
  watir_sel_list.options.size.should == 2
45
45
  end
46
-
47
46
  end
48
47
 
49
48
  context "for selenium" do
@@ -58,6 +57,12 @@ describe PageObject::Elements::SelectList do
58
57
  sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
59
58
  selenium_sel_list.options.size.should == 2
60
59
  end
60
+
61
+ it "should select an element" do
62
+ selenium_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :selenium)
63
+ sel_list.should_receive(:send_keys).with('something')
64
+ selenium_sel_list.select 'something'
65
+ end
61
66
  end
62
67
  end
63
68
  end
@@ -6,14 +6,14 @@ describe PageObject::Elements::Span do
6
6
 
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
- [:class, :id, :index, :xpath].each do |t|
9
+ [:class, :id, :index, :text, :xpath].each do |t|
10
10
  identifier = span.watir_identifier_for t => 'value'
11
11
  identifier.keys.first.should == t
12
12
  end
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :index, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :text, :xpath].each do |t|
17
17
  key, value = span.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -27,14 +27,14 @@ describe PageObject::Elements::Table do
27
27
  end
28
28
 
29
29
  context "for watir" do
30
+ let(:watir_table) { PageObject::Elements::Table.new(table_element, :platform => :watir) }
31
+
30
32
  it "should return a table row when indexed" do
31
- watir_table = PageObject::Elements::Table.new(table_element, :platform => :watir)
32
33
  table_element.stub(:[]).with(1).and_return(table_element)
33
34
  watir_table[1].should be_instance_of PageObject::Elements::TableRow
34
35
  end
35
36
 
36
37
  it "should return the number of rows" do
37
- watir_table = PageObject::Elements::Table.new(table_element, :platform => :watir)
38
38
  table_element.stub(:wd).and_return(table_element)
39
39
  table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
40
40
  table_element.should_receive(:size).and_return(2)
@@ -42,7 +42,6 @@ describe PageObject::Elements::Table do
42
42
  end
43
43
 
44
44
  it "should iterate over the table rows" do
45
- watir_table = PageObject::Elements::Table.new(table_element, :platform => :watir)
46
45
  watir_table.should_receive(:rows).and_return(2)
47
46
  count = 0
48
47
  watir_table.each { |e| count += 1 }
@@ -51,21 +50,20 @@ describe PageObject::Elements::Table do
51
50
  end
52
51
 
53
52
  context "for selenium" do
53
+ let(:selenium_table) { PageObject::Elements::Table.new(table_element, :platform => :selenium) }
54
+
54
55
  it "should return a table row when indexed" do
55
- selenium_table = PageObject::Elements::Table.new(table_element, :platform => :selenium)
56
56
  table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
57
57
  selenium_table[1].should be_instance_of PageObject::Elements::TableRow
58
58
  end
59
59
 
60
60
  it "should return the number of rows" do
61
- selenium_table = PageObject::Elements::Table.new(table_element, :platform => :selenium)
62
61
  table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
63
62
  table_element.should_receive(:size).and_return(2)
64
63
  selenium_table.rows.should == 2
65
64
  end
66
65
 
67
66
  it "should iterate over the table rows" do
68
- selenium_table = PageObject::Elements::Table.new(table_element, :platform => :selenium)
69
67
  selenium_table.should_receive(:rows).and_return(2)
70
68
  count = 0
71
69
  selenium_table.each { |e| count += 1 }
@@ -29,4 +29,16 @@ describe PageObject::Elements::TextArea do
29
29
  key.should == :css
30
30
  end
31
31
  end
32
+
33
+ describe "interface" do
34
+ context "for Selenium" do
35
+ it "should set its' value" do
36
+ text_area_element = double('text_area')
37
+ text_area = PageObject::Elements::TextArea.new(text_area_element, :platform => :selenium)
38
+ text_area_element.should_receive(:clear)
39
+ text_area_element.should_receive(:send_keys).with('Joseph')
40
+ text_area.value = 'Joseph'
41
+ end
42
+ end
43
+ end
32
44
  end
@@ -2,9 +2,10 @@ require 'spec_helper'
2
2
  require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::TextField do
5
- let(:textfield) { PageObject::Elements::TextField }
6
5
 
7
6
  describe "when mapping how to find an element" do
7
+ let(:textfield) { PageObject::Elements::TextField }
8
+
8
9
  it "should map watir types to same" do
9
10
  [:class, :id, :index, :name, :tag_name, :xpath].each do |t|
10
11
  identifier = textfield.watir_identifier_for t => 'value'
@@ -29,4 +30,16 @@ describe PageObject::Elements::TextField do
29
30
  key.should == :css
30
31
  end
31
32
  end
33
+
34
+ describe "interface" do
35
+ context "for selenium" do
36
+ it "should set its' value" do
37
+ text_field_element = double('selenium_text_field')
38
+ selenium_text_field = PageObject::Elements::TextField.new(text_field_element, :platform => :selenium)
39
+ text_field_element.should_receive(:clear)
40
+ text_field_element.should_receive(:send_keys).with('Joseph')
41
+ selenium_text_field.value = 'Joseph'
42
+ end
43
+ end
44
+ end
32
45
  end
@@ -125,6 +125,16 @@ describe PageObject do
125
125
  watir_browser.should_receive(:refresh)
126
126
  watir_page_object.refresh
127
127
  end
128
+
129
+ it "should know how to go back" do
130
+ watir_browser.should_receive(:back)
131
+ watir_page_object.back
132
+ end
133
+
134
+ it "should know how to go forward" do
135
+ watir_browser.should_receive(:forward)
136
+ watir_page_object.forward
137
+ end
128
138
  end
129
139
 
130
140
  context "when using SeleniumPageObject" do
@@ -193,6 +203,18 @@ describe PageObject do
193
203
  selenium_browser.should_receive(:refresh)
194
204
  selenium_page_object.refresh
195
205
  end
206
+
207
+ it "should know how to go back" do
208
+ selenium_browser.should_receive(:navigate).and_return(selenium_browser)
209
+ selenium_browser.should_receive(:back)
210
+ selenium_page_object.back
211
+ end
212
+
213
+ it "should know how to go forward" do
214
+ selenium_browser.should_receive(:navigate).and_return(selenium_browser)
215
+ selenium_browser.should_receive(:forward)
216
+ selenium_page_object.forward
217
+ end
196
218
  end
197
219
  end
198
220
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: page-object
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.3
5
+ version: 0.2.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jeff Morgan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-02 00:00:00 Z
13
+ date: 2011-08-08 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: watir-webdriver
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.2.8
23
+ version: 0.3.0
24
24
  type: :runtime
25
25
  version_requirements: *id001
26
26
  - !ruby/object:Gem::Dependency
@@ -159,25 +159,33 @@ files:
159
159
  - lib/page-object/platforms.rb
160
160
  - lib/page-object/platforms/selenium.rb
161
161
  - lib/page-object/platforms/selenium/button.rb
162
+ - lib/page-object/platforms/selenium/check_box.rb
162
163
  - lib/page-object/platforms/selenium/element.rb
163
164
  - lib/page-object/platforms/selenium/form.rb
164
165
  - lib/page-object/platforms/selenium/image.rb
165
166
  - lib/page-object/platforms/selenium/link.rb
166
167
  - lib/page-object/platforms/selenium/ordered_list.rb
167
168
  - lib/page-object/platforms/selenium/page_object.rb
169
+ - lib/page-object/platforms/selenium/radio_button.rb
168
170
  - lib/page-object/platforms/selenium/select_list.rb
169
171
  - lib/page-object/platforms/selenium/table.rb
170
172
  - lib/page-object/platforms/selenium/table_row.rb
173
+ - lib/page-object/platforms/selenium/text_area.rb
174
+ - lib/page-object/platforms/selenium/text_field.rb
171
175
  - lib/page-object/platforms/selenium/unordered_list.rb
172
176
  - lib/page-object/platforms/watir.rb
177
+ - lib/page-object/platforms/watir/check_box.rb
173
178
  - lib/page-object/platforms/watir/element.rb
174
179
  - lib/page-object/platforms/watir/form.rb
175
180
  - lib/page-object/platforms/watir/image.rb
176
181
  - lib/page-object/platforms/watir/ordered_list.rb
177
182
  - lib/page-object/platforms/watir/page_object.rb
183
+ - lib/page-object/platforms/watir/radio_button.rb
178
184
  - lib/page-object/platforms/watir/select_list.rb
179
185
  - lib/page-object/platforms/watir/table.rb
180
186
  - lib/page-object/platforms/watir/table_row.rb
187
+ - lib/page-object/platforms/watir/text_area.rb
188
+ - lib/page-object/platforms/watir/text_field.rb
181
189
  - lib/page-object/platforms/watir/unordered_list.rb
182
190
  - lib/page-object/version.rb
183
191
  - page-object.gemspec