page-object 0.0.5 → 0.1

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 (55) hide show
  1. data/ChangeLog +46 -1
  2. data/README.md +2 -0
  3. data/cucumber.yml +2 -2
  4. data/features/button.feature +11 -2
  5. data/features/check_box.feature +7 -5
  6. data/features/div.feature +7 -15
  7. data/features/{element.feature → element_attributes.feature} +1 -1
  8. data/features/form.feature +7 -6
  9. data/features/hidden_field.feature +9 -1
  10. data/features/html/static_elements.html +6 -1
  11. data/features/image.feature +9 -9
  12. data/features/link.feature +8 -1
  13. data/features/list_item.feature +6 -13
  14. data/features/ordered_list.feature +9 -17
  15. data/features/radio_button.feature +7 -6
  16. data/features/select_list.feature +12 -10
  17. data/features/span.feature +7 -15
  18. data/features/step_definitions/accessor_steps.rb +101 -26
  19. data/features/step_definitions/element_steps.rb +5 -0
  20. data/features/support/page.rb +36 -0
  21. data/features/table.feature +6 -15
  22. data/features/table_cell.feature +6 -12
  23. data/features/text_area.feature +7 -6
  24. data/features/text_field.feature +7 -6
  25. data/features/unordered_list.feature +9 -17
  26. data/lib/page-object/accessors.rb +93 -76
  27. data/lib/page-object/elements.rb +1 -0
  28. data/lib/page-object/elements/element.rb +76 -6
  29. data/lib/page-object/elements/option.rb +7 -0
  30. data/lib/page-object/elements/select_list.rb +24 -1
  31. data/lib/page-object/page_factory.rb +3 -3
  32. data/lib/page-object/platforms/selenium_select_list.rb +29 -0
  33. data/lib/page-object/platforms/watir_select_list.rb +30 -0
  34. data/lib/page-object/selenium_page_object.rb +53 -3
  35. data/lib/page-object/version.rb +1 -1
  36. data/lib/page-object/watir_page_object.rb +20 -1
  37. data/page-object.gemspec +2 -2
  38. data/spec/page-object/accessors_spec.rb +2 -2
  39. data/spec/page-object/elements/button_spec.rb +1 -1
  40. data/spec/page-object/elements/check_box_spec.rb +1 -1
  41. data/spec/page-object/elements/div_spec.rb +1 -1
  42. data/spec/page-object/elements/hidden_field_spec.rb +1 -1
  43. data/spec/page-object/elements/image_spec.rb +1 -1
  44. data/spec/page-object/elements/link_spec.rb +1 -1
  45. data/spec/page-object/elements/list_item_spec.rb +1 -1
  46. data/spec/page-object/elements/ordered_list_spec.rb +1 -1
  47. data/spec/page-object/elements/radio_button_spec.rb +1 -1
  48. data/spec/page-object/elements/select_list_spec.rb +43 -2
  49. data/spec/page-object/elements/span_spec.rb +1 -1
  50. data/spec/page-object/elements/table_row_spec.rb +5 -1
  51. data/spec/page-object/elements/table_spec.rb +1 -1
  52. data/spec/page-object/elements/text_area_spec.rb +1 -1
  53. data/spec/page-object/elements/text_field_spec.rb +1 -1
  54. data/spec/page-object/elements/unordered_list_spec.rb +1 -1
  55. metadata +9 -6
@@ -1,4 +1,4 @@
1
1
  module PageObject
2
2
  # @private
3
- VERSION = "0.0.5"
3
+ VERSION = "0.1"
4
4
  end
@@ -244,6 +244,7 @@ module PageObject
244
244
  # See PageObject::Accessors#div
245
245
  #
246
246
  def div_text_for(identifier)
247
+ identifier = add_tagname_if_needed identifier, "div"
247
248
  identifier = Elements::Div.watir_identifier_for identifier
248
249
  @browser.div(identifier).text
249
250
  end
@@ -253,6 +254,7 @@ module PageObject
253
254
  # See PageObject::Accessors#div
254
255
  #
255
256
  def div_for(identifier)
257
+ identifier = add_tagname_if_needed identifier, "div"
256
258
  identifier = Elements::Div.watir_identifier_for identifier
257
259
  element = @browser.div(identifier)
258
260
  PageObject::Elements::Div.new(element, :platform => :watir)
@@ -263,6 +265,7 @@ module PageObject
263
265
  # See PageObject::Accessors#span
264
266
  #
265
267
  def span_text_for(identifier)
268
+ identifier = add_tagname_if_needed identifier, "span"
266
269
  identifier = Elements::Span.watir_identifier_for identifier
267
270
  @browser.span(identifier).text
268
271
  end
@@ -272,6 +275,7 @@ module PageObject
272
275
  # See PageObject::Accessors#span
