page-object 0.2 → 0.2.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 (134) hide show
  1. data/.gitignore +1 -0
  2. data/.rvmrc +1 -1
  3. data/ChangeLog +12 -6
  4. data/README.md +1 -1
  5. data/Rakefile +3 -19
  6. data/features/async.feature +8 -8
  7. data/features/button.feature +7 -7
  8. data/features/check_box.feature +8 -8
  9. data/features/div.feature +7 -6
  10. data/features/element_attributes.feature +14 -14
  11. data/features/form.feature +5 -5
  12. data/features/frames.feature +12 -0
  13. data/features/hidden_field.feature +5 -5
  14. data/features/html/frame_1.html +18 -0
  15. data/features/html/frame_2.html +16 -0
  16. data/features/html/frames.html +11 -0
  17. data/features/html/iframes.html +12 -0
  18. data/features/html/static_elements.html +50 -42
  19. data/features/html/success.html +5 -5
  20. data/features/image.feature +11 -11
  21. data/features/link.feature +1 -1
  22. data/features/list_item.feature +5 -5
  23. data/features/ordered_list.feature +6 -6
  24. data/features/page_level_actions.feature +16 -5
  25. data/features/radio_button.feature +12 -12
  26. data/features/select_list.feature +12 -12
  27. data/features/span.feature +5 -5
  28. data/features/step_definitions/accessor_steps.rb +2 -2
  29. data/features/step_definitions/async_steps.rb +1 -1
  30. data/features/step_definitions/element_steps.rb +1 -1
  31. data/features/step_definitions/frames_steps.rb +21 -0
  32. data/features/step_definitions/page_level_actions_steps.rb +24 -2
  33. data/features/step_definitions/page_traversal_steps.rb +0 -1
  34. data/features/support/env.rb +20 -6
  35. data/features/support/page.rb +14 -11
  36. data/features/support/url_helper.rb +4 -0
  37. data/features/table.feature +9 -9
  38. data/features/table_cell.feature +6 -6
  39. data/features/text_area.feature +6 -6
  40. data/features/text_field.feature +7 -7
  41. data/features/unordered_list.feature +6 -6
  42. data/lib/page-object.rb +40 -16
  43. data/lib/page-object/accessors.rb +15 -15
  44. data/lib/page-object/elements.rb +0 -1
  45. data/lib/page-object/elements/button.rb +24 -24
  46. data/lib/page-object/elements/div.rb +8 -3
  47. data/lib/page-object/elements/element.rb +27 -28
  48. data/lib/page-object/elements/form.rb +7 -7
  49. data/lib/page-object/elements/hidden_field.rb +5 -5
  50. data/lib/page-object/elements/image.rb +8 -8
  51. data/lib/page-object/elements/link.rb +9 -9
  52. data/lib/page-object/elements/list_item.rb +1 -1
  53. data/lib/page-object/elements/option.rb +1 -1
  54. data/lib/page-object/elements/ordered_list.rb +13 -13
  55. data/lib/page-object/elements/select_list.rb +6 -6
  56. data/lib/page-object/elements/span.rb +2 -2
  57. data/lib/page-object/elements/table.rb +11 -11
  58. data/lib/page-object/elements/table_row.rb +9 -9
  59. data/lib/page-object/elements/text_area.rb +4 -4
  60. data/lib/page-object/elements/text_field.rb +4 -4
  61. data/lib/page-object/elements/unordered_list.rb +13 -13
  62. data/lib/page-object/loads_platform.rb +24 -0
  63. data/lib/page-object/page_factory.rb +3 -3
  64. data/lib/page-object/platforms.rb +18 -0
  65. data/lib/page-object/platforms/selenium.rb +16 -0
  66. data/lib/page-object/platforms/selenium/button.rb +15 -0
  67. data/lib/page-object/platforms/selenium/element.rb +168 -0
  68. data/lib/page-object/platforms/selenium/form.rb +16 -0
  69. data/lib/page-object/platforms/selenium/image.rb +28 -0
  70. data/lib/page-object/platforms/selenium/link.rb +16 -0
  71. data/lib/page-object/platforms/selenium/ordered_list.rb +33 -0
  72. data/lib/page-object/platforms/selenium/page_object.rb +524 -0
  73. data/lib/page-object/platforms/selenium/select_list.rb +32 -0
  74. data/lib/page-object/platforms/selenium/table.rb +40 -0
  75. data/lib/page-object/platforms/selenium/table_row.rb +32 -0
  76. data/lib/page-object/platforms/selenium/unordered_list.rb +33 -0
  77. data/lib/page-object/platforms/watir.rb +16 -0
  78. data/lib/page-object/platforms/watir/element.rb +154 -0
  79. data/lib/page-object/platforms/watir/form.rb +16 -0
  80. data/lib/page-object/platforms/watir/image.rb +22 -0
  81. data/lib/page-object/platforms/watir/ordered_list.rb +32 -0
  82. data/lib/page-object/{watir_page_object.rb → platforms/watir/page_object.rb} +62 -35
  83. data/lib/page-object/platforms/watir/select_list.rb +33 -0
  84. data/lib/page-object/platforms/watir/table.rb +27 -0
  85. data/lib/page-object/platforms/watir/table_row.rb +24 -0
  86. data/lib/page-object/platforms/watir/unordered_list.rb +33 -0
  87. data/lib/page-object/version.rb +1 -1
  88. data/page-object.gemspec +13 -13
  89. data/spec/page-object/accessors_spec.rb +142 -108
  90. data/spec/page-object/elements/button_spec.rb +33 -33
  91. data/spec/page-object/elements/check_box_spec.rb +1 -1
  92. data/spec/page-object/elements/div_spec.rb +3 -3
  93. data/spec/page-object/elements/element_spec.rb +51 -41
  94. data/spec/page-object/elements/form_spec.rb +3 -3
  95. data/spec/page-object/elements/hidden_field_spec.rb +3 -3
  96. data/spec/page-object/elements/image_spec.rb +7 -7
  97. data/spec/page-object/elements/link_spec.rb +8 -8
  98. data/spec/page-object/elements/list_item_spec.rb +1 -1
  99. data/spec/page-object/elements/ordered_list_spec.rb +9 -9
  100. data/spec/page-object/elements/radio_button_spec.rb +1 -1
  101. data/spec/page-object/elements/select_list_spec.rb +2 -2
  102. data/spec/page-object/elements/span_spec.rb +1 -1
  103. data/spec/page-object/elements/table_row_spec.rb +6 -6
  104. data/spec/page-object/elements/table_spec.rb +9 -9
  105. data/spec/page-object/elements/text_area_spec.rb +3 -3
  106. data/spec/page-object/elements/text_field_spec.rb +3 -3
  107. data/spec/page-object/elements/unordered_list_spec.rb +10 -10
  108. data/spec/page-object/loads_platform_spec.rb +38 -0
  109. data/spec/page-object/page-object_spec.rb +70 -10
  110. data/spec/page-object/page_factory_spec.rb +3 -3
  111. data/spec/page-object/{selenium_page_object_spec.rb → platforms/selenium/selenium_page_object_spec.rb} +10 -3
  112. data/spec/page-object/platforms/selenium_spec.rb +26 -0
  113. data/spec/page-object/platforms/watir_spec.rb +27 -0
  114. data/spec/spec_helper.rb +18 -5
  115. metadata +48 -26
  116. data/lib/page-object/platforms/selenium_button.rb +0 -13
  117. data/lib/page-object/platforms/selenium_element.rb +0 -142
  118. data/lib/page-object/platforms/selenium_form.rb +0 -14
  119. data/lib/page-object/platforms/selenium_image.rb +0 -26
  120. data/lib/page-object/platforms/selenium_link.rb +0 -13
  121. data/lib/page-object/platforms/selenium_ordered_list.rb +0 -31
  122. data/lib/page-object/platforms/selenium_select_list.rb +0 -29
  123. data/lib/page-object/platforms/selenium_table.rb +0 -38
  124. data/lib/page-object/platforms/selenium_table_row.rb +0 -29
  125. data/lib/page-object/platforms/selenium_unordered_list.rb +0 -31
  126. data/lib/page-object/platforms/watir_element.rb +0 -136
  127. data/lib/page-object/platforms/watir_form.rb +0 -14
  128. data/lib/page-object/platforms/watir_image.rb +0 -20
  129. data/lib/page-object/platforms/watir_ordered_list.rb +0 -30
  130. data/lib/page-object/platforms/watir_select_list.rb +0 -30
  131. data/lib/page-object/platforms/watir_table.rb +0 -24
  132. data/lib/page-object/platforms/watir_table_row.rb +0 -22
  133. data/lib/page-object/platforms/watir_unordered_list.rb +0 -31
  134. data/lib/page-object/selenium_page_object.rb +0 -486
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::Link do
5
5
  let(:link) { PageObject::Elements::Link }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :href, :id, :index, :name, :text, :xpath].each do |t|
