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
@@ -119,7 +119,7 @@ When /^I search for the radio button by "([^"]*)" and "([^"]*)"$/ do |param1, pa
119
119
  @how = "#{param1}_#{param2}"
120
120
  end
121
121
 
122
- When /^I select the radio button$/ do
122
+ When /^I select the radio button$/ do
123
123
  @page.send "select_milk_#{@how}".to_sym
124
124
  end
125
125
 
@@ -217,7 +217,7 @@ Then /^I should see the hidden field contains "([^\"]*)"$/ do |text|
217
217
  end
218
218
 
219
219
  When /^I search for the hidden field by "([^\"]*)"$/ do |how|
220
- @element = @page.send "hidden_field_#{how}_hidden_field"
220
+ @element = @page.send "hidden_field_#{how}_hidden_field"
221
221
  end
222
222
 
223
223
  Then /^hidden field element should contains "([^\"]*)"$/ do |text|
@@ -1,5 +1,5 @@
1
1
  def success
2
-
2
+
3
3
  end
4
4
 
5
5
  Then /^I should be able to wait until it is present$/ do
@@ -41,7 +41,7 @@ end
41
41
  When /^I retrieve table cell$/ do
42
42
  @element = @page.cell_id_cell
43
43
  end
44
-
44
+
45
45
  When /^I locate the form$/ do
46
46
  @element = @page.form_id_form
47
47
  end
@@ -0,0 +1,21 @@
1
+ class FramePage
2
+ include PageObject
3
+ end
4
+
5
+ Given /^I am on the frame elements page$/ do
6
+ @page = FramePage.new(@browser)
7
+ @page.navigate_to(UrlHelper.frame_elements)
8
+ end
9
+
10
+ When /^I switch to a frame using id "([^"]*)"$/ do |id|
11
+ @page.switch_to_frame(id)
12
+ end
13
+
14
+ Then /^I should see "([^"]*)" in the frame$/ do |text|
15
+ @page.text.should include text
16
+ end
17
+
18
+ When /^I switch to a frame using index "([^"]*)"$/ do |index|
19
+ @page.switch_to_frame(index.to_i)
20
+ end
21
+
@@ -1,6 +1,5 @@
1
-
2
1
  Then /^the page should contain the text "([^\"]*)"$/ do |text|
3
- @page.text.should include text
2
+ @page.text.should include text
4
3
  end
5
4
 
6
5
  Then /^the page should contain the html "([^\"]*)"$/ do |html|
@@ -49,3 +48,26 @@ Then /^I should be able to get the message and default value$/ do
49
48
  @msg[:default_value].should == 'John Doe'
50
49
  end
51
50
 
51
+ When /^I open a second window$/ do
52
+ @page.open_window
53
+ end
54
+
55
+ class SecondPage
56
+ include PageObject
57
+ end
58
+
59
+ Then /^I should be able to attach to a page object using title$/ do
60
+ @second_page = SecondPage.new(@browser)
61
+ @second_page.attach_to_window(:title => "Success")
62
+ end
63
+
64
+ Then /^I should be able to attach to a page object using url$/ do
65
+ @second_page = SecondPage.new(@browser)
66
+ @second_page.attach_to_window(:url => "success.html")
67
+ end
68
+
69
+ Then /^I should be able to refresh the page$/ do
70
+ @page.refresh
71
+ end
72
+
73
+
@@ -1,4 +1,3 @@
1
-
2
1
  Given /^I am on the static elements page$/ do
3
2
  @page = Page.new(@browser)
4
3
  @page.navigate_to(UrlHelper.static_elements)
@@ -6,13 +6,27 @@ require 'selenium-webdriver'
6
6
 
7
7
  require 'page-object'
8
8
 
9
+
10
+
9
11
  Before do
10
- @browser = Watir::Browser.new :firefox if ENV['DRIVER'] == 'WATIR'
11
- @browser = Selenium::WebDriver.for :firefox if ENV['DRIVER'] == 'SELENIUM'
12
+ @browser = PageObject::PersistantBrowser.get_browser
12
13
  end