273
276
  #
274
277
  def span_for(identifier)
278
+ identifier = add_tagname_if_needed identifier, "span"
275
279
  identifier = Elements::Span.watir_identifier_for identifier
276
280
  element = @browser.span(identifier)
277
281
  PageObject::Elements::Span.new(element, :platform => :watir)
@@ -301,7 +305,8 @@ module PageObject
301
305
  # See PageObject::Accessors#table
302
306
  #
303
307
  def table_for(identifier)
304
- identifier = Elements::Table.watir_identifier_for identifier
308
+ identifier = add_tagname_if_needed identifier, "table"
309
+ identifier = Elements::Table.watir_identifier_for identifier.clone
305
310
  element = @browser.table(identifier)
306
311
  PageObject::Elements::Table.new(element, :platform => :watir)
307
312
  end
@@ -311,6 +316,7 @@ module PageObject
311
316
  # See PageObject::Accessors#cell
312
317
  #
313
318
  def cell_text_for(identifier)
319
+ identifier = add_tagname_if_needed identifier, "td"
314
320
  identifier = Elements::TableCell.watir_identifier_for identifier
315
321
  @browser.td(identifier).text
316
322
  end
@@ -320,6 +326,7 @@ module PageObject
320
326
  # See PageObject::Accessors#cell
321
327
  #
322
328
  def cell_for(identifier)
329
+ identifier = add_tagname_if_needed identifier, "td"
323
330
  identifier = Elements::TableCell.watir_identifier_for identifier
324
331
  element = @browser.td(identifier)
325
332
  PageObject::Elements::TableCell.new(element, :platform => :watir)
@@ -350,6 +357,7 @@ module PageObject
350
357
  # See PageObject::Accessors#list_item
351
358
  #
352
359
  def list_item_text_for(identifier)
360
+ identifier = add_tagname_if_needed identifier, "li"
353
361
  identifier = Elements::ListItem.watir_identifier_for identifier
354
362
  @browser.li(identifier).text
355
363
  end
@@ -359,6 +367,7 @@ module PageObject
359
367
  # See PageObject::Accessors#list_item
360
368
  #
361
369
  def list_item_for(identifier)
370
+ identifier = add_tagname_if_needed identifier, "li"
362
371
  identifier = Elements::ListItem.watir_identifier_for identifier
363
372
  element = @browser.li(identifier)
364
373
  PageObject::Elements::ListItem.new(element, :platform => :watir)
@@ -369,6 +378,7 @@ module PageObject
369
378
  # See PageObject::Accessors#unordered_list
370
379
  #
371
380
  def unordered_list_for(identifier)
381
+ identifier = add_tagname_if_needed identifier, "ul"
372
382
  identifier = Elements::UnorderedList.watir_identifier_for identifier
373
383
  element = @browser.ul(identifier)
374
384
  PageObject::Elements::UnorderedList.new(element, :platform => :watir)
@@ -379,9 +389,18 @@ module PageObject
379
389
  # See PageObject::Accessors#ordered_list
380
390
  #
381
391
  def ordered_list_for(identifier)
392
+ identifier = add_tagname_if_needed identifier, "ol"
382
393
  identifier = Elements::OrderedList.watir_identifier_for identifier
383
394
  element = @browser.ol(identifier)
384
395
  PageObject::Elements::OrderedList.new(element, :platform => :watir)
385
396
  end
397
+
398
+ private
399
+
400
+ def add_tagname_if_needed identifier, tag
401
+ return identifier if identifier.length < 2 and not identifier[:name]
402
+ identifier[:tag_name] = tag if identifier[:name]
403
+ identifier
404
+ end
386
405
  end
387
406
  end
data/page-object.gemspec CHANGED
@@ -19,8 +19,8 @@ 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.4'
23
- s.add_dependency 'selenium-webdriver', '>= 0.2.1'
22
+ s.add_dependency 'watir-webdriver', '>= 0.2.5'
23
+ s.add_dependency 'selenium-webdriver', '>= 0.2.2'
24
24
 
25
25
  s.add_development_dependency 'rspec', '>= 2.5.0'
26
26
  s.add_development_dependency 'cucumber', '>= 0.10.2'
@@ -360,14 +360,14 @@ describe PageObject::Accessors do
360
360
  it "should check a check box element" do
361
361
  selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
362
362
  selenium_browser.should_receive(:selected?).and_return(false)
363
- selenium_browser.should_receive(:toggle)
363
+ selenium_browser.should_receive(:click)
364
364
  selenium_page_object.check_active
365
365
  end
366
366
 
367
367
  it "should clear a check box element" do
368
368
  selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
369
369
  selenium_browser.should_receive(:selected?).and_return(true)
