rwebunit 0.7.2 → 0.8.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +33 -1
- data/Rakefile +3 -3
- data/lib/rwebunit.rb +11 -1
- data/lib/rwebunit/assert.rb +1 -1
- data/lib/rwebunit/driver.rb +424 -296
- data/lib/rwebunit/rspec_helper.rb +39 -19
- data/lib/rwebunit/web_page.rb +5 -0
- data/lib/rwebunit/web_tester.rb +191 -59
- metadata +4 -4
@@ -1,5 +1,17 @@
|
|
1
1
|
require 'uri'
|
2
2
|
|
3
|
+
# ZZ patches to RSpec 1.1.2
|
4
|
+
# - add to_s method to example_group
|
5
|
+
module Spec
|
6
|
+
module Example
|
7
|
+
class ExampleGroup
|
8
|
+
def to_s
|
9
|
+
@_defined_description
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
3
15
|
# example
|
4
16
|
# should link_by_text(text, options).size > 0
|
5
17
|
|
@@ -13,41 +25,37 @@ module RWebUnit
|
|
13
25
|
@web_tester
|
14
26
|
end
|
15
27
|
|
16
|
-
def open_browser_preconfigured(options = {})
|
17
|
-
open_browser(ENV['ITEST_PROJECT_BASE_URL'], options)
|
18
|
-
end
|
19
|
-
|
20
28
|
# open a browser, and set base_url via hash, but does not acually
|
21
29
|
#
|
22
30
|
# example:
|
23
31
|
# open_browser :base_url => http://localhost:8080
|
24
|
-
def open_browser(base_url = nil, options = {})
|
25
|
-
|
32
|
+
def open_browser(base_url = nil, options = {})
|
33
|
+
base_url ||= ENV['ITEST_PROJECT_BASE_URL']
|
34
|
+
raise "base_url must be set" if base_url.nil?
|
26
35
|
|
27
|
-
|
36
|
+
default_options = {:speed => "fast",
|
28
37
|
:visible => true,
|
29
38
|
:highlight_colour => 'yellow',
|
30
39
|
:close_others => true,
|
31
40
|
:start_new => false, # start a new browser always
|
32
41
|
:go => true}
|
33
|
-
|
34
|
-
options = default_options.merge options
|
35
|
-
|
42
|
+
|
43
|
+
options = default_options.merge options
|
44
|
+
options[:firefox] = true if "Firefox" == ENV['ITEST_BROWSER']
|
45
|
+
(ENV['ITEST_HIDE_BROWSER'] == "true") ? $HIDE_IE = true : $HIDE_IE = false
|
36
46
|
|
37
47
|
uri = URI.parse(base_url)
|
38
48
|
uri_base = "#{uri.scheme}://#{uri.host}:#{uri.port}"
|
39
|
-
if options[:start_new]
|
49
|
+
if options[:start_new] || @web_tester.nil?
|
40
50
|
@web_tester = WebTester.new(uri_base, options)
|
41
|
-
else
|
42
|
-
@web_tester ||= WebTester.new(uri_base, options)
|
43
51
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
52
|
+
|
53
|
+
if options[:go]
|
54
|
+
(uri.path.length == 0) ? begin_at("/") : begin_at(uri.path)
|
47
55
|
end
|
48
56
|
return @web_tester
|
49
57
|
end
|
50
|
-
|
58
|
+
alias open_browser_with open_browser
|
51
59
|
|
52
60
|
# --
|
53
61
|
# Content
|
@@ -97,12 +105,24 @@ module RWebUnit
|
|
97
105
|
# default options: exact => true
|
98
106
|
def links_by_text(link_text, options = {})
|
99
107
|
options.merge!({:exact=> true})
|
100
|
-
|
101
|
-
|
108
|
+
matching_links = []
|
109
|
+
links.each { |link|
|
110
|
+
matching_links << link if (options[:exact] ? link.text == link_text : link.text.include?(link_text))
|
102
111
|
}
|
112
|
+
return matching_links
|
103
113
|
end
|
104
114
|
alias links_with_text links_by_text
|
105
115
|
|
116
|
+
def save_page(file_name = nil)
|
117
|
+
@web_tester.save_page(file_name)
|
118
|
+
end
|
119
|
+
|
120
|
+
def save_content_to_file(content, file_name = nil)
|
121
|
+
file_name ||= Time.now.strftime("%Y%m%d%H%M%S") + ".html"
|
122
|
+
puts "about to save page: #{File.expand_path(file_name)}"
|
123
|
+
File.open(file_name, "w").puts content
|
124
|
+
end
|
125
|
+
|
106
126
|
end
|
107
127
|
|
108
128
|
end
|
data/lib/rwebunit/web_page.rb
CHANGED
data/lib/rwebunit/web_tester.rb
CHANGED
@@ -21,6 +21,19 @@ end
|
|
21
21
|
|
22
22
|
raise "You have must at least Watir or Firewatir installed" unless $watir_loaded || $firewatir_loaded
|
23
23
|
|
24
|
+
# Patch: fix typo in Watir 1.5.3
|
25
|
+
module Watir
|
26
|
+
class IE
|
27
|
+
def self.close_all_but(except=nil)
|
28
|
+
Watir::IE.each do |ie|
|
29
|
+
ie.close_modal
|
30
|
+
ie.close unless except and except.hwnd == ie.hwnd
|
31
|
+
end
|
32
|
+
sleep 1.0 # replace with polling for window count to be zero?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
24
37
|
module RWebUnit
|
25
38
|
|
26
39
|
##
|
@@ -31,7 +44,7 @@ module RWebUnit
|
|
31
44
|
attr_accessor :test_context
|
32
45
|
|
33
46
|
def initialize(base_url = nil, options = {})
|
34
|
-
default_options = {:speed => "
|
47
|
+
default_options = {:speed => "zippy",
|
35
48
|
:visible => true,
|
36
49
|
:highlight_colour => 'yellow',
|
37
50
|
:close_others => true}
|
@@ -40,54 +53,121 @@ module RWebUnit
|
|
40
53
|
|
41
54
|
if (options[:firefox] && $firewatir_loaded) || ($firewatir_loaded and !$watir_loaded)
|
42
55
|
@@browser = FireWatir::Firefox.start(base_url)
|
43
|
-
elsif $watir_loaded
|
56
|
+
elsif $watir_loaded
|
44
57
|
@@browser = Watir::IE.new
|
45
|
-
|
58
|
+
|
59
|
+
if ENV['ITEST_EMULATE_TYPING'] == "true" && ENV['ITEST_TYPING_SPEED'] then
|
60
|
+
@@browser.set_slow_speed if ENV['ITEST_TYPING_SPEED'] == 'slow'
|
61
|
+
@@browser.set_fast_speed if ENV['ITEST_TYPING_SPEED'] == 'fast'
|
62
|
+
else
|
63
|
+
@@browser.speed = :zippy
|
64
|
+
end
|
46
65
|
@@browser.activeObjectHighLightColor = options[:highlight_colour]
|
47
|
-
@@browser.visible = options[:visible]
|
66
|
+
@@browser.visible = options[:visible] unless $HIDE_IE
|
48
67
|
@@browser.close_others if options[:close_others]
|
49
|
-
else
|
68
|
+
else
|
50
69
|
raise "rWebUnit initialiazation error, most likely Watir or Firewatir not present"
|
51
70
|
end
|
71
|
+
|
52
72
|
end
|
53
73
|
|
54
74
|
##
|
55
75
|
# Delegate to Watir
|
56
76
|
#
|
57
|
-
def area(*args)
|
58
|
-
|
59
|
-
|
77
|
+
def area(*args)
|
78
|
+
@@browser.area(*args)
|
79
|
+
end
|
80
|
+
def button(*args)
|
81
|
+
@@browser.button(*args);
|
82
|
+
end
|
83
|
+
def cell(*args)
|
84
|
+
@@browser.cell(*args);
|
85
|
+
end
|
60
86
|
alias td cell
|
61
|
-
def checkbox(*args)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
def
|
66
|
-
|
67
|
-
|
68
|
-
def
|
69
|
-
|
70
|
-
|
71
|
-
def
|
72
|
-
|
73
|
-
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
def
|
78
|
-
|
79
|
-
|
87
|
+
def checkbox(*args)
|
88
|
+
@@browser.checkbox(*args);
|
89
|
+
end
|
90
|
+
alias check_box checkbox # seems watir doc is wrong, checkbox not check_box
|
91
|
+
def div(*args)
|
92
|
+
@@browser.div(*args);
|
93
|
+
end
|
94
|
+
def form(*args)
|
95
|
+
@@browser.form(*args);
|
96
|
+
end
|
97
|
+
def frame(*args)
|
98
|
+
@@browser.frame(*args);
|
99
|
+
end
|
100
|
+
def h1(*args)
|
101
|
+
@@browser.h1(*args);
|
102
|
+
end
|
103
|
+
def h2(*args)
|
104
|
+
@@browser.h2(*args);
|
105
|
+
end
|
106
|
+
def h3(*args)
|
107
|
+
@@browser.h3(*args);
|
108
|
+
end
|
109
|
+
def h4(*args)
|
110
|
+
@@browser.h4(*args);
|
111
|
+
end
|
112
|
+
def h5(*args)
|
113
|
+
@@browser.h5(*args);
|
114
|
+
end
|
115
|
+
def h6(*args)
|
116
|
+
@@browser.h6(*args);
|
117
|
+
end
|
118
|
+
def hidden(*args)
|
119
|
+
@@browser.hidden(*args);
|
120
|
+
end
|
121
|
+
def image(*args)
|
122
|
+
@@browser.image(*args);
|
123
|
+
end
|
124
|
+
def li(*args)
|
125
|
+
@@browser.li(*args);
|
126
|
+
end
|
127
|
+
def link(*args)
|
128
|
+
@@browser.link(*args);
|
129
|
+
end
|
130
|
+
def map(*args)
|
131
|
+
@@browser.map(*args);
|
132
|
+
end
|
133
|
+
def pre(*args)
|
134
|
+
@@browser.pre(*args);
|
135
|
+
end
|
136
|
+
def radio(*args)
|
137
|
+
@@browser.radio(*args);
|
138
|
+
end
|
139
|
+
def row(*args)
|
140
|
+
@@browser.row(*args);
|
141
|
+
end
|
80
142
|
alias tr row
|
81
|
-
def select_list(*args)
|
82
|
-
|
83
|
-
|
84
|
-
def text_field(*args); @@browser.text_field(*args); end
|
143
|
+
def select_list(*args)
|
144
|
+
@@browser.select_list(*args);
|
145
|
+
end
|
85
146
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
147
|
+
def span(*args)
|
148
|
+
@@browser.span(*args);
|
149
|
+
end
|
89
150
|
|
90
|
-
def
|
151
|
+
def table(*args)
|
152
|
+
@@browser.table(*args);
|
153
|
+
end
|
154
|
+
def text_field(*args)
|
155
|
+
@@browser.text_field(*args);
|
156
|
+
end
|
157
|
+
|
158
|
+
def paragraph(*args)
|
159
|
+
@@browser.paragraph(*args);
|
160
|
+
end
|
161
|
+
def file_field(*args)
|
162
|
+
@@browser.file_field(*args);
|
163
|
+
end
|
164
|
+
def label(*args)
|
165
|
+
@@browser.label(*args);
|
166
|
+
end
|
167
|
+
|
168
|
+
def contains_text(text)
|
169
|
+
@@browser.contains_text(text);
|
170
|
+
end
|
91
171
|
|
92
172
|
def page_source
|
93
173
|
@@browser.html()
|
@@ -103,15 +183,33 @@ module RWebUnit
|
|
103
183
|
end
|
104
184
|
end
|
105
185
|
|
106
|
-
def
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
def
|
111
|
-
|
186
|
+
def images
|
187
|
+
@@browser.images
|
188
|
+
end
|
189
|
+
|
190
|
+
def links
|
191
|
+
@@browser.links;
|
192
|
+
end
|
193
|
+
def buttons
|
194
|
+
@@browser.buttons;
|
195
|
+
end
|
196
|
+
def select_lists
|
197
|
+
@@browser.select_lists;
|
198
|
+
end
|
199
|
+
def checkboxes
|
200
|
+
@@browser.checkboxes;
|
201
|
+
end
|
202
|
+
def radios
|
203
|
+
@@browser.radios;
|
204
|
+
end
|
205
|
+
def text_fields
|
206
|
+
@@browser.text_fields;
|
207
|
+
end
|
112
208
|
|
113
209
|
# current url
|
114
|
-
def url
|
210
|
+
def url
|
211
|
+
@@browser.url
|
212
|
+
end
|
115
213
|
|
116
214
|
def base_url=(new_base_url)
|
117
215
|
if @test_context
|
@@ -186,26 +284,42 @@ module RWebUnit
|
|
186
284
|
end
|
187
285
|
|
188
286
|
|
189
|
-
def go_back;
|
190
|
-
|
191
|
-
|
192
|
-
def
|
287
|
+
def go_back;
|
288
|
+
@@browser.back;
|
289
|
+
end
|
290
|
+
def go_forward;
|
291
|
+
@@browser.forward;
|
292
|
+
end
|
293
|
+
def goto_page(page)
|
294
|
+
@@browser.goto full_url(page);
|
295
|
+
end
|
296
|
+
def refresh;
|
297
|
+
@@browser.refresh;
|
298
|
+
end
|
193
299
|
|
194
|
-
def focus;
|
195
|
-
|
300
|
+
def focus;
|
301
|
+
@@browser.focus;
|
302
|
+
end
|
303
|
+
def close_others;
|
304
|
+
@@browser.close_others;
|
305
|
+
end
|
196
306
|
|
197
307
|
# text fields
|
198
308
|
def enter_text_into_field_with_name(name, text)
|
199
|
-
|
309
|
+
if is_firefox?
|
310
|
+
wait_before_and_after { text_field(:name, name).value = text }
|
311
|
+
sleep 0.5
|
312
|
+
else
|
313
|
+
wait_before_and_after { text_field(:name, name).set(text) }
|
314
|
+
end
|
200
315
|
end
|
201
316
|
alias set_form_element enter_text_into_field_with_name
|
202
317
|
alias enter_text enter_text_into_field_with_name
|
203
318
|
|
204
319
|
#links
|
205
|
-
def
|
320
|
+
def click_link_with_id(link_id)
|
206
321
|
wait_before_and_after { link(:id, link_id).click }
|
207
322
|
end
|
208
|
-
alias click_link_with_id click_link
|
209
323
|
|
210
324
|
def click_link_with_text(text)
|
211
325
|
wait_before_and_after { link(:text, text).click }
|
@@ -217,7 +331,6 @@ module RWebUnit
|
|
217
331
|
def click_button_with_id(id)
|
218
332
|
wait_before_and_after { button(:id, id).click }
|
219
333
|
end
|
220
|
-
alias click_button click_button_with_id
|
221
334
|
|
222
335
|
def click_button_with_name(name)
|
223
336
|
wait_before_and_after { button(:name, name).click }
|
@@ -283,7 +396,11 @@ module RWebUnit
|
|
283
396
|
end
|
284
397
|
|
285
398
|
def element_by_id(elem_id)
|
286
|
-
|
399
|
+
if is_firefox?
|
400
|
+
elem = label(:id, elem_id) || button(:id, elem_id) || span(:id, elem_id) || hidden(:id, elem_id) || link(:id, elem_id) || radio(:id, elem_id)
|
401
|
+
else
|
402
|
+
elem = @@browser.document.getElementById(elem_id)
|
403
|
+
end
|
287
404
|
end
|
288
405
|
|
289
406
|
def element_value(elementId)
|
@@ -306,12 +423,15 @@ module RWebUnit
|
|
306
423
|
file_field(:name, file_field).set(file_path)
|
307
424
|
end
|
308
425
|
|
309
|
-
def start_window(url = nil)
|
426
|
+
def start_window(url = nil)
|
427
|
+
@@browser.start_window(url);
|
428
|
+
end
|
429
|
+
|
310
430
|
def self.attach_browser(how, what)
|
311
|
-
if
|
312
|
-
raise "not implemented yet"
|
313
|
-
else
|
431
|
+
if @@browser && @@browser.class == Watir::IE
|
314
432
|
Watir::IE.attach(how, what)
|
433
|
+
else
|
434
|
+
raise "not implemented yet"
|
315
435
|
end
|
316
436
|
end
|
317
437
|
|
@@ -323,7 +443,13 @@ module RWebUnit
|
|
323
443
|
if is_firefox?
|
324
444
|
raise "not implemented"
|
325
445
|
else
|
326
|
-
|
446
|
+
if options[:url]
|
447
|
+
Watir::IE.attach(:url, options[:url])
|
448
|
+
elsif options[:title]
|
449
|
+
Watir::IE.attach(:title, options[:title])
|
450
|
+
else
|
451
|
+
raise 'Please specify title or url of new pop up window'
|
452
|
+
end
|
327
453
|
end
|
328
454
|
end
|
329
455
|
|
@@ -342,7 +468,7 @@ module RWebUnit
|
|
342
468
|
#
|
343
469
|
# http://wiki.openqa.org/display/WTR/FAQ#FAQ-HowdoIattachtoapopupwindow%3F
|
344
470
|
#
|
345
|
-
def start_clicker( button
|
471
|
+
def start_clicker( button, waitTime= 9, user_input=nil)
|
346
472
|
# get a handle if one exists
|
347
473
|
hwnd = @@browser.enabled_popup(waitTime)
|
348
474
|
if (hwnd) # yes there is a popup
|
@@ -371,6 +497,12 @@ module RWebUnit
|
|
371
497
|
@@browser
|
372
498
|
end
|
373
499
|
|
500
|
+
def save_page(file_name = nil)
|
501
|
+
file_name ||= Time.now.strftime("%Y%m%d%H%M%S") + ".html"
|
502
|
+
puts "about to save page: #{File.expand_path(file_name)}"
|
503
|
+
File.open(file_name, "w").puts page_source
|
504
|
+
end
|
505
|
+
|
374
506
|
end
|
375
507
|
|
376
508
|
end
|