watir_robot 0.1.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.
@@ -0,0 +1,324 @@
1
+ module WatirRobot
2
+
3
+ #
4
+ # Functionality scoped against the entire HTML page
5
+ #
6
+ module Page
7
+
8
+ ### Actions ###
9
+
10
+ #
11
+ # Log page source in a readable format
12
+ #
13
+ def log_page_source
14
+ print @browser.html
15
+ end
16
+
17
+ #
18
+ # Get source of page
19
+ #
20
+ # @return [String] the HTML content of the entire page
21
+ #
22
+ def get_page_source
23
+ @browser.html
24
+ end
25
+
26
+ #
27
+ # Get text of a page
28
+ #
29
+ # @return [String] teh text content of the entire page, without HTML markup
30
+ #
31
+ def get_page_text
32
+ @browser.text
33
+ end
34
+
35
+ #
36
+ # Get status of page (located at bottom of browser window)
37
+ #
38
+ # @return [String] the status displayed at the bottom of the browser window
39
+ #
40
+ def get_page_status
41
+ @browser.status
42
+ end
43
+
44
+ #
45
+ # Get page title
46
+ #
47
+ # @return [String] the title of the page as defined by the +<title>+ tag
48
+ def get_title
49
+ @browser.title
50
+ end
51
+
52
+ #
53
+ # Get the text of all elements that match a given XPath query
54
+ #
55
+ # @param [String] xpath the xpath query to use for searching
56
+ # @param [String] sep the separator that will be used in printing out the results
57
+ # @return [String] a string of the text of all the matching elements, separated by sep
58
+ #
59
+ def get_all_elements_by_xpath(xpath, sep = ';;')
60
+ matches = []
61
+ @browser.elements_by_xpath(xpath).each do |element|
62
+ matches << element.text
63
+ end
64
+ return matches.join(sep)
65
+ end
66
+
67
+ #
68
+ # Execute arbitrary JavaScript
69
+ #
70
+ def execute_javascript(code)
71
+ @browser.execute_script(code)
72
+ end
73
+
74
+
75
+ ### Conditions ###
76
+
77
+ #
78
+ # Verify page text contains a certain value
79
+ #
80
+ # @param [String] text the text to compare against
81
+ #
82
+ def page_should_contain(text)
83
+ raise(Exception::PageMatchError, "The expected text #{text} was not contained in the page: #{@browser.text}") unless
84
+ @browser.text.include? text
85
+ end
86
+
87
+ #
88
+ # Verify page text does not contain a certain value
89
+ #
90
+ # @param [String] text the text to compare against
91
+ #
92
+ def page_should_not_contain(text)
93
+ raise(Exception::PageMatchError, "The expected text #{text} was not contained in the page: #{@browser.text}") if
94
+ @browser.text.include? text
95
+ end
96
+
97
+ #
98
+ # Verify button exists on page
99
+ #
100
+ # @param [String] loc attribute/value pairs that match an HTML element
101
+ #
102
+ def page_should_contain_button(loc)
103
+ raise(Exception::ElementDoesNotExist, "The button described by #{loc} is not contained within the page:\n#{@browser.html}") unless
104
+ @browser.button(parse_location(loc)).exists?
105
+ end
106
+
107
+ #
108
+ # Verify button does not exist on page
109
+ #
110
+ # @param [String] loc attribute/value pairs that match an HTML element
111
+ #
112
+ def page_should_not_contain_button(loc)
113
+ raise(Exception::ElementDoesNotExist, "The button described by #{loc} is not contained within the page:\n#{@browser.html}") if
114
+ @browser.button(parse_location(loc)).exists?
115
+ end
116
+
117
+ #
118
+ # Verify checkbox exists on page
119
+ #
120
+ # @param [String] loc attribute/value pairs that match an HTML element
121
+ #
122
+ def page_should_contain_checkbox(loc)
123
+ raise(Exception::ElementDoesNotExist, "The checkbox described by #{loc} is not contained within the page:\n#{@browser.html}") unless
124
+ @browser.checkbox(parse_location(loc)).exists?
125
+ end
126
+
127
+ #
128
+ # Verify checkbox does not exist on page
129
+ #
130
+ # @param [String] loc attribute/value pairs that match an HTML element
131
+ #
132
+ def page_should_not_contain_checkbox(loc)
133
+ raise(Exception::ElementDoesNotExist, "The checkbox described by #{loc} is not contained within the page:\n#{@browser.html}") if
134
+ @browser.checkbox(parse_location(loc)).exists?
135
+ end
136
+
137
+ #
138
+ # Verify element exists on page
139
+ #
140
+ # @param [String] loc attribute/value pairs that match an HTML element
141
+ #
142
+ def page_should_contain_element(loc)
143
+ raise(Exception::ElementDoesNotExist, "The element described by #{loc} is not contained within the page:\n#{@browser.html}") unless
144
+ @browser.element(parse_location(loc)).exists?
145
+ end
146
+
147
+ #
148
+ # Verify element exists on page
149
+ #
150
+ # @param [String] loc attribute/value pairs that match an HTML element
151
+ #
152
+ def page_should_not_contain_element(loc)
153
+ raise(Exception::ElementDoesNotExist, "The element described by #{loc} is not contained within the page:\n#{@browser.html}") if
154
+ @browser.element(parse_location(loc)).exists?
155
+ end
156
+
157
+ #
158
+ # Verify image exists on page
159
+ #
160
+ # @param [String] loc attribute/value pairs that match an HTML element
161
+ #
162
+ def page_should_contain_image(loc)
163
+ raise(Exception::ElementDoesNotExist, "The image described by #{loc} is not contained within the page:\n#{@browser.html}") unless
164
+ @browser.image(parse_location(loc)).exists?
165
+ end
166
+
167
+ #
168
+ # Verify image does not exist on page
169
+ #
170
+ # @param [String] loc attribute/value pairs that match an HTML element
171
+ #
172
+ def page_should_not_contain_image(loc)
173
+ raise(Exception::ElementDoesNotExist, "The image described by #{loc} is not contained within the page:\n#{@browser.html}") if
174
+ @browser.image(parse_location(loc)).exists?
175
+ end
176
+
177
+ #
178
+ # Verify link exists on page
179
+ #
180
+ # @param [String] loc attribute/value pairs that match an HTML element
181
+ #
182
+ def page_should_contain_link(loc)
183
+ raise(Exception::ElementDoesNotExist, "The link described by #{loc} is not contained within the page:\n#{@browser.html}") unless
184
+ @browser.link(parse_location(loc)).exists?
185
+ end
186
+
187
+ #
188
+ # Verify link does not exist on page
189
+ #
190
+ # @param [String] loc attribute/value pairs that match an HTML element
191
+ #
192
+ def page_should_not_contain_link(loc)
193
+ raise(Exception::ElementDoesNotExist, "The link described by #{loc} is not contained within the page:\n#{@browser.html}") if
194
+ @browser.link(parse_location(loc)).exists?
195
+ end
196
+
197
+ #
198
+ # Verify list exists on page
199
+ #
200
+ # @param [String] loc attribute/value pairs that match an HTML element
201
+ # @param [String, nil] ordered nil means check both ul and ol, true is ol, false is ul; strings for the booleans because the arguments come from Robot Framework
202
+ #
203
+ def page_should_contain_list(loc, ordered = nil)
204
+ ordered = ordered.downcase unless ordered.nil?
205
+ if ordered.nil?
206
+ # Not specified; match either
207
+ raise(Exception::ElementDoesNotExist, "The list described by #{loc} is not contained within the page:\n#{@browser.html}") unless
208
+ (@browser.ol(parse_location(loc)).exists? || @browser.ul(parse_location(loc)).exists?)
209
+ elsif ordered == 'true'
210
+ raise(Exception::ElementDoesNotExist, "The ordered list described by #{loc} is not contained within the page:\n#{@browser.html}") unless
211
+ @browser.ol(parse_location(loc)).exists?
212
+ elsif ordered == 'false'
213
+ raise(Exception::ElementDoesNotExist, "The unordered list described by #{loc} is not contained within the page:\n#{@browser.html}") unless
214
+ @browser.ul(parse_location(loc)).exists?
215
+ else
216
+ raise(ArgumentError, "If you specify ordered vs. unordered lists, the only valid values are 'true' or 'false' (case-insensitive)")
217
+ end
218
+ end
219
+
220
+ #
221
+ # Verify list does not exist on page
222
+ #
223
+ # @param [String] loc attribute/value pairs that match an HTML element
224
+ # @param [String, nil] ordered nil means check both ul and ol, true is ol, false is ul; strings for the booleans because the arguments come from Robot Framework
225
+ #
226
+ def page_should_not_contain_list(loc, ordered = nil)
227
+ ordered = ordered.downcase unless ordered == nil
228
+ if ordered.nil?
229
+ # Not specified; match either
230
+ raise(Exception::ElementDoesNotExist, "The list described by #{loc} is not contained within the page:\n#{@browser.html}") if
231
+ (@browser.ol(parse_location(loc)).exists? || @browser.ul(parse_location(loc)).exists?)
232
+ elsif ordered == 'true'
233
+ raise(Exception::ElementDoesNotExist, "The ordered list described by #{loc} is not contained within the page:\n#{@browser.html}") if
234
+ @browser.ol(parse_location(loc)).exists?
235
+ elsif ordered == 'false'
236
+ raise(Exception::ElementDoesNotExist, "The unordered list described by #{loc} is not contained within the page:\n#{@browser.html}") if
237
+ @browser.ul(parse_location(loc)).exists?
238
+ else
239
+ raise(ArgumentError, "If you specify ordered vs. unordered lists, the only valid values are 'true' or 'false' (case-insensitive)")
240
+ end
241
+ end
242
+
243
+ #
244
+ # Verify radio button exists on page
245
+ #
246
+ # @param [String] loc attribute/value pairs that match an HTML element
247
+ #
248
+ def page_should_contain_radio_button(loc)
249
+ raise(Exception::ElementDoesNotExist, "The radio button described by #{loc} is not contained within the page:\n#{@browser.html}") unless
250
+ @browser.radio(parse_location(loc)).exists?
251
+ end
252
+
253
+ #
254
+ # Verify radio button does not exist on page
255
+ #
256
+ # @param [String] loc attribute/value pairs that match an HTML element
257
+ #
258
+ def page_should_not_contain_radio_button(loc)
259
+ raise(Exception::ElementDoesNotExist, "The radio button described by #{loc} is not contained within the page:\n#{@browser.html}") if
260
+ @browser.radio(parse_location(loc)).exists?
261
+ end
262
+
263
+ #
264
+ # Verify select list does exist on page
265
+ #
266
+ # @param [String] loc attribute/value pairs that match an HTML element
267
+ #
268
+ def page_should_contain_select_list(loc)
269
+ raise(Exception::ElementDoesNotExist, "The select list described by #{loc} is not contained within the page:\n#{@browser.html}") unless
270
+ @browser.select(parse_location(loc)).exists?
271
+ end
272
+
273
+ #
274
+ # Verify select list does not exist on page
275
+ #
276
+ # @param [String] loc attribute/value pairs that match an HTML element
277
+ #
278
+ def page_should_not_contain_select_list(loc)
279
+ raise(Exception::ElementDoesNotExist, "The select list described by #{loc} is not contained within the page:\n#{@browser.html}") if
280
+ @browser.select(parse_location(loc)).exists?
281
+ end
282
+
283
+ #
284
+ # Verify link exists on page
285
+ #
286
+ # @param [String] loc attribute/value pairs that match an HTML element
287
+ #
288
+ def page_should_contain_textfield(loc)
289
+ raise(Exception::ElementDoesNotExist, "The text field described by #{loc} is not contained within the page:\n#{@browser.html}") unless
290
+ @browser.text_field(parse_location(loc)).exists?
291
+ end
292
+
293
+ #
294
+ # Verify link does not exist on page
295
+ #
296
+ # @param [String] loc attribute/value pairs that match an HTML element
297
+ #
298
+ def page_should_not_contain_textfield(loc)
299
+ raise(Exception::ElementDoesNotExist, "The text field described by #{loc} is not contained within the page:\n#{@browser.html}") if
300
+ @browser.text_field(parse_location(loc)).exists?
301
+ end
302
+
303
+ #
304
+ # Verify page title, i.e. the <title> in <head>
305
+ #
306
+ # @param [String] title the title text to compare against
307
+ #
308
+ def title_should_be(title)
309
+ raise(Exception::TitleMatchError, "The page title #{@browser.title} is not correct; it should be #{title}") unless @browser.title == title
310
+ end
311
+
312
+ #
313
+ # Verify that the page title contains a certain value
314
+ #
315
+ # @param [String] text the text to compare against
316
+ #
317
+ def title_should_contain(text)
318
+ raise(Exception::TitleMatchError, "The page title #{@browser.url} is not correct; it should contain #{text}") unless @browser.title.include?(text)
319
+ end
320
+
321
+ end
322
+
323
+ end
324
+
@@ -0,0 +1,44 @@
1
+ module WatirRobot
2
+
3
+ #
4
+ # Functionality related to radio button form elements
5
+ #
6
+ module Radio
7
+
8
+ ### Actions ###
9
+
10
+ #
11
+ # Select a radio button
12
+ #
13
+ # @param [String] loc attribute/value pairs that match an HTML element
14
+ #
15
+ def select_radio_button(loc)
16
+ @browser.radio(parse_location(loc)).set
17
+ end
18
+
19
+
20
+ ### Conditions ###
21
+
22
+ #
23
+ # Verify that radio button is selected
24
+ #
25
+ # @param [String] loc attribute/value pairs that match an HTML element
26
+ #
27
+ def radio_button_should_be_selected(loc)
28
+ raise(Exception::RadioSelectionError, "The radio button located at #{loc} is not selected.") unless
29
+ @browser.radio(parse_location(loc)).set?
30
+ end
31
+
32
+ #
33
+ # Verify that radio button is not selected
34
+ #
35
+ # @param [String] loc attribute/value pairs that match an HTML element
36
+ #
37
+ def radio_button_should_not_be_selected(loc)
38
+ raise(Exception::RadioSelectionError, "The radio button located at #{loc} is selected.") if
39
+ @browser.radio(parse_location(loc)).set?
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,82 @@
1
+ module WatirRobot
2
+
3
+ #
4
+ # Functionality related to select list form elements
5
+ #
6
+ module Select
7
+
8
+ ### Actions ###
9
+
10
+ #
11
+ # Select a single item from a drop-down select list
12
+ #
13
+ # @param [String] loc attribute/value pairs that match an HTML element
14
+ # @param [String] item the label, text or value of an item to select
15
+ # @param [String] by_value boolean, whether or not to select an element by visible text or by value attribute (as string because arg comes from Robot Framework)
16
+ #
17
+ def select_item_from_list(list_loc, item_loc)
18
+ # Give user option to select by value rather than by text of option or label
19
+ # Since the text is immediately visible, I assume people will default to that
20
+ if item_loc[0..4].downcase == 'text='
21
+ item_loc = item_loc[5..item_loc.length]
22
+ @browser.select(parse_location(list_loc)).select(item_loc)
23
+ elsif item_loc[0..5].downcase == 'value='
24
+ item_loc = item_loc[6..item_loc.length]
25
+ @browser.select(parse_location(list_loc)).select_value(item_loc)
26
+ else
27
+ raise(ArgumentError, "The only attributes allowed are 'text' and 'value'")
28
+ end
29
+ end
30
+
31
+ #
32
+ # Select all items from a drop-down select list
33
+ #
34
+ # @param [String] loc attribute/value pairs that match an HTML element
35
+ #
36
+ def select_all_items_from_list(loc)
37
+ select_list = @browser.select(parse_location(loc))
38
+ select_list.options.each do |item|
39
+ select_list.select_value(item.value) # Using value because it's more likely to be programmatically ensured unique
40
+ end
41
+ end
42
+
43
+ #
44
+ # Clear all select options from a drop-down select list
45
+ #
46
+ # @note The underlying Watir-WebDriver code will raise an error if the
47
+ # select list is not a multiple select list
48
+ #
49
+ # @param [String] loc attribute/value pairs that match an HTML element
50
+ #
51
+ def clear_items_from_list(loc)
52
+ @browser.select(parse_location(loc)).clear
53
+ end
54
+
55
+
56
+ ### Conditions ###
57
+
58
+ #
59
+ # Ensure that an item is selected
60
+ #
61
+ # @param [String] list_loc attribute/value pairs that match a select list
62
+ # @param [String] item_loc attribute/value pairs that match an item in a select list
63
+ #
64
+ def item_should_be_selected(list_loc, item_loc)
65
+ raise(Exception::SelectListSelectionError, "The item described by #{item_loc} in the select list described by #{list_loc} is not selected") unless
66
+ @browser.select(parse_location(list_loc)).option(parse_location(item_loc)).selected?
67
+ end
68
+
69
+ #
70
+ # Ensure that an item is not selected
71
+ #
72
+ # @param [String] list_loc attribute/value pairs that match a select list
73
+ # @param [String] item_loc attribute/value pairs that match an item in a select list
74
+ #
75
+ def item_should_not_be_selected(list_loc, item_loc)
76
+ raise(Exception::SelectListSelectionError, "The item described by #{item_loc} in the select list described by #{list_loc} is selected") if
77
+ @browser.select(parse_location(list_loc)).option(parse_location(item_loc)).selected?
78
+ end
79
+
80
+ end
81
+
82
+ end