page-object 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -8,7 +8,7 @@ end
8
8
 
9
9
  class TestWorld
10
10
  include PageObject::PageFactory
11
-
11
+
12
12
  attr_accessor :browser
13
13
  end
14
14
 
@@ -17,14 +17,14 @@ describe PageObject::PageFactory do
17
17
  @world = TestWorld.new
18
18
  @world.browser = mock_watir_browser
19
19
  end
20
-
20
+
21
21
  it "should create a new page object and execute a block" do
22
22
  @world.browser.should_not_receive(:goto)
23
23
  @world.on_page FactoryTestPageObject do |page|
24
24
  page.should be_instance_of FactoryTestPageObject
25
25
  end
26
26
  end
27
-
27
+
28
28
  it "should create and visit a new page" do
29
29
  @world.browser.should_receive(:goto)
30
30
  @world.visit_page FactoryTestPageObject do |page|
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
- require 'page-object/selenium_page_object'
2
+ require 'page-object/platforms/selenium/page_object'
3
3
  require 'page-object/elements'
4
4
 
5
5
  class SeleniumTestPageObject
6
6
  include PageObject
7
7
  end
8
8
 
9
- describe PageObject::SeleniumPageObject do
9
+ describe PageObject::Platforms::Selenium::PageObject do
10
10
  let(:selenium_browser) { mock_selenium_browser }
11
11
  let(:selenium_page_object) { SeleniumTestPageObject.new(selenium_browser) }
12
12
 
@@ -17,12 +17,19 @@ describe PageObject::SeleniumPageObject do
17
17
  selenium_browser.should_receive(:find_element)
18
18
  selenium_page_object.platform.hidden_field_for(:text => 'foo')
19
19
  end
20
-
20
+
21
21
  it "should add tag_name when identifying by href for anchor" do
22
22
  expected_identifier = {:href => 'foo', :tag_name => 'a'}
23
23
  PageObject::Elements::Link.should_receive(:selenium_identifier_for).with(expected_identifier)
24
24
  selenium_browser.should_receive(:find_element)
25
25
  selenium_page_object.platform.link_for(:href => 'foo')
26
26
  end
27
+
28
+ it "should add tag_name when identifying by text for div" do
29
+ expected_identifier = {:text => 'foo', :tag_name => 'div'}
30
+ PageObject::Elements::Div.should_receive(:selenium_identifier_for).with(expected_identifier)
31
+ selenium_browser.should_receive(:find_element)
32
+ selenium_page_object.platform.div_for(:text => 'foo')
33
+ end
27
34
  end
28
35
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe PageObject::Platforms::Selenium do
5
+
6
+ it "should be registered as an adapter" do
7
+ PageObject::Platforms.get[:selenium].should be PageObject::Platforms::Selenium
8
+
9
+ end
10
+ describe 'create page object' do
11
+ let(:browser) { double('browser') }
12
+ let(:subject) { PageObject::Platforms::Selenium.create_page_object(browser) }
13
+ it "should create a SeleniumPageObject" do
14
+ subject.should be_kind_of PageObject::Platforms::Selenium::PageObject
15
+ end
16
+ end
17
+ describe "is for?" do
18
+ it "should be true when the browser is a selenium driver" do
19
+ browser = mock_selenium_browser()
20
+ PageObject::Platforms::Selenium.is_for?(browser).should == true
21
+ end
22
+ it "should be false when the browser is anything else" do
23
+ PageObject::Platforms::Selenium.is_for?("asdf").should == false
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe PageObject::Platforms::Watir do
4
+ it "should be in the PageObjects Adapters list" do
5
+ PageObject::Platforms.get[:watir].should be PageObject::Platforms::Watir
6
+ end
7
+ describe "create page object" do
8
+ let(:browser) { double('browser') }
9
+ let(:subject) { PageObject::Platforms::Watir.create_page_object(browser) }
10
+ it "should create a WatirPageObject" do
11
+ subject.should be_kind_of PageObject::WatirPageObject
12
+ end
13
+ it "should give the watir page object the browser" do
14
+ subject.browser.should be browser
15
+ end
16
+ end
17
+ describe "is for?" do
18
+ it "should be true when the browser is Watir::Browser" do
19
+ browser = mock_watir_browser()
20
+ PageObject::Platforms::Watir.is_for?(browser).should be true
21
+ end
22
+ it "should be false at any other point" do
23
+ browser = 'asdf'
24
+ PageObject::Platforms::Watir.is_for?('asdf').should be false
25
+ end
26
+ end
27
+ end
data/spec/spec_helper.rb CHANGED
@@ -17,15 +17,28 @@ require 'page-object'
17
17
 
