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,45 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class Media < Element
|
5
|
+
|
6
|
+
def autoplay?
|
7
|
+
attribute(:autoplay)
|
8
|
+
end
|
9
|
+
|
10
|
+
def has_controls?
|
11
|
+
attribute(:controls)
|
12
|
+
end
|
13
|
+
|
14
|
+
def paused?
|
15
|
+
attribute(:paused)
|
16
|
+
end
|
17
|
+
|
18
|
+
def duration
|
19
|
+
duration = attribute(:duration)
|
20
|
+
return duration.to_f if duration
|
21
|
+
end
|
22
|
+
|
23
|
+
def volume
|
24
|
+
volume = attribute(:volume)
|
25
|
+
return volume.to_i if volume
|
26
|
+
end
|
27
|
+
|
28
|
+
def ended?
|
29
|
+
attribute(:ended)
|
30
|
+
end
|
31
|
+
|
32
|
+
def seeking?
|
33
|
+
attribute(:seeking)
|
34
|
+
end
|
35
|
+
|
36
|
+
def loop?
|
37
|
+
attribute(:loop)
|
38
|
+
end
|
39
|
+
|
40
|
+
def muted?
|
41
|
+
attribute(:muted)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class OrderedList < Element
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize(element, platform)
|
8
|
+
@element = element
|
9
|
+
include_platform_for platform
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# iterator that yields with a PageObject::Elements::ListItem
|
14
|
+
#
|
15
|
+
# @return [PageObject::Elements::ListItem]
|
16
|
+
#
|
17
|
+
def each
|
18
|
+
for index in 1..self.items do
|
19
|
+
yield self[index-1]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def child_xpath
|
26
|
+
".//child::li"
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.watir_finders
|
30
|
+
[:class, :id, :index, :xpath]
|
31
|
+
end
|
32
|
+
|
33
|
+
def include_platform_for platform
|
34
|
+
super
|
35
|
+
if platform[:platform] == :watir_webdriver
|
36
|
+
require 'page-object/platforms/watir_webdriver/ordered_list'
|
37
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::OrderedList
|
38
|
+
elsif platform[:platform] == :selenium_webdriver
|
39
|
+
require 'page-object/platforms/selenium_webdriver/ordered_list'
|
40
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::OrderedList
|
41
|
+
else
|
42
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
::PageObject::Elements.tag_to_class[:ol] = ::PageObject::Elements::OrderedList
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class RadioButton < Element
|
5
|
+
|
6
|
+
def initialize(element, platform)
|
7
|
+
@element = element
|
8
|
+
include_platform_for platform
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def self.watir_finders
|
14
|
+
super + [:value, :label]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.selenium_finders
|
18
|
+
super + [:value, :label]
|
19
|
+
end
|
20
|
+
|
21
|
+
def include_platform_for platform
|
22
|
+
super
|
23
|
+
if platform[:platform] == :watir_webdriver
|
24
|
+
require 'page-object/platforms/watir_webdriver/radio_button'
|
25
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::RadioButton
|
26
|
+
elsif platform[:platform] == :selenium_webdriver
|
27
|
+
require 'page-object/platforms/selenium_webdriver/radio_button'
|
28
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::RadioButton
|
29
|
+
else
|
30
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
::PageObject::Elements.type_to_class[:radio] = ::PageObject::Elements::RadioButton
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class SelectList < Element
|
5
|
+
|
6
|
+
def initialize(element, platform)
|
7
|
+
@element = element
|
8
|
+
include_platform_for platform
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def child_xpath
|
14
|
+
".//child::option"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.watir_finders
|
18
|
+
super + [:text, :value, :label]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.selenium_finders
|
22
|
+
super + [:label]
|
23
|
+
end
|
24
|
+
|
25
|
+
def include_platform_for platform
|
26
|
+
super
|
27
|
+
if platform[:platform] == :watir_webdriver
|
28
|
+
require 'page-object/platforms/watir_webdriver/select_list'
|
29
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::SelectList
|
30
|
+
elsif platform[:platform] == :selenium_webdriver
|
31
|
+
require 'page-object/platforms/selenium_webdriver/select_list'
|
32
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::SelectList
|
33
|
+
else
|
34
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
::PageObject::Elements.tag_to_class[:select] = ::PageObject::Elements::SelectList
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Elements
|
3
|
+
class Span < Element
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
def self.watir_finders
|
8
|
+
[:class, :id, :index, :text, :title, :xpath]
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.selenium_finders
|
12
|
+
[:class, :css, :id, :name, :text, :title, :xpath, :index]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
::PageObject::Elements.tag_to_class[:span] = ::PageObject::Elements::Span
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class Table < Element
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize(element, platform)
|
8
|
+
@element = element
|
9
|
+
include_platform_for platform
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# iterator that yields with a PageObject::Elements::TableRow
|
14
|
+
#
|
15
|
+
# @return [PageObject::Elements::TableRow]
|
16
|
+
#
|
17
|
+
def each
|
18
|
+
for index in 1..self.rows do
|
19
|
+
yield self[index-1]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
# return the first row
|
25
|
+
#
|
26
|
+
# @return PageObject::Elements::TableRow
|
27
|
+
#
|
28
|
+
def first_row
|
29
|
+
self[0]
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# return the last row
|
34
|
+
#
|
35
|
+
# @return PageObject::Elements::TableRow
|
36
|
+
#
|
37
|
+
def last_row
|
38
|
+
self[-1]
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def child_xpath
|
44
|
+
".//child::tr"
|
45
|
+
end
|
46
|
+
|
47
|
+
def initialize_row(row_element, platform)
|
48
|
+
::PageObject::Elements::TableRow.new(row_element, platform)
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def include_platform_for platform
|
53
|
+
super
|
54
|
+
if platform[:platform] == :watir_webdriver
|
55
|
+
require 'page-object/platforms/watir_webdriver/table'
|
56
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::Table
|
57
|
+
elsif platform[:platform] == :selenium_webdriver
|
58
|
+
require 'page-object/platforms/selenium_webdriver/table'
|
59
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::Table
|
60
|
+
else
|
61
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
::PageObject::Elements.tag_to_class[:table] = ::PageObject::Elements::Table
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Elements
|
3
|
+
class TableCell < Element
|
4
|
+
|
5
|
+
#
|
6
|
+
# return true if the element is enabled
|
7
|
+
#
|
8
|
+
def enabled?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def self.watir_finders
|
15
|
+
super + [:text]
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.selenium_finders
|
19
|
+
super + [:text]
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
::PageObject::Elements.tag_to_class[:td] = ::PageObject::Elements::TableCell
|
25
|
+
::PageObject::Elements.tag_to_class[:th] = ::PageObject::Elements::TableCell
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class TableRow < Element
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize(element, platform)
|
8
|
+
@element = element
|
9
|
+
include_platform_for platform
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# iterator that yields with a PageObject::Elements::TableCell
|
14
|
+
#
|
15
|
+
# @return [PageObject::Elements::TableCell]
|
16
|
+
#
|
17
|
+
def each
|
18
|
+
for index in 1..self.columns do
|
19
|
+
yield self[index-1]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def child_xpath
|
26
|
+
".//child::td|th"
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize_cell(row_element, platform)
|
30
|
+
::PageObject::Elements::TableCell.new(row_element, platform)
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def include_platform_for platform
|
35
|
+
super
|
36
|
+
if platform[:platform] == :watir_webdriver
|
37
|
+
require 'page-object/platforms/watir_webdriver/table_row'
|
38
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::TableRow
|
39
|
+
elsif platform[:platform] == :selenium_webdriver
|
40
|
+
require 'page-object/platforms/selenium_webdriver/table_row'
|
41
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TableRow
|
42
|
+
else
|
43
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
::PageObject::Elements.tag_to_class[:tr] = ::PageObject::Elements::TableRow
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class TextArea < Element
|
5
|
+
|
6
|
+
def initialize(element, platform)
|
7
|
+
@element = element
|
8
|
+
include_platform_for platform
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.watir_finders
|
12
|
+
super + [:label]
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.selenium_finders
|
16
|
+
super + [:label]
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def include_platform_for platform
|
22
|
+
super
|
23
|
+
if platform[:platform] == :watir_webdriver
|
24
|
+
require 'page-object/platforms/watir_webdriver/text_area'
|
25
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::TextArea
|
26
|
+
elsif platform[:platform] == :selenium_webdriver
|
27
|
+
require 'page-object/platforms/selenium_webdriver/text_area'
|
28
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TextArea
|
29
|
+
else
|
30
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
::PageObject::Elements.tag_to_class[:textarea] = ::PageObject::Elements::TextArea
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class TextField < Element
|
5
|
+
|
6
|
+
def initialize(element, platform)
|
7
|
+
@element = element
|
8
|
+
include_platform_for platform
|
9
|
+
end
|
10
|
+
|
11
|
+
def append(text)
|
12
|
+
element.send_keys text
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def self.watir_finders
|
18
|
+
super + [:title, :value, :text, :label]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.selenium_finders
|
22
|
+
super + [:title, :value, :text, :label]
|
23
|
+
end
|
24
|
+
|
25
|
+
def include_platform_for platform
|
26
|
+
super
|
27
|
+
if platform[:platform] == :watir_webdriver
|
28
|
+
require 'page-object/platforms/watir_webdriver/text_field'
|
29
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::TextField
|
30
|
+
elsif platform[:platform] == :selenium_webdriver
|
31
|
+
require 'page-object/platforms/selenium_webdriver/text_field'
|
32
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TextField
|
33
|
+
else
|
34
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
::PageObject::Elements.type_to_class[:text] = ::PageObject::Elements::TextField
|
40
|
+
::PageObject::Elements.type_to_class[:password] = ::PageObject::Elements::TextField
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module Elements
|
4
|
+
class UnorderedList < Element
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize(element, platform)
|
8
|
+
@element = element
|
9
|
+
include_platform_for platform
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# iterator that yields with a PageObject::Elements::ListItem
|
14
|
+
#
|
15
|
+
# @return [PageObject::Elements::ListItem]
|
16
|
+
#
|
17
|
+
def each
|
18
|
+
for index in 1..self.items do
|
19
|
+
yield self[index-1]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def child_xpath
|
27
|
+
".//child::li"
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.watir_finders
|
31
|
+
[:class, :id, :index, :xpath]
|
32
|
+
end
|
33
|
+
|
34
|
+
def include_platform_for platform
|
35
|
+
super
|
36
|
+
if platform[:platform] == :watir_webdriver
|
37
|
+
require 'page-object/platforms/watir_webdriver/unordered_list'
|
38
|
+
self.class.send :include, PageObject::Platforms::WatirWebDriver::UnorderedList
|
39
|
+
elsif platform[:platform] == :selenium_webdriver
|
40
|
+
require 'page-object/platforms/selenium_webdriver/unordered_list'
|
41
|
+
self.class.send :include, PageObject::Platforms::SeleniumWebDriver::UnorderedList
|
42
|
+
else
|
43
|
+
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
::PageObject::Elements.tag_to_class[:ul] = ::PageObject::Elements::UnorderedList
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Elements
|
3
|
+
class Video < Media
|
4
|
+
|
5
|
+
def height
|
6
|
+
height = attribute(:height)
|
7
|
+
return height.to_i if height
|
8
|
+
end
|
9
|
+
|
10
|
+
def width
|
11
|
+
width = attribute(:width)
|
12
|
+
return width.to_i if width
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
::PageObject::Elements.type_to_class[:video] = ::PageObject::Elements::Video
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Elements
|
3
|
+
class << self
|
4
|
+
|
5
|
+
#
|
6
|
+
# method to return the collection of tag_name to class mappings
|
7
|
+
#
|
8
|
+
def tag_to_class
|
9
|
+
@tag_to_class ||= {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def type_to_class
|
13
|
+
@type_to_class ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# method to return the element for a tag_name
|
18
|
+
#
|
19
|
+
def element_class_for(tag_name, type=nil)
|
20
|
+
return type_to_class[type.to_sym] if type
|
21
|
+
tag_to_class[tag_name.to_sym] || ::PageObject::Elements::Element
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
require 'page-object/elements/element'
|
30
|
+
require 'page-object/elements/link'
|
31
|
+
require 'page-object/elements/text_field'
|
32
|
+
require 'page-object/elements/select_list'
|
33
|
+
require 'page-object/elements/check_box'
|
34
|
+
require 'page-object/elements/button'
|
35
|
+
require 'page-object/elements/radio_button'
|
36
|
+
require 'page-object/elements/div'
|
37
|
+
require 'page-object/elements/table'
|
38
|
+
require 'page-object/elements/table_cell'
|
39
|
+
require 'page-object/elements/table_row'
|
40
|
+
require 'page-object/elements/span'
|
41
|
+
require 'page-object/elements/image'
|
42
|
+
require 'page-object/elements/hidden_field'
|
43
|
+
require 'page-object/elements/form'
|
44
|
+
require 'page-object/elements/text_area'
|
45
|
+
require 'page-object/elements/list_item'
|
46
|
+
require 'page-object/elements/unordered_list'
|
47
|
+
require 'page-object/elements/ordered_list'
|
48
|
+
require 'page-object/elements/option'
|
49
|
+
require 'page-object/elements/heading'
|
50
|
+
require 'page-object/elements/paragraph'
|
51
|
+
require 'page-object/elements/label'
|
52
|
+
require 'page-object/elements/file_field'
|
53
|
+
require 'page-object/elements/area'
|
54
|
+
require 'page-object/elements/canvas'
|
55
|
+
require 'page-object/elements/media'
|
56
|
+
require 'page-object/elements/audio'
|
57
|
+
require 'page-object/elements/video'
|
58
|
+
|
59
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module PageObject
|
2
|
+
module IndexedProperties
|
3
|
+
class TableOfElements
|
4
|
+
include PageObject
|
5
|
+
include LoadsPlatform
|
6
|
+
|
7
|
+
def initialize (browser, identifier_list)
|
8
|
+
initialize_browser(browser)
|
9
|
+
@identifier_list = identifier_list
|
10
|
+
@indexed_property_class = Class.new {
|
11
|
+
include PageObject
|
12
|
+
include LoadsPlatform
|
13
|
+
extend Accessors
|
14
|
+
|
15
|
+
def initialize (browser, index, identifier_list)
|
16
|
+
initialize_browser(browser)
|
17
|
+
|
18
|
+
identifier_list.each do |identifier|
|
19
|
+
type = identifier[0]
|
20
|
+
name = identifier[1]
|
21
|
+
how_and_what = identifier[2].clone # Cannot modify the original...
|
22
|
+
how_and_what.each do |key, value|
|
23
|
+
how_and_what[key] = value % index
|
24
|
+
end
|
25
|
+
self.class.send type, name, how_and_what unless self.class.instance_methods.include? name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def [] (index)
|
32
|
+
@indexed_property_class.new(@browser,index,@identifier_list)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Javascript
|
3
|
+
|
4
|
+
module YUI
|
5
|
+
#
|
6
|
+
# return the number of pending ajax requests
|
7
|
+
#
|
8
|
+
def self.pending_requests
|
9
|
+
"var inProgress=0
|
10
|
+
for(var i=0; i < YAHOO.util.Connect._transaction_id; i++) {
|
11
|
+
if(YAHOO.util.Connect.isCallInProgress(i))
|
12
|
+
inProgress++;
|
13
|
+
}
|
14
|
+
return inProgress;"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|