page-object 0.0.5 → 0.1

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