18
18
  def mock_watir_browser
19
19
  watir_browser = double('watir')
20
- watir_browser.should_receive(:is_a?).with(Watir::Browser).and_return(true)
20
+ watir_browser.stub!(:is_a?).with(anything()).and_return(false)
21
+ watir_browser.stub!(:is_a?).with(Watir::Browser).and_return(true)
21
22
  watir_browser
22
23
  end
23
24
 
24
-
25
+
25
26
  def mock_selenium_browser
26
27
  selenium_browser = double('selenium')
27
- selenium_browser.should_receive(:is_a?).with(Watir::Browser).and_return(false)
28
- selenium_browser.should_receive(:is_a?).with(Selenium::WebDriver::Driver).and_return(true)
28
+ selenium_browser.stub!(:is_a?).with(Watir::Browser).and_return(false)
29
+ selenium_browser.stub!(:is_a?).with(Selenium::WebDriver::Driver).and_return(true)
29
30
  selenium_browser
30
31
  end
31
-
32
+
33
+
34
+ def mock_adapter(browser, page_object)
35
+ adapter = double('adapter')
36
+ adapter.stub!(:is_for?).with(anything()).and_return false
37
+ adapter.stub!(:is_for?).with(browser).and_return true
38
+ adapter.stub!(:create_page_object).and_return page_object
39
+ adapter
40
+ end
41
+
42
+ def mock_adapters(adapters)
43
+ PageObject::Platforms.stub!(:get).and_return adapters
44
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: page-object
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: "0.2"
5
+ version: 0.2.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-07-24 00:00:00 Z
13
+ date: 2011-07-29 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.6
23
+ version: 0.2.8
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: 2.1.0
34
+ version: 2.2.0
35
35
  type: :runtime
36
36
  version_requirements: *id002
37
37
  - !ruby/object:Gem::Dependency
@@ -93,7 +93,12 @@ files:
93
93
  - features/div.feature
94
94
  - features/element_attributes.feature
95
95
  - features/form.feature
96
+ - features/frames.feature
96
97
  - features/hidden_field.feature
98
+ - features/html/frame_1.html
99
+ - features/html/frame_2.html
100
+ - features/html/frames.html
101
+ - features/html/iframes.html
97
102
  - features/html/images/circle.png
98
103
  - features/html/static_elements.html
99
104
  - features/html/success.html
@@ -108,6 +113,7 @@ files:
108
113
  - features/step_definitions/accessor_steps.rb
109
114
  - features/step_definitions/async_steps.rb
110
115
  - features/step_definitions/element_steps.rb
116
+ - features/step_definitions/frames_steps.rb
111
117
  - features/step_definitions/page_level_actions_steps.rb
112
118
  - features/step_definitions/page_traversal_steps.rb
113
119
  - features/step_definitions/table_steps.rb
@@ -142,28 +148,32 @@ files:
142
148
  - lib/page-object/elements/text_area.rb
143
149
  - lib/page-object/elements/text_field.rb
144
150
  - lib/page-object/elements/unordered_list.rb
151
+ - lib/page-object/loads_platform.rb
145
152
  - lib/page-object/page_factory.rb