13
-
14
- After do |s|
15
- @browser.close
14
+ at_exit do
15
+ PageObject::PersistantBrowser.quit
16
16
  end
17
17
 
18
-
18
+ module PageObject
19
+ module PersistantBrowser
20
+ @@browser = false
21
+ def self.get_browser
22
+ if !@@browser
23
+ @@browser = Watir::Browser.new :firefox if ENV['DRIVER'] == 'WATIR'
24
+ @@browser = Selenium::WebDriver.for :firefox if ENV['DRIVER'] == 'SELENIUM'
25
+ end
26
+ return @@browser
27
+ end
28
+ def self.quit
29
+ @@browser.quit
30
+ end
31
+ end
32
+ end
@@ -50,7 +50,7 @@ class Page
50
50
  link(:google_search_href, :href => "success.html")
51
51
  link(:google_search_text, :text => "Google Search")
52
52
  link(:google_search_index, :index => 0)
53
-
53
+
54
54
  select_list(:sel_list_id, :id => "sel_list_id")
55
55
  select_list(:sel_list_class, :class => "sel_list_class")
56
56
  select_list(:sel_list_index, :index => 0)
@@ -76,17 +76,18 @@ class Page
76
76
  radio_button(:milk_xpath, :xpath => "//input[@type='radio']")
77
77
  radio_button(:milk_class_index, :class => "milk_class", :index => 0)
78
78
  radio_button(:milk_name_index, :name => "milk_name", :index => 0)
79
-
79
+
80
80
  radio_button(:butter_id, :id => 'butter_id')
81
-
81
+
82
82
  div(:div_id, :id => 'div_id')
83
83
  div(:div_name, :name => 'div_name')
84
84
  div(:div_class, :class => 'div_class')
85
+ div(:div_text, :text => 'page-object rocks!')
85
86
  div(:div_index, :index => 0)
86
87
  div(:div_xpath, :xpath => '//div')
87
88
  div(:div_class_index, :class => "div_class", :index => 0)
88
89
  div(:div_name_index, :name => "div_name", :index => 0)
89
-
90
+
90
91
  span(:span_id, :id => 'span_id')
91
92
  span(:span_name, :name => 'span_name')
92
93
  span(:span_class, :class => 'span_class')
@@ -94,7 +95,7 @@ class Page
94
95
  span(:span_xpath, :xpath => '//span')
95
96
  span(:span_class_index, :class => "span_class", :index => 0)
96
97
  span(:span_name_index, :name => "span_name", :index => 0)
97
-
98
+
98
99
  table(:table_id, :id => 'table_id')
99
100
  table(:table_name, :name => 'table_name')
100
101
  table(:table_class, :class => 'table_class')
@@ -102,7 +103,7 @@ class Page
102
103
  table(:table_xpath, :xpath => '//table')
103
104
  table(:table_class_index, :class => "table_class", :index => 0)
104
105
  table(:table_name_index, :name => "table_name", :index => 0)
105
-
106
+
106
107
  cell(:cell_id, :id => 'cell_id')
107
108
  cell(:cell_name, :name => 'cell_name')
108
109
  cell(:cell_class, :class => 'cell_class')
@@ -110,7 +111,7 @@ class Page
110
111
  cell(:cell_xpath, :xpath => '//table//tr[2]//td[2]')
111
112
  cell(:cell_class_index, :class => "cell_class", :index => 0)
112
113
  cell(:cell_name_index, :name => "cell_name", :index => 0)
113
-
114
+
114
115
  button(:button_id, :id => 'button_id')
115
116
  button(:button_name, :name => 'button_name')
116
117
  button(:button_class, :class => 'button_class')
@@ -119,7 +120,7 @@ class Page
119
120
  button(:button_text, :text => 'Click Me')
120
121
  button(:button_class_index, :class => "button_class", :index => 0)
121
122
  button(:button_name_index, :name => "button_name", :index => 0)
122
-
123
+
123
124
  image(:image_id, :id => 'image_id')
124
125
  image(:image_name, :name => 'image_name')