@@ -11,35 +11,35 @@ describe PageObject::Elements::Link do
11
11
  identifier.keys.first.should == t
12
12
  end
13
13
  end
14
-
14
+
15
15
  it "should map selenium types to watir" do
16
16
  [:link, :link_text].each do |t|
17
17
  identifier = link.watir_identifier_for t => 'value'
18
18
  identifier.keys.first.should == :text
19
19
  end
20
20
  end
21
-
21
+
22
22
  it "should map selenium types to same" do
23
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
27
27
  end
28
-
28
+
29
29
  it "should map watir types to selenium" do
30
30
  key, value = link.selenium_identifier_for :text => 'value'
31
31
  key.should == :link_text
32
32
  end
33
33
  end
34
-
34
+
35
35
  describe "interface" do
36
36
  let(:link_element) { double('link_element') }
37
-
37
+
38
38
  context "for selenium" do
39
39
  it "should return error when asked for its' value" do
40
40
  link = PageObject::Elements::Link.new(link_element, :platform => :selenium)
41
- lambda {link.value}.should raise_error
42
- end
41
+ lambda { link.value }.should raise_error
42
+ end
43
43
  end
44
44
  end
45
45
  end
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::ListItem do
5
5
  let(:list_item) { PageObject::Elements::ListItem }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :xpath].each do |t|
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::OrderedList do
5
5
  let(:ol) { PageObject::Elements::OrderedList }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :xpath].each do |t|