146
- - lib/page-object/platforms/selenium_button.rb
147
- - lib/page-object/platforms/selenium_element.rb
148
- - lib/page-object/platforms/selenium_form.rb
149
- - lib/page-object/platforms/selenium_image.rb
150
- - lib/page-object/platforms/selenium_link.rb
151
- - lib/page-object/platforms/selenium_ordered_list.rb
152
- - lib/page-object/platforms/selenium_select_list.rb
153
- - lib/page-object/platforms/selenium_table.rb
154
- - lib/page-object/platforms/selenium_table_row.rb
155
- - lib/page-object/platforms/selenium_unordered_list.rb
156
- - lib/page-object/platforms/watir_element.rb
157
- - lib/page-object/platforms/watir_form.rb
158
- - lib/page-object/platforms/watir_image.rb
159
- - lib/page-object/platforms/watir_ordered_list.rb
160
- - lib/page-object/platforms/watir_select_list.rb
161
- - lib/page-object/platforms/watir_table.rb
162
- - lib/page-object/platforms/watir_table_row.rb
163
- - lib/page-object/platforms/watir_unordered_list.rb
164
- - lib/page-object/selenium_page_object.rb
153
+ - lib/page-object/platforms.rb
154
+ - lib/page-object/platforms/selenium.rb
155
+ - lib/page-object/platforms/selenium/button.rb
156
+ - lib/page-object/platforms/selenium/element.rb
157
+ - lib/page-object/platforms/selenium/form.rb
158
+ - lib/page-object/platforms/selenium/image.rb
159
+ - lib/page-object/platforms/selenium/link.rb
160
+ - lib/page-object/platforms/selenium/ordered_list.rb
161
+ - lib/page-object/platforms/selenium/page_object.rb
162
+ - lib/page-object/platforms/selenium/select_list.rb
163
+ - lib/page-object/platforms/selenium/table.rb
164
+ - lib/page-object/platforms/selenium/table_row.rb
165
+ - lib/page-object/platforms/selenium/unordered_list.rb
166
+ - lib/page-object/platforms/watir.rb
167
+ - lib/page-object/platforms/watir/element.rb
168
+ - lib/page-object/platforms/watir/form.rb
169
+ - lib/page-object/platforms/watir/image.rb
170
+ - lib/page-object/platforms/watir/ordered_list.rb
171
+ - lib/page-object/platforms/watir/page_object.rb
172
+ - lib/page-object/platforms/watir/select_list.rb
173
+ - lib/page-object/platforms/watir/table.rb
174
+ - lib/page-object/platforms/watir/table_row.rb
175
+ - lib/page-object/platforms/watir/unordered_list.rb
165
176
  - lib/page-object/version.rb
166
- - lib/page-object/watir_page_object.rb
167
177
  - page-object.gemspec
168
178
  - spec/page-object/accessors_spec.rb
169
179
  - spec/page-object/elements/button_spec.rb
@@ -184,9 +194,12 @@ files:
184
194
  - spec/page-object/elements/text_area_spec.rb
185
195
  - spec/page-object/elements/text_field_spec.rb
186
196
  - spec/page-object/elements/unordered_list_spec.rb
197
+ - spec/page-object/loads_platform_spec.rb
187
198
  - spec/page-object/page-object_spec.rb
188
199
  - spec/page-object/page_factory_spec.rb
189
- - spec/page-object/selenium_page_object_spec.rb
200
+ - spec/page-object/platforms/selenium/selenium_page_object_spec.rb
201
+ - spec/page-object/platforms/selenium_spec.rb
202
+ - spec/page-object/platforms/watir_spec.rb
190
203
  - spec/spec_helper.rb
191
204
  homepage: http://github.com/cheezy/page-object
192
205
  licenses: []
@@ -222,7 +235,12 @@ test_files:
222
235
  - features/div.feature
223
236
  - features/element_attributes.feature
224
237
  - features/form.feature
238
+ - features/frames.feature
225
239
  - features/hidden_field.feature
240
+ - features/html/frame_1.html
241
+ - features/html/frame_2.html
242
+ - features/html/frames.html
243
+ - features/html/iframes.html
226
244
  - features/html/images/circle.png
227
245
  - features/html/static_elements.html
228
246
  - features/html/success.html
@@ -237,6 +255,7 @@ test_files:
237
255
  - features/step_definitions/accessor_steps.rb
238
256
  - features/step_definitions/async_steps.rb
239
257
  - features/step_definitions/element_steps.rb
258
+ - features/step_definitions/frames_steps.rb
240
259
  - features/step_definitions/page_level_actions_steps.rb
241
260
  - features/step_definitions/page_traversal_steps.rb
242
261
  - features/step_definitions/table_steps.rb
@@ -267,7 +286,10 @@ test_files:
267
286
  - spec/page-object/elements/text_area_spec.rb
268
287
  - spec/page-object/elements/text_field_spec.rb
269
288
  - spec/page-object/elements/unordered_list_spec.rb
289
+ - spec/page-object/loads_platform_spec.rb
270
290
  - spec/page-object/page-object_spec.rb
271
291
  - spec/page-object/page_factory_spec.rb
272
- - spec/page-object/selenium_page_object_spec.rb
292
+ - spec/page-object/platforms/selenium/selenium_page_object_spec.rb
293
+ - spec/page-object/platforms/selenium_spec.rb
294
+ - spec/page-object/platforms/watir_spec.rb
273
295
  - spec/spec_helper.rb