125
126
  image(:image_class, :class => 'image_class')
@@ -135,7 +136,7 @@ class Page
135
136
  form(:form_xpath, :xpath => '//form')
136
137
  form(:form_class_index, :class => "form_class", :index => 0)
137
138
  form(:form_name_index, :name => "form_name", :index => 0)
138
-
139
+
139
140
  list_item(:li_id, :id => 'li_id')
140
141
  list_item(:li_name, :name => 'li_name')
141
142
  list_item(:li_class, :class => 'li_class')
@@ -143,7 +144,7 @@ class Page
143
144
  list_item(:li_xpath, :xpath => '//li[1]')
144
145
  list_item(:li_class_index, :class => "li_class", :index => 0)
145
146
  list_item(:li_name_index, :name => "li_name", :index => 0)
146
-
147
+
147
148
  unordered_list(:ul_id, :id => 'ul_id')
148
149
  unordered_list(:ul_name, :name => 'ul_name')
149
150
  unordered_list(:ul_class, :class => 'ul_class')
@@ -159,8 +160,10 @@ class Page
159
160
  ordered_list(:ol_xpath, :xpath => '//ol')
160
161
  ordered_list(:ol_class_index, :class => "ol_class", :index => 0)
161
162
  ordered_list(:ol_name_index, :name => "ol_name", :index => 0)
162
-
163
+
163
164
  button(:alert_button, :id => 'alert_button')
164
165
  button(:confirm_button, :id => 'confirm_button')
165
166
  button(:prompt_button, :id => 'prompt_button')
167
+
168
+ link(:open_window, :text => 'New Window')
166
169
  end
@@ -12,5 +12,9 @@ module UrlHelper
12
12
  def static_elements
13
13
  "#{files}/static_elements.html"
14
14
  end
15
+
16
+ def frame_elements
17
+ "#{files}/frames.html"
18
+ end
15
19
  end
16
20
  end
@@ -2,19 +2,19 @@ Feature: Table
2
2
  In order to interact with tables
3
3
  Testers will need access and interrogation ability
4
4
 
5
-
5
+
6
6
  Background:
7
7
  Given I am on the static elements page
8
-
8
+
9
9
  Scenario: Retrieve a table
10
10
  When I retrieve a table element
11
11
  Then I should know it is visible
12
-
12
+
13
13
  @watir_only
14
14
  Scenario: Determine if a table exists
15
15
  When I retrieve a table element
16
16
  Then I should know it exists
17
-
17
+
18
18
  Scenario: Retrieve the data from a table
19
19
  When I retrieve a table element
20
20
  Then the data for row "1" should be "Data1" and "Data2"
@@ -23,7 +23,7 @@ Feature: Table
23
23
  And each row should contain "Data"
24
24
  And row "1" should have "2" columns
25
25
  And each column should contain "Data"
26
-
26
+
27
27
  Scenario Outline: Locating table cells on the Page
28
28
  When I retrieve a table element by "<search_by>"
29
29
  Then the data for row "1" should be "Data1" and "Data2"
@@ -32,7 +32,7 @@ Feature: Table
32
32
  | search_by |
33
33
  | id |
34
34
  | class |
35
- | xpath |
35
+ | xpath |
36
36
  | index |
37
37
  | name |
38
38
 
@@ -41,6 +41,6 @@ Feature: Table
41
41
  Then the data for row "1" should be "Data1" and "Data2"
42
42
 
43
43
  Scenarios:
44
- | param1 | param2 |
45
- | class | index |
46
- | name | index |
44
+ | param1 | param2 |
45
+ | class | index |
46
+ | name | index |
@@ -7,7 +7,7 @@ Feature: Table Cell
7
7
  Scenario: Retrieving the text from a table cell
8
8
  When I retrieve the data from the table cell
9
9
  Then the cell data should be 'Data4'
10
-
10
+
11
11
  Scenario Outline: Locating table cells on the Page
12
12
  When I search for the table cell by "<search_by>"
13
13
  Then the cell data should be 'Data4'