@@ -19,10 +19,10 @@ describe PageObject::Elements::OrderedList do
19
19
  end
20
20
  end
21
21
  end
22
-
22
+
23
23
  describe "interface" do
24
24
  let(:ol_element) { double('ol_element') }
25
-
25
+
26
26
  context "for watir" do
27
27
  it "should return a list item when indexed" do
28
28
  ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir)
@@ -31,7 +31,7 @@ describe PageObject::Elements::OrderedList do
31
31
  ol_element.stub(:[]).and_return(ol_element)
32
32
  ol[1].should be_instance_of PageObject::Elements::ListItem
33
33
  end
34
-
34
+
35
35
  it "should know how many list items it contains" do
36
36
  ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir)
37
37
  ol_element.stub(:wd).and_return(ol_element)
@@ -40,7 +40,7 @@ describe PageObject::Elements::OrderedList do
40
40
  ol_element.stub(:size).and_return(5)
41
41
  ol.items.should == 5
42
42
  end
43
-
43
+
44
44
  it "should iterate over the list items" do
45
45
  ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir)
46
46
  ol.should_receive(:items).and_return(5)
@@ -49,8 +49,8 @@ describe PageObject::Elements::OrderedList do
49
49
  ol.each { |item| count += 1 }
50
50
  count.should == 5
51
51
  end
52
- end
53
-
52
+ end
53
+
54
54
  context "for selenium" do
55
55
  it "should return a list item when indexed" do
56
56
  ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium)
@@ -58,14 +58,14 @@ describe PageObject::Elements::OrderedList do
58
58
  ol_element.should_receive(:[]).and_return(ol_element)
59
59
  ol[1].should be_instance_of PageObject::Elements::ListItem
60
60
  end
61
-
61
+
62
62
  it "should know how many list items it contains" do
63
63
  ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium)
64
64
  ol_element.should_receive(:find_elements).with(:xpath, ".//child::li").and_return(ol_element)
65
65
  ol_element.should_receive(:size).and_return(5)
66
66
  ol.items.should == 5
67
67
  end
68
-
68
+
69
69
  it "should iterate over the list items" do
70
70
  ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium)