@@ -1,13 +0,0 @@
1
- module PageObject
2
- module Platforms
3
- module SeleniumButton
4
- #
5
- # Override PageObject::PLatforms::SeleniumElement#text because
6
- # #text does not reliabably return a value in Selenium
7
- #
8
- def text
9
- raise "text is not available on button element in Selenium"
10
- end
11
- end
12
- end
13
- end
@@ -1,142 +0,0 @@
1
-
2
- module PageObject
3
- module Platforms
4
- #
5
- # Selenium implementation of the common functionality found across all elements
6
- #
7
- module SeleniumElement
8
-
9
- #
10
- # return true if an element is visible
11
- #
12
- def visible?
13
- @element.displayed?
14
- end
15
-
16
- #
17
- # return true if an element exists
18
- #
19
- def exists?
20
- nil != @element
21
- end
22
-
23
- #
24
- # Get the text for the element
25
- #
26
- # @return [String]
27
- #
28
- def text
29
- @element.text
30
- end
31
-
32
- #
33
- # Get the value of this element
34
- #
35
- # @return [String]
36
- #
37
- def value
38
- @element.attribute('value')
39
- end
40
-
41
- #
42
- # compare this element to another to determine if they are equal
43
- #
44
- def ==(other)
45
- @element == other.element
46
- end
47
-
48
- #
49
- # Get the tag name of this element
50
- #
51
- # @return [String]
52
- #
53
- def tag_name
54
- @element.tag_name
55
- end
56
-
57
- #
58
- # Get the value of a the given attribute of the element. Will return the current value, even if
59
- # this has been modified after the page has been loaded. More exactly, this method will return
60
- # the value of the given attribute, unless that attribute is not present, in which case the
61
- # value of the property with the same name is returned. If neither value is set, nil is
62
- # returned. The "style" attribute is converted as best can be to a text representation with a
63
- # trailing semi-colon. The following are deemed to be "boolean" attributes, and will
64
- # return either "true" or "false":
65
- #
66
- # async, autofocus, autoplay, checked, compact, complete, controls, declare, defaultchecked,
67
- # defaultselected, defer, disabled, draggable, ended, formnovalidate, hidden, indeterminate,
68
- # iscontenteditable, ismap, itemscope, loop, multiple, muted, nohref, noresize, noshade, novalidate,
69
- # nowrap, open, paused, pubdate, readonly, required, reversed, scoped, seamless, seeking,
70
- # selected, spellcheck, truespeed, willvalidate
71
- #
72
- # Finally, the following commonly mis-capitalized attribute/property names are evaluated as
73
- # expected:
74
- #
75
- # class, readonly
76
- #
77
- # @param [String]
78
- # attribute name
79
- # @return [String,nil]
80
- # attribute value
81
- #
82
- def attribute(attribute_name)
83
- @element.attribute attribute_name
84
- end
85
-
86
- #
87
- # Click this element
88
- #
89
- def click
90
- @element.click
91
- end
92
-
93
- #
94
- # Waits until the element is present
95
- #
96
- # @param [Integer] (defaults to: 5) seconds to wait before timing out
97
- #
98
- def when_present(timeout=5)
99
- wait = Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element not present in #{timeout} seconds"})
100
- wait.until do
101
- self.exists?
102
- end
103
- end
104
-
105
- #
106
- # Waits until the element is visible
107
- #
108
- # @param [Integer] (defaults to: 5) seconds to wait before timing out
109
- #
110
- def when_visible(timeout=5)
111
- wait = Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element not present in #{timeout} seconds"})
112
- wait.until do
113
- self.visible?
114
- end
115
- end
116
-
117
- #
118
- # Waits until the element is not visible
119
- #
120
- # @param [Integer] (defaults to: 5) seconds to wait before timing out
121
- #
122
- def when_not_visible(timeout=5)
123
- wait = Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element not present in #{timeout} seconds"})
124
- wait.until do
125
- not self.visible?
126
- end
127
- end
128
-
129
- #
130
- # Waits until the block returns true
131
- #
132
- # @param [Integer] (defaults to: 5) seconds to wait before timing out
133
- # @param [String] the message to display if the event timeouts
134
- # @param the block to execute when the event occurrs
135
- #
136
- def wait_until(timeout=5, message=nil, &block)
137
- wait = Selenium::WebDriver::Wait.new({:timeout => timeout, :message => message})
138
- wait.until &block
139
- end
140
- end
141
- end
142
- end