@@ -16,9 +16,9 @@ Feature: Table Cell
16
16
  | search_by |
17
17
  | id |
18
18
  | class |
19
- | xpath |
19
+ | xpath |
20
20
  | name |
21
-
21
+
22
22
  @watir_only
23
23
  Scenario Outline: Locating table cells on the Page with watir
24
24
  When I search for the table cell by "<search_by>"
@@ -33,7 +33,7 @@ Feature: Table Cell
33
33
  Then the cell data should be 'Data4'
34
34
 
35
35
  Scenarios:
36
- | param1 | param2 |
37
- | class | index |
38
- | name | index |
36
+ | param1 | param2 |
37
+ | class | index |
38
+ | name | index |
39
39
 
@@ -1,9 +1,9 @@
1
1
  Feature: Text Area
2
2
 
3
-
3
+
4
4
  Background:
5
5
  Given I am on the static elements page
6
-
6
+
7
7
  Scenario: Setting and getting a value from a text area
8
8
  When I type "abcdefghijklmnop" into the text area
9
9
  Then the text area should contain "abcdefghijklmnop"
@@ -17,7 +17,7 @@ Feature: Text Area
17
17
  | id |
18
18
  | class |
19
19
  | name |
20
- | xpath |
20
+ | xpath |
21
21
  | css |
22
22
  | tag_name |
23
23
  | index |
@@ -28,6 +28,6 @@ Feature: Text Area
28
28
  Then I should be able to type "I found it" into the area
29
29
 
30
30
  Scenarios:
31
- | param1 | param2 |
32
- | class | index |
33
- | name | index |
31
+ | param1 | param2 |
32
+ | class | index |
33
+ | name | index |
@@ -2,10 +2,10 @@ Feature: Text Fields
2
2
  In order to interact with text fields
3
3
  Testers will need access and interrogation ability
4
4
 
5
-
5
+
6
6
  Background:
7
7
  Given I am on the static elements page
8
-
8
+
9
9
  Scenario: Setting and getting a value from a text field
10
10
  When I type "abcDEF" into the text field
11
11
  Then the text field should contain "abcDEF"
@@ -19,19 +19,19 @@ Feature: Text Fields
19
19
  | id |
20
20
  | class |
21
21
  | name |
22
- | xpath |
22
+ | xpath |
23
23
  | css |
24
24
  | tag_name |
25
25
  | index |
26
-
26
+
27
27
  Scenario Outline: Locating a text field using multiple parameters
28
28
  When I search for the text field by "<param1>" and "<param2>"
29
29
  Then I should be able to type "I found it" into the field
30
30
 
31
31
  Scenarios:
32
- | param1 | param2 |
33
- | class | index |
34
- | name | index |
32
+ | param1 | param2 |
33
+ | class | index |
34
+ | name | index |
35
35
 
36
36
  Scenario: Retrieve a text field
37
37
  When I retrieve a text field
@@ -2,7 +2,7 @@ Feature: Unordered list
2
2
 
3
3
  Background:
4
4
  Given I am on the static elements page
5
-
5
+
6
6
  Scenario: Getting the first element from the unordered list
7
7
  When I get the first item from the unordered list
8
8
  Then the list items text should be "Item One"
@@ -13,12 +13,12 @@ Feature: Unordered list
13
13
  Then the list items text should be "Item One"
14
14
  And the list should contain 3 items
15
15
  And each item should contain "Item"
16
-
16
+
17
17
  Scenarios:
18
18
  | search_by |
19
19
  | id |
20
20
  | class |
21
- | xpath |
21
+ | xpath |
22
22
  | index |
23
23
  | name |
24
24
 
@@ -28,6 +28,6 @@ Feature: Unordered list
28
28
  Then the list items text should be "Item One"
29
29
 
30
30
  Scenarios:
31
- | param1 | param2 |
32
- | class | index |
33
- | name | index |
31
+ | param1 | param2 |
32
+ | class | index |
33
+ | name | index |
data/lib/page-object.rb CHANGED
@@ -1,6 +1,6 @@
1
-
2
1
  require 'page-object/version'