71
71
  ol.should_receive(:items).and_return(5)
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::RadioButton do
5
5
  let(:radiobutton) { PageObject::Elements::RadioButton }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :name, :xpath].each do |t|
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::SelectList do
5
5
  let(:selectlist) { PageObject::Elements::SelectList }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :name, :text, :value, :xpath].each do |t|
@@ -28,7 +28,7 @@ describe PageObject::Elements::SelectList do
28
28
  sel_list.stub(:find_elements).and_return(sel_list)
29
29
  sel_list.stub(:each)
30
30
  end
31
-
31
+
32
32
  context "for watir" do
33
33
  it "should return an option when indexed" do
34
34
  watir_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :watir)
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::Span do
5
5
  let(:span) { PageObject::Elements::Span }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :xpath].each do |t|
@@ -13,7 +13,7 @@ describe PageObject::Elements::TableRow do
13
13
  table_cell.should_receive(:[]).and_return(table_cell)
14
14
  table_row[0].should be_instance_of PageObject::Elements::TableCell
15
15
  end
16
-
16
+
17
17
  it "should retrun the number of columns" do
18
18
  table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :selenium)
19
19
  table_row_driver.should_receive(:find_elements).with(:xpath, ".//child::td|th").and_return(table_row_driver)
@@ -28,16 +28,16 @@ describe PageObject::Elements::TableRow do
28
28
  count = 0
29
29
  table_row.each { |e| count += 1 }
30
30
  count.should == 2
31
- end
31
+ end
32
32
  end
33
33
 
34
34
  context "for watir" do
35
35
  before(:each) do
36
36
  table_row_driver.stub(:find_elements).and_return(table_row_driver)
37
37
  end
38
-
38
+
39
39
  it "should return a table cell when indexed" do
40
- table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir)
40
+ table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir)
41
41
  table_row_driver.should_receive(:[]).with(1).and_return(table_cell)
42
42
  table_row[1].should be_instance_of PageObject::Elements::TableCell
43
43
  end
@@ -57,7 +57,7 @@ describe PageObject::Elements::TableRow do
57
57
  count = 0
58
58
  table_row.each { |e| count += 1 }
59
59
  count.should == 2
60
- end
61
- end
60
+ end
61
+ end
62
62
  end
63
63
  end
@@ -17,22 +17,22 @@ describe PageObject::Elements::Table do
17
17
  end
18
18
  end
19
19
  end
20
-
20
+
21
21
  describe "interface" do
22
22
  let(:table_element) { double('table_element') }
23
-
23
+
24
24
  before(:each) do
25
25
  table_element.stub(:[]).and_return(table_element)
26
26
  table_element.stub(:find_elements).and_return(table_element)
27
27
  end
28
-
28
+
29
29
  context "for watir" do
30
30
  it "should return a table row when indexed" do
31
31
  watir_table = PageObject::Elements::Table.new(table_element, :platform => :watir)
32
32
  table_element.stub(:[]).with(1).and_return(table_element)
33
33
  watir_table[1].should be_instance_of PageObject::Elements::TableRow
34
34
  end
35
-
35
+
36
36
  it "should return the number of rows" do
37
37
  watir_table = PageObject::Elements::Table.new(table_element, :platform => :watir)
38
38
  table_element.stub(:wd).and_return(table_element)
@@ -47,8 +47,8 @@ describe PageObject::Elements::Table do
47
47
  count = 0
48
48
  watir_table.each { |e| count += 1 }
49
49
  count.should == 2
50
- end
51
- end
50
+ end
51
+ end
52
52
 
53
53
  context "for selenium" do
54
54
  it "should return a table row when indexed" do
@@ -56,14 +56,14 @@ describe PageObject::Elements::Table do
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
61
  selenium_table = PageObject::Elements::Table.new(table_element, :platform => :selenium)
62
62
  table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
63
63
  table_element.should_receive(:size).and_return(2)
64
64
  selenium_table.rows.should == 2
65
65
  end
66
-
66
+
67
67
  it "should iterate over the table rows" do
68
68
  selenium_table = PageObject::Elements::Table.new(table_element, :platform => :selenium)
69
69
  selenium_table.should_receive(:rows).and_return(2)
@@ -71,6 +71,6 @@ describe PageObject::Elements::Table do
71
71
  selenium_table.each { |e| count += 1 }