370
- selenium_browser.should_receive(:toggle)
370
+ selenium_browser.should_receive(:click)
371
371
  selenium_page_object.uncheck_active
372
372
  end
373
373
 
@@ -13,7 +13,7 @@ describe PageObject::Elements::Button do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :xpath].each do |t|
17
17
  key, value = button.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -12,7 +12,7 @@ describe PageObject::Elements::CheckBox do
12
12
  end
13
13
  end
14
14
  it "should map selenium types to same" do
15
- [:class, :id, :name, :xpath].each do |t|
15
+ [:class, :id, :name, :xpath, :index].each do |t|
16
16
  key, value = checkbox.selenium_identifier_for t => 'value'
17
17
  key.should == t
18
18
  end
@@ -13,7 +13,7 @@ describe PageObject::Elements::Div do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :xpath].each do |t|
17
17
  key, value = div.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -18,7 +18,7 @@ describe PageObject::Elements::HiddenField do
18
18
  end
19
19
 
20
20
  it "should map selenium types to same" do
21
- [:class, :css, :id, :name, :xpath].each do |t|
21
+ [:class, :css, :id, :name, :xpath, :index].each do |t|
22
22
  key, value = hiddenfield.selenium_identifier_for t => 'value'
23
23
  key.should == t
24
24
  end
@@ -13,7 +13,7 @@ describe PageObject::Elements::Image do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :xpath].each do |t|
17
17
  key, value = image.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -20,7 +20,7 @@ describe PageObject::Elements::Link do
20
20
  end
21
21
 
22
22
  it "should map selenium types to same" do
23
- [:class, :id, :link, :link_text, :name, :xpath].each do |t|
23
+ [:class, :id, :link, :link_text, :name, :xpath, :index].each do |t|
24
24
  key, value = link.selenium_identifier_for t => 'value'
25
25
  key.should == t
26
26
  end
@@ -13,7 +13,7 @@ describe PageObject::Elements::ListItem do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :xpath].each do |t|
17
17
  key, value = list_item.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -13,7 +13,7 @@ describe PageObject::Elements::OrderedList do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :xpath].each do |t|
17
17
  key, value = ol.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -12,7 +12,7 @@ describe PageObject::Elements::RadioButton do
12
12
  end
13
13
  end
14
14
  it "should map selenium types to same" do
15
- [:class, :id, :name, :xpath].each do |t|
15
+ [:class, :id, :name, :xpath, :index].each do |t|
16
16
  key, value = radiobutton.selenium_identifier_for t => 'value'
17
17
  key.should == t
18
18
  end
@@ -13,10 +13,51 @@ describe PageObject::Elements::SelectList do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :name, :xpath, :index].each do |t|
17
17
  key, value = selectlist.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
20
20
  end
21
21
  end
22
- end
22
+
23
+ describe "interface" do
24
+ let(:sel_list) { double('select_list') }
25
+ let(:opts) { [sel_list, sel_list] }
26
+
27
+ before(:each) do
28
+ sel_list.stub(:find_elements).and_return(sel_list)
29
+ sel_list.stub(:each)
30
+ end
31
+
32
+ context "for watir" do
33
+ it "should return an option when indexed" do
34
+ watir_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :watir)
35
+ sel_list.stub(:wd).and_return(sel_list)
36
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
37
+ watir_sel_list[0].should be_instance_of PageObject::Elements::Option
38
+ end
39
+
40
+ it "should return an array of options" do
41
+ watir_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :watir)
42
+ sel_list.stub(:wd).and_return(sel_list)
43
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
44
+ watir_sel_list.options.size.should == 2
45
+ end
46
+
47
+ end
48
+
49
+ context "for selenium" do
50
+ it "should return an option when indexed" do
51
+ selenium_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :selenium)
52
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
53
+ selenium_sel_list[1].should be_instance_of PageObject::Elements::Option
54
+ end
55
+
56
+ it "should return an array of options" do
57
+ selenium_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :selenium)
58
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
59
+ selenium_sel_list.options.size.should == 2
60
+ end
61
+ end
62
+ end
63
+ end
@@ -13,7 +13,7 @@ describe PageObject::Elements::Span do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :xpath].each do |t|
17
17
  key, value = span.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  end
@@ -32,6 +32,10 @@ describe PageObject::Elements::TableRow do
32
32
  end
33
33
 
34
34
  context "for watir" do
35
+ before(:each) do
36
+ table_row_driver.stub(:find_elements).and_return(table_row_driver)
37
+ end
38
+
35
39
  it "should return a table cell when indexed" do
36
40
  table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir)
37
41
  table_row_driver.should_receive(:[]).with(1).and_return(table_cell)
@@ -40,7 +44,7 @@ describe PageObject::Elements::TableRow do
40
44
 
41
45
  it "should return the number of columns" do
42
46
  table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir)