3
2
  require 'page-object/accessors'
3
+ require 'page-object/platforms'
4
4
 
5
5
  #
6
6
  # Module that when included adds functionality to a page object. This module
@@ -31,6 +31,7 @@ require 'page-object/accessors'
31
31
  # @see PageObject::Accessors to see what class level methods are added to this module at runtime.
32
32
  #
33
33
  module PageObject
34
+ include LoadsPlatform
34
35
  # @return [Watir::Browser or Selenium::WebDriver::Driver] the platform browser passed to the constructor
35
36
  attr_reader :browser
36
37
  # @return [PageObject::WatirPageObject or PageObject::SeleniumPageObject] the platform page object
@@ -52,7 +53,7 @@ module PageObject
52
53
  def self.included(cls)
53
54
  cls.extend PageObject::Accessors
54
55
  end
55
-
56
+
56
57
  #
57
58
  # navigate to the provided url
58
59
  #
@@ -61,7 +62,7 @@ module PageObject
61
62
  def navigate_to(url)
62
63
  platform.navigate_to(url)
63
64
  end
64
-
65
+
65
66
  #
66
67
  # Returns the text of the current page
67
68
  #
@@ -82,7 +83,7 @@ module PageObject
82
83
  def title
83
84
  platform.title
84
85
  end
85
-
86
+
86
87
  #
87
88
  # Wait until the block returns true or times out
88
89
  #
@@ -98,7 +99,7 @@ module PageObject
98
99
  def wait_until(timeout = 30, message = nil, &block)
99
100
  platform.wait_until(timeout, message, &block)
100
101
  end
101
-
102
+
102
103
  #
103
104
  # Override the normal alert popup so it does not occurr.
104
105
  #
@@ -113,7 +114,7 @@ module PageObject
113
114
  def alert(&block)
114
115
  platform.alert(&block)
115
116
  end
116
-
117
+
117
118
  #
118
119
  # Override the normal confirm popup so it does not occurr.
119
120
  #
@@ -129,7 +130,7 @@ module PageObject
129
130
  def confirm(response, &block)
130
131
  platform.confirm(response, &block)
131
132
  end
132
-
133
+
133
134
  #
134
135
  # Override the normal promp popup so it does not occurr.
135
136
  #
@@ -146,18 +147,41 @@ module PageObject
146
147
  def prompt(answer, &block)
147
148
  platform.prompt(answer, &block)
148
149
  end
150
+
151
+ #
152
+ # Attach to a running window. You can locate the window using either
153
+ # the window's title or url.
154
+ #
155
+ # @example
156
+ # page.attach_to_window(:title => "other window's title")
157
+ #
158
+ # @param [Hash] either :title or :url of the other window. The url does not need to
159
+ # be the entire url - it can just be the page name like index.html
160
+ #
161
+ def attach_to_window(identifier)
162
+ platform.attach_to_window(identifier)
163
+ end
164
+
165
+ #
166
+ # Switch to a frame within the current context.
167
+ #
168
+ # @param [String or Fixnum] you can pass the index (zero based) or id for the frame
169
+ # you wish to switch to.
170
+ #
171
+ def switch_to_frame(identifier)
172
+ platform.switch_to_frame identifier
173
+ end
174
+
175
+ #
176
+ # Refresh to current page
177
+ #
178
+ def refresh
179
+ platform.refresh
180
+ end
149
181
 
150
182
  private
151
183
 
152
184
  def include_platform_driver(browser)
153
- if browser.is_a? Watir::Browser
154
- require 'page-object/watir_page_object'
155
- @platform = PageObject::WatirPageObject.new(browser)
156
- elsif browser.is_a? Selenium::WebDriver::Driver
157
- require 'page-object/selenium_page_object'
158
- @platform = PageObject::SeleniumPageObject.new(browser)
159
- else
160
- raise ArgumentError, "expect Watir::Browser or Selenium::WebDriver::Driver"
161
- end
185
+ @platform = load_platform(browser, PageObject::Platforms.get)
162
186
  end
163
187
  end