72
72
  count.should == 2
73
73
  end
74
- end
74
+ end
75
75
  end
76
76
  end
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::TextArea do
5
5
  let(:textarea) { PageObject::Elements::TextArea }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :name, :tag_name, :xpath].each do |t|
@@ -16,14 +16,14 @@ describe PageObject::Elements::TextArea do
16
16
  identifier = textarea.watir_identifier_for :css => 'value'
17
17
  identifier.keys.first.should == :tag_name
18
18
  end
19
-
19
+
20
20
  it "should map selenium types to same" do
21
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
25
25
  end
26
-
26
+
27
27
  it "should map watir types to selenium" do
28
28
  key, value = textarea.selenium_identifier_for :tag_name => 'value'
29
29
  key.should == :css
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::TextField do
5
5
  let(:textfield) { PageObject::Elements::TextField }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :name, :tag_name, :xpath].each do |t|
@@ -16,14 +16,14 @@ describe PageObject::Elements::TextField do
16
16
  identifier = textfield.watir_identifier_for :css => 'value'
17
17
  identifier.keys.first.should == :tag_name
18
18
  end
19
-
19
+
20
20
  it "should map selenium types to same" do
21
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
25
25
  end
26
-
26
+
27
27
  it "should map watir types to selenium" do
28
28
  key, value = textfield.selenium_identifier_for :tag_name => 'value'
29
29
  key.should == :css
@@ -3,7 +3,7 @@ require 'page-object/elements'
3
3
 
4
4
  describe PageObject::Elements::UnorderedList do
5
5
  let(:ul) { PageObject::Elements::UnorderedList }
6
-
6
+
7
7
  describe "when mapping how to find an element" do
8
8
  it "should map watir types to same" do
9
9
  [:class, :id, :index, :xpath].each do |t|
@@ -19,10 +19,10 @@ describe PageObject::Elements::UnorderedList do
19
19
  end
20
20
  end
21
21
  end
22
-
22
+
23
23
  describe "interface" do
24
24
  let(:ul_element) { double('ul_element') }
25
-
25
+
26
26
  context "for watir" do
27
27
  it "should return a list item when indexed" do
28
28
  ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :watir)
@@ -31,7 +31,7 @@ describe PageObject::Elements::UnorderedList do
31
31
  ul_element.stub(:[])
32
32
  ul[1].should be_instance_of PageObject::Elements::ListItem
33
33
  end
34
-
34
+
35
35
  it "should know how many items it contains" do
36
36
  ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :watir)
37
37
  ul_element.stub(:wd).and_return(ul_element)
@@ -39,7 +39,7 @@ describe PageObject::Elements::UnorderedList do
39
39
  ul_element.stub(:size).and_return(5)
40
40
  ul.items.should == 5
41
41
  end
42
-
42
+
43
43
  it "should know how to iterate over the items" do
44
44
  ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :watir)
45
45
  ul.should_receive(:items).and_return(5)
@@ -48,8 +48,8 @@ describe PageObject::Elements::UnorderedList do
48
48
  ul.each { |item| count += 1 }
49
49
  count.should == 5
50
50
  end
51
- end
52
-
51
+ end
52
+
53
53
  context "for selenium" do
54
54
  it "should return a list item when indexed" do
55
55
  ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :selenium)
@@ -57,14 +57,14 @@ describe PageObject::Elements::UnorderedList do
57
57
  ul_element.stub(:[])
58
58
  ul[1].should be_instance_of PageObject::Elements::ListItem
59
59
  end
60
-
60
+
61
61
  it "should know how many items it contains" do
62
62
  ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :selenium)
63
63
  ul_element.should_receive(:find_elements).and_return(ul_element)
64
64
  ul_element.should_receive(:size).and_return(5)
65
65
  ul.items.should == 5
66
66
  end
67
-
67
+
68
68
  it "should know how to iterate over the items" do
69
69
  ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :selenium)
70
70
  ul.should_receive(:items).and_return(5)
@@ -72,7 +72,7 @@ describe PageObject::Elements::UnorderedList do
72
72
  count = 0
73
73
  ul.each { |item| count += 1 }
74
74
  count.should == 5
75
-
75
+
76
76
  end
77
77
  end
