testcentricity_web 2.1.8.2 → 2.1.8.3
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/.gitignore +27 -0
- data/.rubocop.yml +41 -0
- data/.yardopts +2 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +28 -0
- data/README.md +1438 -0
- data/Rakefile +1 -0
- data/lib/devices/devices.yml +280 -0
- data/lib/testcentricity_web.rb +140 -0
- data/lib/testcentricity_web/browser_helper.rb +173 -0
- data/lib/testcentricity_web/data_objects_helper.rb +78 -0
- data/lib/testcentricity_web/drag_drop_helper.rb +15 -0
- data/lib/testcentricity_web/elements/button.rb +8 -0
- data/lib/testcentricity_web/elements/cell_button.rb +8 -0
- data/lib/testcentricity_web/elements/cell_checkbox.rb +38 -0
- data/lib/testcentricity_web/elements/cell_element.rb +62 -0
- data/lib/testcentricity_web/elements/cell_image.rb +8 -0
- data/lib/testcentricity_web/elements/cell_radio.rb +31 -0
- data/lib/testcentricity_web/elements/checkbox.rb +99 -0
- data/lib/testcentricity_web/elements/file_field.rb +45 -0
- data/lib/testcentricity_web/elements/image.rb +34 -0
- data/lib/testcentricity_web/elements/label.rb +8 -0
- data/lib/testcentricity_web/elements/link.rb +8 -0
- data/lib/testcentricity_web/elements/list.rb +54 -0
- data/lib/testcentricity_web/elements/list_button.rb +8 -0
- data/lib/testcentricity_web/elements/list_checkbox.rb +38 -0
- data/lib/testcentricity_web/elements/list_element.rb +51 -0
- data/lib/testcentricity_web/elements/list_radio.rb +31 -0
- data/lib/testcentricity_web/elements/radio.rb +73 -0
- data/lib/testcentricity_web/elements/select_list.rb +189 -0
- data/lib/testcentricity_web/elements/table.rb +473 -0
- data/lib/testcentricity_web/elements/textfield.rb +84 -0
- data/lib/testcentricity_web/environment.rb +249 -0
- data/lib/testcentricity_web/excel_helper.rb +242 -0
- data/lib/testcentricity_web/exception_queue_helper.rb +47 -0
- data/lib/testcentricity_web/page_objects_helper.rb +656 -0
- data/lib/testcentricity_web/page_sections_helper.rb +811 -0
- data/lib/testcentricity_web/siebel_open_ui_helper.rb +15 -0
- data/lib/testcentricity_web/ui_elements_helper.rb +425 -0
- data/lib/testcentricity_web/utility_helpers.rb +28 -0
- data/lib/testcentricity_web/version.rb +3 -0
- data/lib/testcentricity_web/webdriver_helper.rb +451 -0
- data/lib/testcentricity_web/world_extensions.rb +26 -0
- data/testcentricity_web.gemspec +42 -0
- metadata +52 -4
@@ -0,0 +1,54 @@
|
|
1
|
+
module TestCentricity
|
2
|
+
class List < UIElement
|
3
|
+
attr_accessor :list_item
|
4
|
+
|
5
|
+
def initialize(name, parent, locator, context)
|
6
|
+
super
|
7
|
+
@type = :list
|
8
|
+
define_list_elements({ :list_item => 'li' })
|
9
|
+
end
|
10
|
+
|
11
|
+
def define_list_elements(element_spec)
|
12
|
+
element_spec.each do |element, value|
|
13
|
+
case element
|
14
|
+
when :list_item
|
15
|
+
@list_item = value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_list_items(element_spec = nil)
|
21
|
+
define_list_elements(element_spec) unless element_spec.nil?
|
22
|
+
obj, = find_element
|
23
|
+
object_not_found_exception(obj, nil)
|
24
|
+
obj.all(@list_item).collect(&:text)
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_list_item(index)
|
28
|
+
items = get_list_items
|
29
|
+
items[index - 1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_item_count
|
33
|
+
obj, = find_element
|
34
|
+
object_not_found_exception(obj, nil)
|
35
|
+
obj.all(@list_item).count
|
36
|
+
end
|
37
|
+
|
38
|
+
def verify_list_items(expected, enqueue = false)
|
39
|
+
actual = get_list_items
|
40
|
+
enqueue ?
|
41
|
+
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected list #{object_ref_message}") :
|
42
|
+
assert_equal(expected, actual, "Expected list #{object_ref_message} to be #{expected} but found #{actual}")
|
43
|
+
end
|
44
|
+
|
45
|
+
def click_item(row)
|
46
|
+
list_item = get_list_row_locator(row)
|
47
|
+
list_item.click
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_list_row_locator(row)
|
51
|
+
"#{@locator}/#{@list_item}[#{row}]"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module TestCentricity
|
2
|
+
class ListCheckBox < ListElement
|
3
|
+
attr_accessor :proxy
|
4
|
+
|
5
|
+
def initialize(name, parent, locator, context, list, proxy = nil)
|
6
|
+
super
|
7
|
+
@type = :list_checkbox
|
8
|
+
@proxy = proxy
|
9
|
+
end
|
10
|
+
|
11
|
+
def checked?(row)
|
12
|
+
obj, = find_list_element(row)
|
13
|
+
list_object_not_found_exception(obj, 'List CheckBox', row)
|
14
|
+
obj.checked?
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_checkbox_state(row, state)
|
18
|
+
obj, = find_list_element(row)
|
19
|
+
list_object_not_found_exception(obj, 'List CheckBox', row)
|
20
|
+
obj.set(state)
|
21
|
+
end
|
22
|
+
|
23
|
+
def check(row)
|
24
|
+
set_checkbox_state(row, true)
|
25
|
+
end
|
26
|
+
|
27
|
+
def uncheck(row)
|
28
|
+
set_checkbox_state(row, false)
|
29
|
+
end
|
30
|
+
|
31
|
+
def verify_check_state(row, state, enqueue = false)
|
32
|
+
actual = checked?(row)
|
33
|
+
enqueue ?
|
34
|
+
ExceptionQueue.enqueue_assert_equal(state, actual, "Expected Row #{row} List Checkbox #{object_ref_message}") :
|
35
|
+
assert_equal(state, actual, "Expected Row #{row} List Checkbox #{object_ref_message} to be #{state} but found #{actual} instead")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module TestCentricity
|
2
|
+
class ListElement < UIElement
|
3
|
+
attr_accessor :list
|
4
|
+
attr_accessor :element_locator
|
5
|
+
|
6
|
+
def initialize(name, parent, locator, context, list, proxy = nil)
|
7
|
+
@name = name
|
8
|
+
@parent = parent
|
9
|
+
@context = context
|
10
|
+
@alt_locator = nil
|
11
|
+
@list = list
|
12
|
+
@element_locator = locator
|
13
|
+
locator.nil? ?
|
14
|
+
@locator = list.get_list_row_locator('ROW_SPEC') :
|
15
|
+
@locator = "#{list.get_list_row_locator('ROW_SPEC')}/#{@element_locator}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def exists?(row)
|
19
|
+
obj, = find_list_element(row)
|
20
|
+
obj != nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def click(row)
|
24
|
+
obj, = find_list_element(row)
|
25
|
+
list_object_not_found_exception(obj, @type, row)
|
26
|
+
obj.click
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_value(row, visible = true)
|
30
|
+
obj, = find_list_element(row, visible)
|
31
|
+
list_object_not_found_exception(obj, @type, row)
|
32
|
+
case obj.tag_name.downcase
|
33
|
+
when 'input', 'select', 'textarea'
|
34
|
+
obj.value
|
35
|
+
else
|
36
|
+
obj.text
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
alias get_caption get_value
|
41
|
+
|
42
|
+
def find_list_element(row, visible = true)
|
43
|
+
set_alt_locator("#{@locator.gsub('ROW_SPEC', row.to_s)}")
|
44
|
+
find_element(visible)
|
45
|
+
end
|
46
|
+
|
47
|
+
def list_object_not_found_exception(obj, obj_type, row)
|
48
|
+
object_not_found_exception(obj, "Row #{row} #{obj_type}")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module TestCentricity
|
2
|
+
class ListRadio < ListElement
|
3
|
+
attr_accessor :proxy
|
4
|
+
|
5
|
+
def initialize(name, parent, locator, context, list, proxy = nil)
|
6
|
+
super
|
7
|
+
@type = :list_radio
|
8
|
+
@proxy = proxy
|
9
|
+
end
|
10
|
+
|
11
|
+
def selected?(row)
|
12
|
+
obj, = find_list_element(row)
|
13
|
+
list_object_not_found_exception(obj, 'List Radio', row)
|
14
|
+
obj.checked?
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_selected_state(row, state)
|
18
|
+
obj, = find_list_element(row)
|
19
|
+
list_object_not_found_exception(obj, 'List Radio', row)
|
20
|
+
obj.set(state)
|
21
|
+
end
|
22
|
+
|
23
|
+
def select(row)
|
24
|
+
set_selected_state(row, true)
|
25
|
+
end
|
26
|
+
|
27
|
+
def unselect(row)
|
28
|
+
set_selected_state(row, false)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module TestCentricity
|
2
|
+
class Radio < UIElement
|
3
|
+
attr_accessor :proxy
|
4
|
+
|
5
|
+
def initialize(name, parent, locator, context, proxy = nil)
|
6
|
+
@name = name
|
7
|
+
@parent = parent
|
8
|
+
@locator = locator
|
9
|
+
@context = context
|
10
|
+
@alt_locator = nil
|
11
|
+
@proxy = proxy
|
12
|
+
@type = :radio
|
13
|
+
end
|
14
|
+
|
15
|
+
# Does radio button object exists?
|
16
|
+
#
|
17
|
+
# @return [Boolean]
|
18
|
+
# @example
|
19
|
+
# accept_terms_radio.exists?
|
20
|
+
#
|
21
|
+
def exists?
|
22
|
+
obj, = find_object(:all)
|
23
|
+
obj != nil
|
24
|
+
end
|
25
|
+
|
26
|
+
# Is radio button selected?
|
27
|
+
#
|
28
|
+
# @return [Boolean]
|
29
|
+
# @example
|
30
|
+
# accept_terms_radio.selected?
|
31
|
+
#
|
32
|
+
def selected?
|
33
|
+
obj, = find_element(:all)
|
34
|
+
object_not_found_exception(obj, 'Radio')
|
35
|
+
obj.checked?
|
36
|
+
end
|
37
|
+
|
38
|
+
# Set the select state of a radio button object.
|
39
|
+
#
|
40
|
+
# @param state [Boolean] true = selected / false = unselected
|
41
|
+
# @example
|
42
|
+
# accept_terms_radio.set_selected_state(true)
|
43
|
+
#
|
44
|
+
def set_selected_state(state)
|
45
|
+
obj, = find_element(:all)
|
46
|
+
object_not_found_exception(obj, 'Radio')
|
47
|
+
invalid_object_type_exception(obj, 'radio')
|
48
|
+
if @proxy.nil?
|
49
|
+
obj.set(state)
|
50
|
+
else
|
51
|
+
@proxy.click unless state == obj.checked?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Set the selected state of a radio button object.
|
56
|
+
#
|
57
|
+
# @example
|
58
|
+
# accept_terms_radio.select
|
59
|
+
#
|
60
|
+
def select
|
61
|
+
set_selected_state(true)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Unselect a radio button object.
|
65
|
+
#
|
66
|
+
# @example
|
67
|
+
# accept_terms_radio.unselect
|
68
|
+
#
|
69
|
+
def unselect
|
70
|
+
set_selected_state(false)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
module TestCentricity
|
2
|
+
class SelectList < UIElement
|
3
|
+
attr_accessor :list_item
|
4
|
+
attr_accessor :selected_item
|
5
|
+
|
6
|
+
def initialize(name, parent, locator, context)
|
7
|
+
super
|
8
|
+
@type = :selectlist
|
9
|
+
list_spec = {
|
10
|
+
:list_item => 'option',
|
11
|
+
:selected_item => 'option[selected]'
|
12
|
+
}
|
13
|
+
define_list_elements(list_spec)
|
14
|
+
end
|
15
|
+
|
16
|
+
def define_list_elements(element_spec)
|
17
|
+
element_spec.each do |element, value|
|
18
|
+
case element
|
19
|
+
when :list_item
|
20
|
+
@list_item = value
|
21
|
+
when :selected_item
|
22
|
+
@selected_item = value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Select the specified option in a select box object. Accepts a String or Hash.
|
28
|
+
# Supports standard HTML select objects and Chosen select objects.
|
29
|
+
#
|
30
|
+
# @param option [String] text of option to select
|
31
|
+
# OR
|
32
|
+
# @param option [Hash] :value, :index, or :text of option to select
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# province_select.choose_option('Alberta')
|
36
|
+
# province_select.choose_option(:value => 'AB')
|
37
|
+
# state_select.choose_option(:index => 24)
|
38
|
+
# state_select.choose_option(:text => 'Maryland')
|
39
|
+
#
|
40
|
+
def choose_option(option)
|
41
|
+
obj, = find_element
|
42
|
+
object_not_found_exception(obj, nil)
|
43
|
+
obj.click
|
44
|
+
if first(:css, 'li.active-result')
|
45
|
+
if option.is_a?(Array)
|
46
|
+
option.each do |item|
|
47
|
+
page.find(:css, 'li.active-result', text: item.strip).click
|
48
|
+
end
|
49
|
+
else
|
50
|
+
first(:css, 'li.active-result', text: option).click
|
51
|
+
end
|
52
|
+
else
|
53
|
+
if option.is_a?(Array)
|
54
|
+
option.each do |item|
|
55
|
+
select_item(obj, item)
|
56
|
+
end
|
57
|
+
else
|
58
|
+
select_item(obj, option)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Return array of strings of all options in a select box object.
|
64
|
+
# Supports standard HTML select objects and Chosen select objects.
|
65
|
+
#
|
66
|
+
# @return [Array]
|
67
|
+
# @example
|
68
|
+
# all_colors = color_select.get_options
|
69
|
+
#
|
70
|
+
def get_options
|
71
|
+
obj, = find_element
|
72
|
+
object_not_found_exception(obj, nil)
|
73
|
+
if first(:css, 'li.active-result')
|
74
|
+
obj.all('li.active-result').collect(&:text)
|
75
|
+
else
|
76
|
+
obj.all(@list_item).collect(&:text)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
alias get_list_items get_options
|
81
|
+
|
82
|
+
# Return the number of options in a select box object.
|
83
|
+
# Supports standard HTML select objects and Chosen select objects.
|
84
|
+
#
|
85
|
+
# @return [Integer]
|
86
|
+
# @example
|
87
|
+
# num_colors = color_select.get_option_count
|
88
|
+
#
|
89
|
+
def get_option_count
|
90
|
+
obj, = find_element
|
91
|
+
object_not_found_exception(obj, nil)
|
92
|
+
if first(:css, 'li.active-result')
|
93
|
+
obj.all('li.active-result').count
|
94
|
+
else
|
95
|
+
obj.all(@list_item).count
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
alias get_item_count get_option_count
|
100
|
+
|
101
|
+
def verify_options(expected, enqueue = false)
|
102
|
+
actual = get_options
|
103
|
+
enqueue ?
|
104
|
+
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected list of options in list #{object_ref_message}") :
|
105
|
+
assert_equal(expected, actual, "Expected list of options in list #{object_ref_message} to be #{expected} but found #{actual}")
|
106
|
+
end
|
107
|
+
|
108
|
+
# Return text of first selected option in a select box object.
|
109
|
+
# Supports standard HTML select objects and Chosen select objects.
|
110
|
+
#
|
111
|
+
# @return [String]
|
112
|
+
# @example
|
113
|
+
# current_color = color_select.get_selected_option
|
114
|
+
#
|
115
|
+
def get_selected_option
|
116
|
+
obj, = find_element
|
117
|
+
object_not_found_exception(obj, nil)
|
118
|
+
if first(:css, 'li.active-result')
|
119
|
+
obj.first("//li[contains(@class, 'result-selected')]").text
|
120
|
+
else
|
121
|
+
obj.first(@selected_item).text
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
alias selected? get_selected_option
|
126
|
+
|
127
|
+
# Select the specified option in a Siebel OUI select box object.
|
128
|
+
#
|
129
|
+
# @param option [String] text of option to select
|
130
|
+
# @example
|
131
|
+
# country_select.choose_siebel_option('Cayman Islands')
|
132
|
+
#
|
133
|
+
def choose_siebel_option(option)
|
134
|
+
Capybara.wait_on_first_by_default = true
|
135
|
+
invoke_siebel_popup
|
136
|
+
first(:xpath, "//li[@class='ui-menu-item']", :exact => true, :match => :prefer_exact, text: option).click
|
137
|
+
end
|
138
|
+
|
139
|
+
# Return array of strings of all options in a Siebel OUI select box object.
|
140
|
+
#
|
141
|
+
# @return [Array]
|
142
|
+
# @example
|
143
|
+
# all_countries = country_select.get_siebel_options
|
144
|
+
#
|
145
|
+
def get_siebel_options
|
146
|
+
invoke_siebel_popup
|
147
|
+
sleep(0.5)
|
148
|
+
options = page.all(:xpath, "//li[@class='ui-menu-item']").collect(&:text)
|
149
|
+
obj, = find_element
|
150
|
+
obj.native.send_keys(:escape)
|
151
|
+
options
|
152
|
+
end
|
153
|
+
|
154
|
+
def verify_siebel_options(expected, enqueue = false)
|
155
|
+
invoke_siebel_popup
|
156
|
+
sleep(0.5)
|
157
|
+
actual = page.all(:xpath, "//li[@class='ui-menu-item']").collect(&:text)
|
158
|
+
enqueue ?
|
159
|
+
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected list of options in list #{object_ref_message}") :
|
160
|
+
assert_equal(expected, actual, "Expected list of options in list #{object_ref_message} to be #{expected} but found #{actual}")
|
161
|
+
obj, = find_element
|
162
|
+
obj.native.send_keys(:escape)
|
163
|
+
end
|
164
|
+
|
165
|
+
# Is Siebel JComboBox set to read-only?
|
166
|
+
#
|
167
|
+
# @return [Boolean]
|
168
|
+
# @example
|
169
|
+
# country_select.read_only?
|
170
|
+
#
|
171
|
+
def read_only?
|
172
|
+
obj, = find_element
|
173
|
+
object_not_found_exception(obj, nil)
|
174
|
+
!obj.native.attribute('readonly')
|
175
|
+
end
|
176
|
+
|
177
|
+
private
|
178
|
+
|
179
|
+
def select_item(obj, option)
|
180
|
+
if option.is_a?(Hash)
|
181
|
+
obj.find("option[value='#{option[:value]}']").click if option.has_key?(:value)
|
182
|
+
obj.find(:xpath, "option[#{option[:index]}]").select_option if option.has_key?(:index)
|
183
|
+
obj.select option[:text] if option.has_key?(:text)
|
184
|
+
else
|
185
|
+
obj.select option
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|