page-object 1.1.1 → 1.2.0
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 +4 -4
- data/.ruby-version +1 -1
- data/ChangeLog +9 -0
- data/Gemfile +1 -0
- data/features/section.feature +4 -0
- data/features/step_definitions/section_steps.rb +10 -1
- data/lib/page-object.rb +16 -8
- data/lib/page-object/accessors.rb +2 -2
- data/lib/page-object/elements/button.rb +0 -7
- data/lib/page-object/elements/canvas.rb +1 -13
- data/lib/page-object/elements/check_box.rb +0 -12
- data/lib/page-object/elements/element.rb +52 -9
- data/lib/page-object/elements/file_field.rb +0 -12
- data/lib/page-object/elements/form.rb +0 -12
- data/lib/page-object/elements/image.rb +0 -12
- data/lib/page-object/elements/link.rb +0 -12
- data/lib/page-object/elements/ordered_list.rb +0 -13
- data/lib/page-object/elements/radio_button.rb +0 -12
- data/lib/page-object/elements/select_list.rb +0 -13
- data/lib/page-object/elements/table.rb +0 -13
- data/lib/page-object/elements/table_row.rb +0 -13
- data/lib/page-object/elements/text_area.rb +0 -14
- data/lib/page-object/elements/text_field.rb +0 -12
- data/lib/page-object/elements/unordered_list.rb +0 -12
- data/lib/page-object/elements/video.rb +0 -10
- data/lib/page-object/platforms/selenium_webdriver/element.rb +1 -1
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +26 -5
- data/lib/page-object/platforms/selenium_webdriver/select_list.rb +1 -1
- data/lib/page-object/platforms/selenium_webdriver/table.rb +1 -1
- data/lib/page-object/platforms/selenium_webdriver/table_row.rb +1 -1
- data/lib/page-object/platforms/watir_webdriver/element.rb +9 -2
- data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +1 -1
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +25 -4
- data/lib/page-object/platforms/watir_webdriver/select_list.rb +1 -1
- data/lib/page-object/platforms/watir_webdriver/table.rb +1 -1
- data/lib/page-object/platforms/watir_webdriver/table_row.rb +1 -1
- data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +1 -1
- data/lib/page-object/section_collection.rb +16 -0
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object/widgets.rb +14 -36
- data/spec/page-object/elements/canvas_spec.rb +3 -2
- data/spec/page-object/elements/ordered_list_spec.rb +2 -2
- data/spec/page-object/elements/select_list_spec.rb +2 -2
- data/spec/page-object/elements/unordered_list_spec.rb +2 -2
- data/spec/page-object/elements/video_spec.rb +12 -6
- data/spec/page-object/page-object_spec.rb +51 -23
- data/spec/page-object/page_section_spec.rb +9 -2
- data/spec/page-object/watir_accessors_spec.rb +1 -0
- metadata +4 -4
- data/lib/page-object/sections.rb +0 -29
@@ -30,19 +30,6 @@ module PageObject
|
|
30
30
|
::PageObject::Elements::TableCell.new(row_element, platform)
|
31
31
|
end
|
32
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
33
|
end
|
47
34
|
|
48
35
|
::PageObject::Elements.tag_to_class[:tr] = ::PageObject::Elements::TableRow
|
@@ -16,20 +16,6 @@ module PageObject
|
|
16
16
|
super + [:label]
|
17
17
|
end
|
18
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
19
|
end
|
34
20
|
|
35
21
|
::PageObject::Elements.tag_to_class[:textarea] = ::PageObject::Elements::TextArea
|
@@ -22,18 +22,6 @@ module PageObject
|
|
22
22
|
super + [:title, :value, :text, :label]
|
23
23
|
end
|
24
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
25
|
end
|
38
26
|
|
39
27
|
::PageObject::Elements.type_to_class[:text] = ::PageObject::Elements::TextField
|
@@ -31,18 +31,6 @@ module PageObject
|
|
31
31
|
[:class, :id, :index, :xpath]
|
32
32
|
end
|
33
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
34
|
end
|
47
35
|
|
48
36
|
::PageObject::Elements.tag_to_class[:ul] = ::PageObject::Elements::UnorderedList
|
@@ -2,16 +2,6 @@ module PageObject
|
|
2
2
|
module Elements
|
3
3
|
class Video < Media
|
4
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
5
|
end
|
16
6
|
::PageObject::Elements.type_to_class[:video] = ::PageObject::Elements::Video
|
17
7
|
end
|
@@ -146,7 +146,7 @@ module PageObject
|
|
146
146
|
parent = bridge.executeScript(script, element)
|
147
147
|
type = element.attribute(:type).to_s.downcase if parent.tag_name.to_sym == :input
|
148
148
|
cls = ::PageObject::Elements.element_class_for(parent.tag_name, type)
|
149
|
-
cls.new(parent, :platform =>
|
149
|
+
cls.new(parent, :platform => @platform.class::PLATFORM_NAME)
|
150
150
|
end
|
151
151
|
|
152
152
|
#
|
@@ -12,6 +12,14 @@ module PageObject
|
|
12
12
|
# and use the methods dynamically added from the PageObject::Accessors module.
|
13
13
|
#
|
14
14
|
class PageObject
|
15
|
+
|
16
|
+
PLATFORM_NAME = :selenium_webdriver
|
17
|
+
|
18
|
+
def self.define_widget_accessors(widget_tag, widget_class, base_element_tag)
|
19
|
+
define_widget_singular_accessor(base_element_tag, widget_class, widget_tag)
|
20
|
+
define_widget_multiple_accessor(base_element_tag, widget_class, widget_tag)
|
21
|
+
end
|
22
|
+
|
15
23
|
def initialize(browser)
|
16
24
|
@browser = browser
|
17
25
|
end
|
@@ -139,7 +147,7 @@ module PageObject
|
|
139
147
|
element = @browser.execute_script("return document.activeElement")
|
140
148
|
type = element.attribute(:type).to_s.downcase if element.tag_name.to_sym == :input
|
141
149
|
cls = ::PageObject::Elements.element_class_for(element.tag_name, type)
|
142
|
-
cls.new(element, :platform =>
|
150
|
+
cls.new(element, :platform => self.class::PLATFORM_NAME)
|
143
151
|
end
|
144
152
|
|
145
153
|
#
|
@@ -1026,7 +1034,7 @@ module PageObject
|
|
1026
1034
|
# See PageObject::Accessors#page_sections
|
1027
1035
|
#
|
1028
1036
|
def pages_for(identifier, page_class)
|
1029
|
-
SectionCollection
|
1037
|
+
SectionCollection[*find_selenium_pages(identifier, page_class)]
|
1030
1038
|
end
|
1031
1039
|
|
1032
1040
|
#
|
@@ -1120,7 +1128,7 @@ module PageObject
|
|
1120
1128
|
return build_null_object(identifier, type, tag, other)
|
1121
1129
|
end
|
1122
1130
|
@browser.switch_to.default_content unless frame_identifiers.nil?
|
1123
|
-
type.new(element, :platform =>
|
1131
|
+
type.new(element, :platform => self.class::PLATFORM_NAME)
|
1124
1132
|
end
|
1125
1133
|
|
1126
1134
|
def find_selenium_elements(identifier, type, tag, other=nil)
|
@@ -1134,7 +1142,7 @@ module PageObject
|
|
1134
1142
|
elements = eles.find_all {|ele| matches_selector?(ele, regexp[0], regexp[1])}
|
1135
1143
|
end
|
1136
1144
|
@browser.switch_to.default_content unless frame_identifiers.nil?
|
1137
|
-
elements.map { |element| type.new(element, :platform =>
|
1145
|
+
elements.map { |element| type.new(element, :platform => self.class::PLATFORM_NAME) }
|
1138
1146
|
end
|
1139
1147
|
|
1140
1148
|
def find_selenium_pages(identifier, page_class)
|
@@ -1178,7 +1186,7 @@ module PageObject
|
|
1178
1186
|
null_element.tag = tag
|
1179
1187
|
null_element.other = other
|
1180
1188
|
null_element.platform = self
|
1181
|
-
Elements::Element.new(null_element, :platform =>
|
1189
|
+
Elements::Element.new(null_element, :platform => self.class::PLATFORM_NAME)
|
1182
1190
|
end
|
1183
1191
|
|
1184
1192
|
def delete_regexp(identifier)
|
@@ -1256,6 +1264,19 @@ module PageObject
|
|
1256
1264
|
end
|
1257
1265
|
end
|
1258
1266
|
end
|
1267
|
+
|
1268
|
+
def self.define_widget_multiple_accessor(base_element_tag, widget_class, widget_tag)
|
1269
|
+
send(:define_method, "#{widget_tag}s_for") do |identifier|
|
1270
|
+
find_selenium_elements(identifier, widget_class, base_element_tag)
|
1271
|
+
end
|
1272
|
+
end
|
1273
|
+
|
1274
|
+
def self.define_widget_singular_accessor(base_element_tag, widget_class, widget_tag)
|
1275
|
+
send(:define_method, "#{widget_tag}_for") do |identifier|
|
1276
|
+
find_selenium_element(identifier, widget_class, base_element_tag)
|
1277
|
+
end
|
1278
|
+
end
|
1279
|
+
|
1259
1280
|
end
|
1260
1281
|
end
|
1261
1282
|
end
|
@@ -38,7 +38,7 @@ module PageObject
|
|
38
38
|
#
|
39
39
|
# @return [array of PageObject::Elements::Option]
|
40
40
|
def options
|
41
|
-
find_options.map { |e| ::PageObject::Elements::Option.new(e, :platform =>
|
41
|
+
find_options.map { |e| ::PageObject::Elements::Option.new(e, :platform => @platform.class::PLATFORM_NAME) }
|
42
42
|
end
|
43
43
|
|
44
44
|
#
|
@@ -14,7 +14,7 @@ module PageObject
|
|
14
14
|
eles = table_rows
|
15
15
|
idx = find_index_by_title(idx, eles) if idx.kind_of?(String)
|
16
16
|
return nil unless idx
|
17
|
-
initialize_row(eles[idx], :platform =>
|
17
|
+
initialize_row(eles[idx], :platform => @platform.class::PLATFORM_NAME)
|
18
18
|
end
|
19
19
|
|
20
20
|
#
|
@@ -14,7 +14,7 @@ module PageObject
|
|
14
14
|
els = table_cells
|
15
15
|
idx = find_index_by_title(idx) if idx.kind_of?(String)
|
16
16
|
return nil unless idx && columns >= idx + 1
|
17
|
-
initialize_cell(els[idx], :platform =>
|
17
|
+
initialize_cell(els[idx], :platform => @platform.class::PLATFORM_NAME)
|
18
18
|
end
|
19
19
|
|
20
20
|
#
|
@@ -28,7 +28,14 @@ module PageObject
|
|
28
28
|
def flash
|
29
29
|
element.flash
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
|
+
#
|
33
|
+
# Click this element
|
34
|
+
#
|
35
|
+
def right_click
|
36
|
+
element.right_click
|
37
|
+
end
|
38
|
+
|
32
39
|
#
|
33
40
|
# Get the text for the element
|
34
41
|
#
|
@@ -134,7 +141,7 @@ module PageObject
|
|
134
141
|
parent = element.parent
|
135
142
|
type = element.type if parent.tag_name.to_sym == :input
|
136
143
|
cls = ::PageObject::Elements.element_class_for(parent.tag_name, type)
|
137
|
-
cls.new(parent, :platform =>
|
144
|
+
cls.new(parent, :platform => @platform.class::PLATFORM_NAME)
|
138
145
|
end
|
139
146
|
|
140
147
|
#
|
@@ -10,7 +10,7 @@ module PageObject
|
|
10
10
|
# @return [PageObject::Elements::ListItem]
|
11
11
|
#
|
12
12
|
def [](idx)
|
13
|
-
Object::PageObject::Elements::ListItem.new(children[idx], :platform =>
|
13
|
+
Object::PageObject::Elements::ListItem.new(children[idx], :platform => @platform.class::PLATFORM_NAME)
|
14
14
|
end
|
15
15
|
|
16
16
|
#
|
@@ -6,6 +6,7 @@ require 'page-object/core_ext/string'
|
|
6
6
|
module PageObject
|
7
7
|
module Platforms
|
8
8
|
module WatirWebDriver
|
9
|
+
|
9
10
|
#
|
10
11
|
# Watir implementation of the page object platform driver. You should not use the
|
11
12
|
# class directly. Instead you should include the PageObject module in your page object
|
@@ -14,6 +15,13 @@ module PageObject
|
|
14
15
|
class PageObject
|
15
16
|
attr_reader :browser
|
16
17
|
|
18
|
+
PLATFORM_NAME = :watir_webdriver
|
19
|
+
|
20
|
+
def self.define_widget_accessors(widget_tag, widget_class, base_element_tag)
|
21
|
+
define_widget_singular_accessor(base_element_tag, widget_class, widget_tag)
|
22
|
+
define_widget_multiple_accessor(base_element_tag, widget_class, widget_tag)
|
23
|
+
end
|
24
|
+
|
17
25
|
def initialize(browser)
|
18
26
|
@browser = browser
|
19
27
|
end
|
@@ -132,7 +140,8 @@ module PageObject
|
|
132
140
|
element = browser.execute_script("return document.activeElement")
|
133
141
|
type = element.type.to_sym if element.tag_name.to_sym == :input
|
134
142
|
cls = ::PageObject::Elements.element_class_for(element.tag_name, type)
|
135
|
-
cls.new(element, :platform => :watir_webdriver)
|
143
|
+
# cls.new(element, :platform => :watir_webdriver)
|
144
|
+
cls.new(element, :platform => self.class::PLATFORM_NAME)
|
136
145
|
end
|
137
146
|
|
138
147
|
#
|
@@ -954,7 +963,7 @@ module PageObject
|
|
954
963
|
# See PageObject::Accessors#page_sections
|
955
964
|
#
|
956
965
|
def pages_for(identifier, page_class)
|
957
|
-
SectionCollection
|
966
|
+
SectionCollection[*find_watir_pages(identifier, page_class)]
|
958
967
|
end
|
959
968
|
|
960
969
|
#
|
@@ -1023,14 +1032,14 @@ module PageObject
|
|
1023
1032
|
identifier, frame_identifiers = parse_identifiers(identifier, type, tag_name)
|
1024
1033
|
elements = @browser.instance_eval "#{nested_frames(frame_identifiers)}#{the_call}"
|
1025
1034
|
switch_to_default_content(frame_identifiers)
|
1026
|
-
elements.map { |element| type.new(element, :platform =>
|
1035
|
+
elements.map { |element| type.new(element, :platform => self.class::PLATFORM_NAME) }
|
1027
1036
|
end
|
1028
1037
|
|
1029
1038
|
def find_watir_element(the_call, type, identifier, tag_name=nil)
|
1030
1039
|
identifier, frame_identifiers = parse_identifiers(identifier, type, tag_name)
|
1031
1040
|
element = @browser.instance_eval "#{nested_frames(frame_identifiers)}#{the_call}"
|
1032
1041
|
switch_to_default_content(frame_identifiers)
|
1033
|
-
type.new(element, :platform =>
|
1042
|
+
type.new(element, :platform => self.class::PLATFORM_NAME)
|
1034
1043
|
end
|
1035
1044
|
|
1036
1045
|
def find_watir_pages(identifier, page_class)
|
@@ -1099,6 +1108,18 @@ module PageObject
|
|
1099
1108
|
end
|
1100
1109
|
end
|
1101
1110
|
end
|
1111
|
+
|
1112
|
+
def self.define_widget_multiple_accessor(base_element_tag, widget_class, widget_tag)
|
1113
|
+
send(:define_method, "#{widget_tag}s_for") do |identifier|
|
1114
|
+
find_watir_elements("#{base_element_tag}s(identifier)", widget_class, identifier, base_element_tag)
|
1115
|
+
end
|
1116
|
+
end
|
1117
|
+
|
1118
|
+
def self.define_widget_singular_accessor(base_element_tag, widget_class, widget_tag)
|
1119
|
+
send(:define_method, "#{widget_tag}_for") do |identifier|
|
1120
|
+
find_watir_element("#{base_element_tag}(identifier)", widget_class, identifier, base_element_tag)
|
1121
|
+
end
|
1122
|
+
end
|
1102
1123
|
end
|
1103
1124
|
end
|
1104
1125
|
end
|
@@ -34,7 +34,7 @@ module PageObject
|
|
34
34
|
# @return [array of PageObject::Elements::Option]
|
35
35
|
#
|
36
36
|
def options
|
37
|
-
element.options.map { |e| ::PageObject::Elements::Option.new(e, :platform =>
|
37
|
+
element.options.map { |e| ::PageObject::Elements::Option.new(e, :platform => @platform.class::PLATFORM_NAME) }
|
38
38
|
end
|
39
39
|
|
40
40
|
#
|
@@ -14,7 +14,7 @@ module PageObject
|
|
14
14
|
def [](idx)
|
15
15
|
idx = find_index_by_title(idx) if idx.kind_of?(String)
|
16
16
|
return nil unless idx
|
17
|
-
initialize_row(element[idx], :platform =>
|
17
|
+
initialize_row(element[idx], :platform => @platform.class::PLATFORM_NAME)
|
18
18
|
end
|
19
19
|
|
20
20
|
#
|
@@ -12,7 +12,7 @@ module PageObject
|
|
12
12
|
def [](idx)
|
13
13
|
idx = find_index_by_title(idx) if idx.kind_of?(String)
|
14
14
|
return nil unless idx && columns >= idx + 1
|
15
|
-
initialize_cell(element[idx], :platform =>
|
15
|
+
initialize_cell(element[idx], :platform => @platform.class::PLATFORM_NAME)
|
16
16
|
end
|
17
17
|
|
18
18
|
#
|
@@ -10,7 +10,7 @@ module PageObject
|
|
10
10
|
# @return [PageObject::Elements::ListItem]
|
11
11
|
#
|
12
12
|
def [](idx)
|
13
|
-
Object::PageObject::Elements::ListItem.new(children[idx], :platform =>
|
13
|
+
Object::PageObject::Elements::ListItem.new(children[idx], :platform => @platform.class::PLATFORM_NAME)
|
14
14
|
end
|
15
15
|
|
16
16
|
#
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module PageObject
|
2
|
+
class SectionCollection < Array
|
3
|
+
def find_by(values_hash)
|
4
|
+
find do |section|
|
5
|
+
values_hash.all? { |key, value| value === section.public_send(key) }
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def select_by(values_hash)
|
10
|
+
matches = select do |section|
|
11
|
+
values_hash.all? { |key, value| value === section.public_send(key) }
|
12
|
+
end
|
13
|
+
self.class[*matches]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/page-object/version.rb
CHANGED
data/lib/page-object/widgets.rb
CHANGED
@@ -20,13 +20,25 @@ module PageObject
|
|
20
20
|
define_accessors(Accessors, widget_tag, widget_class)
|
21
21
|
define_nested_elements(Elements::Element, widget_tag)
|
22
22
|
define_locators(PageObject, widget_tag)
|
23
|
-
|
24
|
-
|
23
|
+
|
24
|
+
PageObject::Platforms.constants.each { |platform|
|
25
|
+
platform_class = constantize_classname("PageObject::Platforms::#{platform}::PageObject")
|
26
|
+
if platform_class.respond_to?(:define_widget_accessors)
|
27
|
+
platform_class.send(:define_widget_accessors,widget_tag, widget_class, base_element_tag)
|
28
|
+
else
|
29
|
+
$stderr.puts "*** WARNING"
|
30
|
+
$stderr.puts "*** Platform PageObject::Platforms::#{platform} does not support widgets! Please add the 'define_widget_accessors' method in PageObject::Platforms::#{platform}::PageObject to support widgets."
|
31
|
+
end
|
32
|
+
}
|
25
33
|
end
|
26
34
|
end
|
27
35
|
|
28
36
|
private
|
29
37
|
|
38
|
+
def self.constantize_classname name
|
39
|
+
name.split("::").inject(Object) { |k,n| k.const_get(n) }
|
40
|
+
end
|
41
|
+
|
30
42
|
def self.define_accessors(base, widget_tag, widget_class)
|
31
43
|
accessors_module = Module.new do
|
32
44
|
define_method widget_tag do |name, *identifier_args, &block|
|
@@ -58,40 +70,6 @@ module PageObject
|
|
58
70
|
base.send(:include, accessors_module)
|
59
71
|
end
|
60
72
|
|
61
|
-
def self.define_watir_accessors(base, widget_tag, widget_class, base_element_tag)
|
62
|
-
define_singular_watir_accessor(base, base_element_tag, widget_class, widget_tag)
|
63
|
-
define_multiple_watir_accessor(base, base_element_tag, widget_class, widget_tag)
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.define_multiple_watir_accessor(base, base_element_tag, widget_class, widget_tag)
|
67
|
-
base.send(:define_method, "#{widget_tag}s_for") do |identifier|
|
68
|
-
find_watir_elements("#{base_element_tag}s(identifier)", widget_class, identifier, base_element_tag)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.define_singular_watir_accessor(base, base_element_tag, widget_class, widget_tag)
|
73
|
-
base.send(:define_method, "#{widget_tag}_for") do |identifier|
|
74
|
-
find_watir_element("#{base_element_tag}(identifier)", widget_class, identifier, base_element_tag)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def self.define_selenium_accessors(base, widget_tag, widget_class, base_element_tag)
|
79
|
-
define_singular_selenium_accessor(base, base_element_tag, widget_class, widget_tag)
|
80
|
-
define_multiple_selenium_accessor(base, base_element_tag, widget_class, widget_tag)
|
81
|
-
end
|
82
|
-
|
83
|
-
def self.define_multiple_selenium_accessor(base, base_element_tag, widget_class, widget_tag)
|
84
|
-
base.send(:define_method, "#{widget_tag}s_for") do |identifier|
|
85
|
-
find_selenium_elements(identifier, widget_class, base_element_tag)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def self.define_singular_selenium_accessor(base, base_element_tag, widget_class, widget_tag)
|
90
|
-
base.send(:define_method, "#{widget_tag}_for") do |identifier|
|
91
|
-
find_selenium_element(identifier, widget_class, base_element_tag)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
73
|
def self.define_nested_elements(base, widget_tag)
|
96
74
|
define_singular_nested_accessor(base, widget_tag)
|
97
75
|
define_multiple_nested_accessor(base, widget_tag)
|