78
78
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ class TestLoadsPlatform
3
+ include PageObject::LoadsPlatform
4
+ end
5
+ describe TestLoadsPlatform do
6
+ let(:subject) { TestLoadsPlatform.new }
7
+ let(:adapters) { {} }
8
+ context "when browser x is registered with platform nom_nom_nom" do
9
+ let(:browser_x) { double('browser') }
10
+ before { adapters[:browser_x] = mock_adapter(browser_x, :nom_nom_nom) }
11
+
12
+ it "returns platform nom_nom_nom when asked about browser_x" do
13
+ subject.load_platform(browser_x, adapters).should == :nom_nom_nom
14
+ end
15
+ context "when browser a is registered with platform boom_boom_boom" do
16
+ let(:browser_a) { double('browser') }
17
+ before { adapters[:browser_a] = mock_adapter(browser_a, :boom_boom_boom) }
18
+ it "should return platform nom_nom_nom when asked about browser_x" do
19
+ subject.load_platform(browser_x, adapters).should == :nom_nom_nom
20
+ end
21
+ end
22
+ end
23
+ context "when browser a is registered with platform boom_boom_boom" do
24
+ let(:browser_n) { double('browser') }
25
+ before { adapters[:browser_n] = mock_adapter(browser_n, :boom_boom_boom) }
26
+ it "should return platform boom_boom_boom" do
27
+ subject.load_platform(browser_n, adapters).should == :boom_boom_boom
28
+ end
29
+ end
30
+
31
+ context "When an unknow object is passed in" do
32
+ it "should throw an exception" do
33
+ expect {
34
+ subject.load_platform("browser")
35
+ }.to raise_error
36
+ end
37
+ end
38
+ end
@@ -4,12 +4,13 @@ class PageObjectTestPageObject
4
4
  include PageObject
5
5
  end
6
6
 
7
+ class CustomPlatform
8
+ end
7
9
  describe PageObject do
8
10
  let(:watir_browser) { mock_watir_browser }
9
11
  let(:selenium_browser) { mock_selenium_browser }
10
12
  let(:watir_page_object) { PageObjectTestPageObject.new(watir_browser) }
11
13
  let(:selenium_page_object) { PageObjectTestPageObject.new(selenium_browser) }
12
-
13
14
  context "when created with a watir-webdriver browser" do
14
15
  it "should include the WatirPageObject module" do
15
16
  watir_page_object.platform.should be_kind_of PageObject::WatirPageObject
@@ -18,10 +19,17 @@ describe PageObject do
18
19
 
19
20
  context "when created with a selenium browser" do
20
21
  it "should include the SeleniumPageObject module" do
21
- selenium_page_object.platform.should be_kind_of PageObject::SeleniumPageObject
22
+ selenium_page_object.platform.should be_kind_of Object::PageObject::Platforms::Selenium::PageObject
23
+ end
24
+ end
25
+ context "when created with a non_bundled adapter" do
26
+ let(:custom_adapter) { mock_adapter(:custom_browser, CustomPlatform) }
27
+ it "should be an instance of whatever that objects adapter is" do
28
+ mock_adapters({:custom_adapter=>custom_adapter})
29
+ custom_page_object = PageObjectTestPageObject.new(:custom_browser)
30
+ custom_page_object.platform.should be custom_adapter.create_page_object
22
31
  end
23
32
  end
24
-
25
33
  context "when created with an object we do not understand" do
26
34
  it "should throw an error" do
