meeane-page-object 0.1.8
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.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +10 -0
- data/ChangeLog +790 -0
- data/Gemfile +13 -0
- data/Guardfile +20 -0
- data/LICENSE +20 -0
- data/README.md +141 -0
- data/Rakefile +35 -0
- data/cucumber.yml +10 -0
- data/features/area.feature +35 -0
- data/features/async.feature +30 -0
- data/features/audio.feature +68 -0
- data/features/button.feature +87 -0
- data/features/canvas.feature +37 -0
- data/features/check_box.feature +55 -0
- data/features/div.feature +45 -0
- data/features/element.feature +322 -0
- data/features/file_field.feature +40 -0
- data/features/form.feature +43 -0
- data/features/frames.feature +75 -0
- data/features/generic_elements.feature +29 -0
- data/features/gxt_table_extension.feature +24 -0
- data/features/headings.feature +97 -0
- data/features/hidden_field.feature +45 -0
- data/features/html/04-Death_Becomes_Fur.mp4 +0 -0
- data/features/html/04-Death_Becomes_Fur.oga +0 -0
- data/features/html/async.html +36 -0
- data/features/html/double_click.html +13 -0
- data/features/html/failure.html +8 -0
- data/features/html/frame_1.html +18 -0
- data/features/html/frame_2.html +16 -0
- data/features/html/frame_3.html +14 -0
- data/features/html/frames.html +12 -0
- data/features/html/hover.html +12 -0
- data/features/html/iframes.html +12 -0
- data/features/html/images/circle.png +0 -0
- data/features/html/images/img_pulpit.jpg +0 -0
- data/features/html/images/submit.gif +0 -0
- data/features/html/indexed_property.html +52 -0
- data/features/html/modal.html +17 -0
- data/features/html/modal_1.html +38 -0
- data/features/html/modal_2.html +27 -0
- data/features/html/movie.mp4 +0 -0
- data/features/html/movie.ogg +0 -0
- data/features/html/multi_elements.html +144 -0
- data/features/html/nested_elements.html +77 -0
- data/features/html/nested_frame_1.html +1 -0
- data/features/html/nested_frame_2.html +11 -0
- data/features/html/nested_frame_3.html +14 -0
- data/features/html/nested_frames.html +10 -0
- data/features/html/planets.gif +0 -0
- data/features/html/static_elements.html +206 -0
- data/features/html/success.html +8 -0
- data/features/html/sun.gif +0 -0
- data/features/html/sun.html +7 -0
- data/features/image.feature +50 -0
- data/features/indexed_property.feature +98 -0
- data/features/javascript.feature +28 -0
- data/features/label.feature +46 -0
- data/features/link.feature +52 -0
- data/features/list_item.feature +36 -0
- data/features/modal_dialog.feature +15 -0
- data/features/multi_elements.feature +486 -0
- data/features/nested_elements.feature +117 -0
- data/features/ordered_list.feature +56 -0
- data/features/page_level_actions.feature +90 -0
- data/features/paragraph.feature +35 -0
- data/features/radio_button.feature +58 -0
- data/features/radio_button_group.feature +29 -0
- data/features/sample-app/public/jquery-1.3.2.js +4376 -0
- data/features/sample-app/public/jquery.html +30 -0
- data/features/sample-app/public/prototype-1.6.0.3.js +4320 -0
- data/features/sample-app/public/prototype.html +35 -0
- data/features/sample-app/sample_app.rb +35 -0
- data/features/select_list.feature +86 -0
- data/features/span.feature +37 -0
- data/features/step_definitions/accessor_steps.rb +60 -0
- data/features/step_definitions/area_steps.rb +19 -0
- data/features/step_definitions/async_steps.rb +83 -0
- data/features/step_definitions/audio_steps.rb +27 -0
- data/features/step_definitions/button_steps.rb +43 -0
- data/features/step_definitions/canvas_steps.rb +15 -0
- data/features/step_definitions/check_box_steps.rb +35 -0
- data/features/step_definitions/div_steps.rb +19 -0
- data/features/step_definitions/element_steps.rb +266 -0
- data/features/step_definitions/file_field_steps.rb +19 -0
- data/features/step_definitions/form_steps.rb +19 -0
- data/features/step_definitions/frames_steps.rb +159 -0
- data/features/step_definitions/generic_element_steps.rb +31 -0
- data/features/step_definitions/gxt_table_steps.rb +58 -0
- data/features/step_definitions/headings_steps.rb +12 -0
- data/features/step_definitions/hidden_field_steps.rb +27 -0
- data/features/step_definitions/image_steps.rb +27 -0
- data/features/step_definitions/indexed_property_steps.rb +129 -0
- data/features/step_definitions/javascript_steps.rb +53 -0
- data/features/step_definitions/label_steps.rb +19 -0
- data/features/step_definitions/link_steps.rb +40 -0
- data/features/step_definitions/list_item_steps.rb +19 -0
- data/features/step_definitions/modal_dialog_steps.rb +62 -0
- data/features/step_definitions/multi_elements_steps.rb +528 -0
- data/features/step_definitions/nested_elements_steps.rb +212 -0
- data/features/step_definitions/ordered_list_steps.rb +23 -0
- data/features/step_definitions/page_level_actions_steps.rb +135 -0
- data/features/step_definitions/page_traversal_steps.rb +4 -0
- data/features/step_definitions/paragraph_steps.rb +28 -0
- data/features/step_definitions/radio_button_group_steps.rb +36 -0
- data/features/step_definitions/radio_button_steps.rb +27 -0
- data/features/step_definitions/select_list_steps.rb +65 -0
- data/features/step_definitions/span_steps.rb +19 -0
- data/features/step_definitions/table_cell_steps.rb +15 -0
- data/features/step_definitions/table_steps.rb +66 -0
- data/features/step_definitions/text_area_steps.rb +35 -0
- data/features/step_definitions/text_field_steps.rb +35 -0
- data/features/step_definitions/unordered_list_steps.rb +23 -0
- data/features/step_definitions/video_steps.rb +45 -0
- data/features/support/ajax_text_environment.rb +26 -0
- data/features/support/env.rb +8 -0
- data/features/support/hooks.rb +8 -0
- data/features/support/page.rb +364 -0
- data/features/support/persistent_browser.rb +70 -0
- data/features/support/targets/firefox14_osx.rb +6 -0
- data/features/support/targets/firefox14_windows7.rb +6 -0
- data/features/support/url_helper.rb +57 -0
- data/features/table.feature +114 -0
- data/features/table_cell.feature +45 -0
- data/features/text_area.feature +51 -0
- data/features/text_field.feature +70 -0
- data/features/unordered_list.feature +56 -0
- data/features/video.feature +73 -0
- data/lib/page-object/accessors.rb +1313 -0
- data/lib/page-object/core_ext/string.rb +5 -0
- data/lib/page-object/element_locators.rb +21 -0
- data/lib/page-object/elements/area.rb +31 -0
- data/lib/page-object/elements/audio.rb +9 -0
- data/lib/page-object/elements/button.rb +35 -0
- data/lib/page-object/elements/canvas.rb +23 -0
- data/lib/page-object/elements/check_box.rb +37 -0
- data/lib/page-object/elements/div.rb +19 -0
- data/lib/page-object/elements/element.rb +226 -0
- data/lib/page-object/elements/file_field.rb +38 -0
- data/lib/page-object/elements/form.rb +36 -0
- data/lib/page-object/elements/heading.rb +15 -0
- data/lib/page-object/elements/hidden_field.rb +22 -0
- data/lib/page-object/elements/image.rb +36 -0
- data/lib/page-object/elements/label.rb +36 -0
- data/lib/page-object/elements/link.rb +46 -0
- data/lib/page-object/elements/list_item.rb +19 -0
- data/lib/page-object/elements/media.rb +45 -0
- data/lib/page-object/elements/option.rb +10 -0
- data/lib/page-object/elements/ordered_list.rb +50 -0
- data/lib/page-object/elements/paragraph.rb +9 -0
- data/lib/page-object/elements/radio_button.rb +37 -0
- data/lib/page-object/elements/select_list.rb +42 -0
- data/lib/page-object/elements/span.rb +19 -0
- data/lib/page-object/elements/table.rb +68 -0
- data/lib/page-object/elements/table_cell.rb +28 -0
- data/lib/page-object/elements/table_row.rb +50 -0
- data/lib/page-object/elements/text_area.rb +38 -0
- data/lib/page-object/elements/text_field.rb +42 -0
- data/lib/page-object/elements/unordered_list.rb +51 -0
- data/lib/page-object/elements/video.rb +18 -0
- data/lib/page-object/elements.rb +59 -0
- data/lib/page-object/indexed_properties.rb +36 -0
- data/lib/page-object/javascript/jquery.rb +14 -0
- data/lib/page-object/javascript/prototype.rb +14 -0
- data/lib/page-object/javascript/yui.rb +19 -0
- data/lib/page-object/javascript_framework_facade.rb +78 -0
- data/lib/page-object/loads_platform.rb +26 -0
- data/lib/page-object/locator_generator.rb +129 -0
- data/lib/page-object/nested_elements.rb +17 -0
- data/lib/page-object/page_factory.rb +108 -0
- data/lib/page-object/page_populator.rb +92 -0
- data/lib/page-object/platforms/selenium_webdriver/button.rb +15 -0
- data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -0
- data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -0
- data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -0
- data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -0
- data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -0
- data/lib/page-object/platforms/selenium_webdriver/label.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -0
- data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -0
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1136 -0
- data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -0
- data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -0
- data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -0
- data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -0
- data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -0
- data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -0
- data/lib/page-object/platforms/selenium_webdriver.rb +18 -0
- data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -0
- data/lib/page-object/platforms/watir_webdriver/element.rb +249 -0
- data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/form.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/image.rb +22 -0
- data/lib/page-object/platforms/watir_webdriver/label.rb +17 -0
- data/lib/page-object/platforms/watir_webdriver/link.rb +15 -0
- data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -0
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +1029 -0
- data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -0
- data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -0
- data/lib/page-object/platforms/watir_webdriver/table.rb +38 -0
- data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -0
- data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -0
- data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -0
- data/lib/page-object/platforms/watir_webdriver.rb +18 -0
- data/lib/page-object/platforms.rb +18 -0
- data/lib/page-object/version.rb +4 -0
- data/lib/page-object/widgets.rb +133 -0
- data/lib/page-object.rb +408 -0
- data/meeane-page-object.gemspec +32 -0
- data/pageobject.gems +1 -0
- data/spec/page-object/element_locators_spec.rb +1065 -0
- data/spec/page-object/elements/area_spec.rb +45 -0
- data/spec/page-object/elements/button_spec.rb +50 -0
- data/spec/page-object/elements/canvas_spec.rb +40 -0
- data/spec/page-object/elements/check_box_spec.rb +49 -0
- data/spec/page-object/elements/div_spec.rb +28 -0
- data/spec/page-object/elements/element_spec.rb +114 -0
- data/spec/page-object/elements/file_field_spec.rb +39 -0
- data/spec/page-object/elements/form_spec.rb +28 -0
- data/spec/page-object/elements/heading_spec.rb +48 -0
- data/spec/page-object/elements/hidden_field_spec.rb +28 -0
- data/spec/page-object/elements/image_spec.rb +66 -0
- data/spec/page-object/elements/label_spec.rb +29 -0
- data/spec/page-object/elements/link_spec.rb +49 -0
- data/spec/page-object/elements/list_item_spec.rb +28 -0
- data/spec/page-object/elements/nested_element_spec.rb +254 -0
- data/spec/page-object/elements/option_spec.rb +11 -0
- data/spec/page-object/elements/ordered_list_spec.rb +94 -0
- data/spec/page-object/elements/paragraph_spec.rb +28 -0
- data/spec/page-object/elements/select_list_spec.rb +142 -0
- data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -0
- data/spec/page-object/elements/selenium/text_field_spec.rb +49 -0
- data/spec/page-object/elements/selenium_element_spec.rb +172 -0
- data/spec/page-object/elements/span_spec.rb +26 -0
- data/spec/page-object/elements/table_cell_spec.rb +21 -0
- data/spec/page-object/elements/table_row_spec.rb +70 -0
- data/spec/page-object/elements/table_spec.rb +98 -0
- data/spec/page-object/elements/text_area_spec.rb +39 -0
- data/spec/page-object/elements/unordered_list_spec.rb +95 -0
- data/spec/page-object/elements/watir_element_spec.rb +142 -0
- data/spec/page-object/javascript_framework_facade_spec.rb +61 -0
- data/spec/page-object/loads_platform_spec.rb +53 -0
- data/spec/page-object/page-object_spec.rb +405 -0
- data/spec/page-object/page_factory_spec.rb +256 -0
- data/spec/page-object/page_populator_spec.rb +122 -0
- data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -0
- data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
- data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -0
- data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -0
- data/spec/page-object/selenium_accessors_spec.rb +589 -0
- data/spec/page-object/watir_accessors_spec.rb +1107 -0
- data/spec/page-object/widget_spec.rb +226 -0
- data/spec/spec_helper.rb +44 -0
- metadata +404 -0
@@ -0,0 +1,291 @@
|
|
1
|
+
require 'watir-webdriver/atoms'
|
2
|
+
|
3
|
+
module PageObject
|
4
|
+
module Platforms
|
5
|
+
#
|
6
|
+
# Selenium implementation of the common functionality found across all elements
|
7
|
+
#
|
8
|
+
module SeleniumWebDriver
|
9
|
+
module Element
|
10
|
+
include Watir::Atoms
|
11
|
+
|
12
|
+
#
|
13
|
+
# return true if an element is visible
|
14
|
+
#
|
15
|
+
def visible?
|
16
|
+
element.displayed?
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# return true if an element exists
|
21
|
+
#
|
22
|
+
def exists?
|
23
|
+
not element.nil?
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# flash the element by temporarily changing the background color
|
28
|
+
#
|
29
|
+
def flash
|
30
|
+
original_color = attribute('backgroundColor')
|
31
|
+
the_bridge = bridge
|
32
|
+
10.times do |n|
|
33
|
+
color = (n % 2 == 0) ? 'red' : original_color
|
34
|
+
the_bridge.executeScript("arguments[0].style.backgroundColor = '#{color}'", element)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# Get the text for the element
|
40
|
+
#
|
41
|
+
# @return [String]
|
42
|
+
#
|
43
|
+
def text
|
44
|
+
element.text
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Get the html for the element
|
49
|
+
#
|
50
|
+
# @return [String]
|
51
|
+
#
|
52
|
+
def html
|
53
|
+
script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:getOuterHtml)
|
54
|
+
bridge.executeScript(script, element).strip
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# Get the value of this element
|
59
|
+
#
|
60
|
+
# @return [String]
|
61
|
+
#
|
62
|
+
def value
|
63
|
+
element.attribute('value')
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# compare this element to another to determine if they are equal
|
68
|
+
#
|
69
|
+
def ==(other)
|
70
|
+
element == other.element
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Get the tag name of this element
|
75
|
+
#
|
76
|
+
# @return [String]
|
77
|
+
#
|
78
|
+
def tag_name
|
79
|
+
element.tag_name
|
80
|
+
end
|
81
|
+
|
82
|
+
#
|
83
|
+
# Get the value of a the given attribute of the element. Will
|
84
|
+
# return the current value, even if this has been modified
|
85
|
+
# after the page has been loaded. More exactly, this method
|
86
|
+
# will return the value of the given attribute, unless that
|
87
|
+
# attribute is not present, in which case the value of the
|
88
|
+
# property with the same name is returned. If neither value is
|
89
|
+
# set, nil is returned. The "style" attribute is converted as
|
90
|
+
# best can be to a text representation with a trailing
|
91
|
+
# semi-colon. The following are deemed to be "boolean"
|
92
|
+
# attributes, and will return either "true" or "false":
|
93
|
+
#
|
94
|
+
# async, autofocus, autoplay, checked, compact, complete,
|
95
|
+
# controls, declare, defaultchecked, defaultselected, defer,
|
96
|
+
# disabled, draggable, ended, formnovalidate, hidden, indeterminate,
|
97
|
+
# iscontenteditable, ismap, itemscope, loop, multiple, muted,
|
98
|
+
# nohref, noresize, noshade, novalidate, nowrap, open, paused,
|
99
|
+
# pubdate, readonly, required, reversed, scoped, seamless, seeking,
|
100
|
+
# selected, spellcheck, truespeed, willvalidate
|
101
|
+
#
|
102
|
+
# Finally, the following commonly mis-capitalized
|
103
|
+
# attribute/property names are evaluated as expected:
|
104
|
+
#
|
105
|
+
# class, readonly
|
106
|
+
#
|
107
|
+
# @param [String]
|
108
|
+
# attribute name
|
109
|
+
# @return [String,nil]
|
110
|
+
# attribute value
|
111
|
+
#
|
112
|
+
def attribute(attribute_name)
|
113
|
+
element.attribute attribute_name
|
114
|
+
end
|
115
|
+
|
116
|
+
#
|
117
|
+
# Fire the provided event on the current element
|
118
|
+
#
|
119
|
+
def fire_event(event_name)
|
120
|
+
event_name = event_name.to_s.sub(/^on/, '').downcase
|
121
|
+
script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:fireEvent)
|
122
|
+
bridge.executeScript(script, element, event_name)
|
123
|
+
end
|
124
|
+
|
125
|
+
#
|
126
|
+
# hover over the element
|
127
|
+
#
|
128
|
+
def hover
|
129
|
+
mouse = Selenium::WebDriver::Mouse.new(bridge)
|
130
|
+
mouse.move_to(element)
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# hover over the element
|
135
|
+
#
|
136
|
+
def double_click
|
137
|
+
mouse = Selenium::WebDriver::Mouse.new(bridge)
|
138
|
+
mouse.double_click(element)
|
139
|
+
end
|
140
|
+
|
141
|
+
#
|
142
|
+
# find the parent element
|
143
|
+
#
|
144
|
+
def parent
|
145
|
+
script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:getParentElement)
|
146
|
+
parent = bridge.executeScript(script, element)
|
147
|
+
type = element.attribute(:type).to_s.downcase if parent.tag_name.to_sym == :input
|
148
|
+
cls = ::PageObject::Elements.element_class_for(parent.tag_name, type)
|
149
|
+
cls.new(parent, :platform => :selenium_webdriver)
|
150
|
+
end
|
151
|
+
|
152
|
+
#
|
153
|
+
# Set the focus to the current element
|
154
|
+
#
|
155
|
+
def focus
|
156
|
+
bridge.executeScript("return arguments[0].focus()", element)
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# Select the provided text
|
161
|
+
#
|
162
|
+
def select_text(text)
|
163
|
+
Watir::Atoms.load(:selectText)
|
164
|
+
script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:selectText)
|
165
|
+
bridge.executeScript(script, element, text)
|
166
|
+
end
|
167
|
+
|
168
|
+
#
|
169
|
+
# Click this element
|
170
|
+
#
|
171
|
+
def right_click
|
172
|
+
element.context_click
|
173
|
+
end
|
174
|
+
|
175
|
+
#
|
176
|
+
# Waits until the element is present
|
177
|
+
#
|
178
|
+
# @param [Integer] (defaults to: 5) seconds to wait before timing out
|
179
|
+
#
|
180
|
+
def when_present(timeout=::PageObject.default_element_wait)
|
181
|
+
wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element not present in #{timeout} seconds"})
|
182
|
+
wait.until do
|
183
|
+
self.exists?
|
184
|
+
end
|
185
|
+
self
|
186
|
+
end
|
187
|
+
|
188
|
+
#
|
189
|
+
# Waits until the element is not present
|
190
|
+
#
|
191
|
+
# @param [Integer] (defaults to: 5) seconds to wait before
|
192
|
+
# timing out
|
193
|
+
#
|
194
|
+
def when_not_present(timeout=::PageObject.default_element_wait)
|
195
|
+
wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element still present in #{timeout} seconds"})
|
196
|
+
wait.until do
|
197
|
+
not_present = false
|
198
|
+
begin
|
199
|
+
not_present = false if element and element.displayed?
|
200
|
+
rescue Selenium::WebDriver::Error::ObsoleteElementError
|
201
|
+
not_present = true
|
202
|
+
end
|
203
|
+
not_present
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
#
|
208
|
+
# Waits until the element is visible
|
209
|
+
#
|
210
|
+
# @param [Integer] (defaults to: 5) seconds to wait before timing out
|
211
|
+
#
|
212
|
+
def when_visible(timeout=::PageObject.default_element_wait)
|
213
|
+
wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element not visible in #{timeout} seconds"})
|
214
|
+
wait.until do
|
215
|
+
self.visible?
|
216
|
+
end
|
217
|
+
self
|
218
|
+
end
|
219
|
+
|
220
|
+
#
|
221
|
+
# Waits until the element is not visible
|
222
|
+
#
|
223
|
+
# @param [Integer] (defaults to: 5) seconds to wait before timing out
|
224
|
+
#
|
225
|
+
def when_not_visible(timeout=::PageObject.default_element_wait)
|
226
|
+
wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element still visible in #{timeout} seconds"})
|
227
|
+
wait.until do
|
228
|
+
not self.visible?
|
229
|
+
end
|
230
|
+
self
|
231
|
+
end
|
232
|
+
|
233
|
+
#
|
234
|
+
# Waits until the block returns true
|
235
|
+
#
|
236
|
+
# @param [Integer] (defaults to: 5) seconds to wait before timing out
|
237
|
+
# @param [String] the message to display if the event timeouts
|
238
|
+
# @param the block to execute when the event occurs
|
239
|
+
#
|
240
|
+
def wait_until(timeout=::PageObject.default_element_wait, message=nil, &block)
|
241
|
+
wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => message})
|
242
|
+
wait.until &block
|
243
|
+
end
|
244
|
+
|
245
|
+
#
|
246
|
+
# Send keystrokes to this element
|
247
|
+
#
|
248
|
+
# @param [String, Symbol, Array]
|
249
|
+
#
|
250
|
+
# Examples:
|
251
|
+
#
|
252
|
+
# element.send_keys "foo" #=> value: 'foo'
|
253
|
+
# element.send_keys "tet", :arrow_left, "s" #=> value: 'test'
|
254
|
+
# element.send_keys [:control, 'a'], :space #=> value: ' '
|
255
|
+
#
|
256
|
+
# @see Selenium::WebDriver::Keys::KEYS
|
257
|
+
#
|
258
|
+
def send_keys(*args)
|
259
|
+
element.send_keys(*args)
|
260
|
+
end
|
261
|
+
|
262
|
+
#
|
263
|
+
# clear the contents of the element
|
264
|
+
#
|
265
|
+
def clear
|
266
|
+
element.clear
|
267
|
+
end
|
268
|
+
|
269
|
+
#
|
270
|
+
# get the id of the element
|
271
|
+
#
|
272
|
+
def id
|
273
|
+
attribute(:id)
|
274
|
+
end
|
275
|
+
|
276
|
+
#
|
277
|
+
# Scroll until the element is viewable
|
278
|
+
#
|
279
|
+
def scroll_into_view
|
280
|
+
element.location_once_scrolled_into_view
|
281
|
+
end
|
282
|
+
|
283
|
+
private
|
284
|
+
|
285
|
+
def bridge
|
286
|
+
bridge = element.instance_variable_get(:@bridge)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Platforms
|
3
|
+
module SeleniumWebDriver
|
4
|
+
module Image
|
5
|
+
|
6
|
+
#
|
7
|
+
# Return the width of the image.
|
8
|
+
#
|
9
|
+
def width
|
10
|
+
dimension.width
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# Return the height of the image
|
15
|
+
#
|
16
|
+
def height
|
17
|
+
dimension.height
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def dimension
|
23
|
+
element.size
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Platforms
|
3
|
+
module SeleniumWebDriver
|
4
|
+
module Link
|
5
|
+
#
|
6
|
+
# Override PageObject::PLatforms::SeleniumElement#value because
|
7
|
+
# #value is not available on links in Selenium.
|
8
|
+
#
|
9
|
+
def value
|
10
|
+
raise "value not available on link element with Selenium"
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# return the href for the link
|
15
|
+
#
|
16
|
+
def href
|
17
|
+
attribute('href')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Platforms
|
3
|
+
module SeleniumWebDriver
|
4
|
+
module OrderedList
|
5
|
+
|
6
|
+
#
|
7
|
+
# Return the PageObject::Elements::ListItem for the index provided. Index
|
8
|
+
# is zero based.
|
9
|
+
#
|
10
|
+
# @return [PageObject::Elements::ListItem]
|
11
|
+
#
|
12
|
+
def [](idx)
|
13
|
+
children[idx]
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# Return the number of items contained in the ordered list
|
18
|
+
#
|
19
|
+
def items
|
20
|
+
children.size
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def children
|
26
|
+
items = list_items.map do |item|
|
27
|
+
::PageObject::Elements::ListItem.new(item, :platform => :selenium_webdriver)
|
28
|
+
end
|
29
|
+
items.find_all { |item| item.parent.element == element }
|
30
|
+
end
|
31
|
+
|
32
|
+
def list_items
|
33
|
+
element.find_elements(:xpath, child_xpath)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|