43
- table_row_driver.should_receive(:wd).and_return(table_row_driver)
47
+ table_row_driver.stub(:wd).and_return(table_row_driver)
44
48
  table_row_driver.should_receive(:find_elements).with(:xpath, ".//child::td|th").and_return(table_row_driver)
45
49
  table_row_driver.should_receive(:size).and_return(3)
46
50
  table_row.columns.should == 3
@@ -11,7 +11,7 @@ describe PageObject::Elements::Table do
11
11
  end
12
12
 
13
13
  it "should map selenium types to same" do
14
- [:class, :id, :name, :xpath].each do |t|
14
+ [:class, :id, :index, :name, :xpath].each do |t|
15
15
  key, value = PageObject::Elements::Table.selenium_identifier_for t => 'value'
16
16
  key.should == t
17
17
  end
@@ -18,7 +18,7 @@ describe PageObject::Elements::TextArea do
18
18
  end
19
19
 
20
20
  it "should map selenium types to same" do
21
- [:class, :css, :id, :name, :xpath].each do |t|
21
+ [:class, :css, :id, :name, :xpath, :index].each do |t|
22
22
  key, value = textarea.selenium_identifier_for t => 'value'
23
23
  key.should == t
24
24
  end
@@ -18,7 +18,7 @@ describe PageObject::Elements::TextField do
18
18
  end
19
19
 
20
20
  it "should map selenium types to same" do
21
- [:class, :css, :id, :name, :xpath].each do |t|
21
+ [:class, :css, :id, :name, :xpath, :index].each do |t|
22
22
  key, value = textfield.selenium_identifier_for t => 'value'
23
23
  key.should == t
24
24
  end
@@ -13,7 +13,7 @@ describe PageObject::Elements::UnorderedList do
13
13
  end
14
14
 
15
15
  it "should map selenium types to same" do
16
- [:class, :id, :name, :xpath].each do |t|
16
+ [:class, :id, :index, :name, :xpath].each do |t|
17
17
  key, value = ul.selenium_identifier_for t => 'value'
18
18
  key.should == t
19
19
  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.0.5
5
+ version: "0.1"
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-06-15 00:00:00 Z
13
+ date: 2011-07-01 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.4
23
+ version: 0.2.5
24
24
  type: :runtime
25
25
  version_requirements: *id001
26
26
  - !ruby/object:Gem::Dependency
@@ -31,7 +31,7 @@ dependencies:
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 0.2.1
34
+ version: 0.2.2
35
35
  type: :runtime
36
36
  version_requirements: *id002
37
37
  - !ruby/object:Gem::Dependency
@@ -89,7 +89,7 @@ files:
89
89
  - features/button.feature
90
90
  - features/check_box.feature
91
91
  - features/div.feature
92
- - features/element.feature
92
+ - features/element_attributes.feature
93
93
  - features/form.feature
94
94
  - features/hidden_field.feature
95
95
  - features/html/images/circle.png
@@ -128,6 +128,7 @@ files:
128
128
  - lib/page-object/elements/image.rb
129
129
  - lib/page-object/elements/link.rb
130
130
  - lib/page-object/elements/list_item.rb
131
+ - lib/page-object/elements/option.rb
131
132
  - lib/page-object/elements/ordered_list.rb
132
133
  - lib/page-object/elements/radio_button.rb
133
134
  - lib/page-object/elements/select_list.rb
@@ -145,6 +146,7 @@ files:
145
146
  - lib/page-object/platforms/selenium_image.rb
146
147
  - lib/page-object/platforms/selenium_link.rb
147
148
  - lib/page-object/platforms/selenium_ordered_list.rb
149
+ - lib/page-object/platforms/selenium_select_list.rb
148
150
  - lib/page-object/platforms/selenium_table.rb
149
151
  - lib/page-object/platforms/selenium_table_row.rb
150
152
  - lib/page-object/platforms/selenium_unordered_list.rb
@@ -152,6 +154,7 @@ files:
152
154
  - lib/page-object/platforms/watir_form.rb
153
155
  - lib/page-object/platforms/watir_image.rb
154
156
  - lib/page-object/platforms/watir_ordered_list.rb
157
+ - lib/page-object/platforms/watir_select_list.rb
155
158
  - lib/page-object/platforms/watir_table.rb
156
159
  - lib/page-object/platforms/watir_table_row.rb
157
160
  - lib/page-object/platforms/watir_unordered_list.rb
@@ -212,7 +215,7 @@ test_files:
212
215
  - features/button.feature
213
216
  - features/check_box.feature
214
217
  - features/div.feature
215
- - features/element.feature
218
+ - features/element_attributes.feature
216
219
  - features/form.feature
217
220
  - features/hidden_field.feature
218
221
  - features/html/images/circle.png