27
35
  expect {
@@ -51,29 +59,53 @@ describe PageObject do
51
59
  watir_browser.should_receive(:goto).with("cheezyworld.com")
52
60
  watir_page_object.navigate_to("cheezyworld.com")
53
61
  end
54
-
62
+
55
63
  it "should wait until a block returns true" do
56
64
  watir_browser.should_receive(:wait_until).with(5, "too long")
57
65
  watir_page_object.wait_until(5, "too long")
58
66
  end
59
-
67
+
60
68
  it "should override alert popup behavior" do
61
69
  watir_browser.should_receive(:alert)
62
70
  watir_page_object.alert do
63
71
  end
64
72
  end
65
-
73
+
66
74
  it "should override confirm popup behavior" do
67
75
  watir_browser.should_receive(:confirm)
68
76
  watir_page_object.confirm(true) do
69
77
  end
70
78
  end
71
-
79
+
72
80
  it "should override prompt popup behavior" do
73
81
  watir_browser.should_receive(:prompt)
74
82
  watir_page_object.prompt("blah") do
75
83
  end
76
84
  end
85
+
86
+ it "should switch to a new window with a given title" do
87
+ watir_browser.should_receive(:window).with(:title => /My\ Title/).and_return(watir_browser)
88
+ watir_browser.should_receive(:use)
89
+ watir_page_object.attach_to_window(:title => "My Title")
90
+ end
91
+
92
+ it "should switch to a new window with a given url" do
93
+ watir_browser.should_receive(:window).with(:url => /success\.html/).and_return(watir_browser)
94
+ watir_browser.should_receive(:use)
95
+ watir_page_object.attach_to_window(:url => "success.html")
96
+ end
97
+
98
+ it "should switch to a new frame by index" do
99
+ watir_browser.should_receive(:wd).and_return(watir_browser)
100
+ watir_browser.should_receive(:switch_to).and_return(watir_browser)
101
+ watir_browser.should_receive(:frame).with(0)
102
+ watir_page_object.switch_to_frame(0)
103
+ end
104
+
105
+ it "should refresh the page contents" do
106
+ watir_browser.should_receive(:refresh)
107
+ watir_page_object.refresh
108
+ end
77
109
  end
78
110
 
79
111
  context "when using SeleniumPageObject" do
@@ -91,12 +123,12 @@ describe PageObject do
91
123
  selenium_browser.should_receive(:title).and_return("I am the title of a page")
92
124
  selenium_page_object.title.should == "I am the title of a page"
93
125
  end
94
-
126
+
95
127
  it "should be able to navigate to a page" do
96
128
  selenium_browser.stub_chain(:navigate, :to).with('cheezyworld.com')
97
129
  selenium_page_object.navigate_to('cheezyworld.com')
98
130
  end
99
-
131
+
100
132
  it "should wait until a block returns true" do
101
133
  wait = double('wait')
102
134
  Selenium::WebDriver::Wait.should_receive(:new).with({:timeout => 5, :message => 'too long'}).and_return(wait)
@@ -109,7 +141,7 @@ describe PageObject do
109
141
  selenium_page_object.alert do
110
142
  end
111
143
  end
112
-
144
+
113
145
  it "should override confirm popup behavior" do
114
146
  selenium_browser.should_receive(:execute_script).twice
115
147
  selenium_page_object.confirm(true) do
@@ -120,6 +152,34 @@ describe PageObject do
120
152
  selenium_page_object.prompt("blah") do
121
153
  end
122
154
  end
155
+
156
+ it "should switch to a new window with a given title" do
157
+ selenium_browser.should_receive(:window_handles).and_return(["win1"])
158
+ selenium_browser.should_receive(:switch_to).and_return(selenium_browser)
159
+ selenium_browser.should_receive(:window).with("win1").and_return(selenium_browser)
160
+ selenium_browser.should_receive(:title).and_return("My Title")
161
+ selenium_page_object.attach_to_window(:title => "My Title")
162
+ end
163
+
164
+ it "should switch to a new window with a given url" do
165
+ selenium_browser.should_receive(:window_handles).and_return(["win1"])
166
+ selenium_browser.should_receive(:switch_to).and_return(selenium_browser)
167
+ selenium_browser.should_receive(:window).with("win1").and_return(selenium_browser)
168
+ selenium_browser.should_receive(:current_url).and_return("page.html")
169
+ selenium_page_object.attach_to_window(:url => "page.html")
170
+ end
171
+
172
+ it "should switch to a new frame by index" do
173
+ selenium_browser.should_receive(:switch_to).and_return(selenium_browser)
174
+ selenium_browser.should_receive(:frame).with(0)
175
+ selenium_page_object.switch_to_frame(0)
176
+ end
177
+
178
+ it "should refresh the page contents" do
179
+ selenium_browser.should_receive(:navigate).and_return(selenium_browser)
180
+ selenium_browser.should_receive(:refresh)
181
+ selenium_page_object.refresh
182
+ end
123
183
  end
124
184
  end
125
185
  end