awetestlib 0.1.30-x86-mingw32 → 1.2.4-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +101 -41
- data/awetestlib.gemspec +36 -47
- data/awetestlib_osx.gemspec +24 -18
- data/awetestlib_windows.gemspec +46 -0
- data/bin/awetestlib +130 -111
- data/bin/awetestlib-driver-setup.rb +0 -2
- data/bin/awetestlib-helpers.rb +43 -30
- data/lib/awetestlib.rb +196 -20
- data/lib/awetestlib/command_line.rb +44 -0
- data/lib/awetestlib/html_report.rb +57 -50
- data/lib/awetestlib/logging.rb +242 -171
- data/lib/awetestlib/regression/awetest_dsl.rb +4240 -0
- data/lib/awetestlib/regression/browser.rb +514 -397
- data/lib/awetestlib/regression/date_and_time.rb +280 -0
- data/lib/awetestlib/regression/drag_and_drop.rb +24 -0
- data/lib/awetestlib/regression/find.rb +70 -43
- data/lib/awetestlib/regression/legacy.rb +1 -1
- data/lib/awetestlib/regression/mobile.rb +293 -0
- data/lib/awetestlib/regression/reporting.rb +298 -0
- data/lib/awetestlib/regression/runner.rb +156 -200
- data/lib/awetestlib/regression/tables.rb +117 -7
- data/lib/awetestlib/regression/test_data.rb +354 -0
- data/lib/awetestlib/regression/user_input.rb +179 -93
- data/lib/awetestlib/regression/utilities.rb +755 -286
- data/lib/awetestlib/regression/validations.rb +325 -115
- data/lib/awetestlib/regression/waits.rb +60 -133
- data/lib/awetestlib/runner.rb +5 -2
- data/lib/version.rb +11 -2
- data/setup_samples/sample_cucumber/features/step_definitions/predefined_steps.rb +109 -49
- data/setup_samples/sample_mobile_app/features/support/env.rb +1 -1
- data/test/google_search2.rb +7 -6
- data/test/popup_child_0.rb +13 -0
- data/test/popup_child_1.rb +33 -0
- data/test/watir_no_require.rb +13 -0
- data/test/watir_with_require.rb +16 -0
- data/test/zoho_exercise.rb +8 -8
- metadata +216 -303
- data/AwetestLib Instructions.rtf +0 -0
- data/awetestlib.windows.gemspec +0 -42
- data/lib/patches/README +0 -2
- data/lib/patches/firewatir.rb +0 -106
- data/lib/patches/watir.rb +0 -175
@@ -4,36 +4,24 @@ module Awetestlib
|
|
4
4
|
# Methods to manage browser windows: open, close, attach, verify health, and clean up.
|
5
5
|
module Browser
|
6
6
|
|
7
|
-
#def run #DO WE NEED? Use this method to tell user they need to create a run method?
|
8
|
-
## Not here in any case.
|
9
|
-
# setup
|
10
|
-
# set_script_variables
|
11
|
-
# run_test
|
12
|
-
#rescue
|
13
|
-
# fatal_to_log("(#{__LINE__}) #{$!}")
|
14
|
-
# browser.close
|
15
|
-
# raise
|
16
|
-
#end
|
17
|
-
|
18
7
|
# @!group Browser
|
19
8
|
|
20
|
-
# @note webdriver specific - still work in progress
|
21
9
|
def go_to_wd_url(browser, url)
|
22
10
|
|
23
11
|
Watir::Browser.class_eval do
|
24
12
|
def goto(uri)
|
25
13
|
uri = "http://#{uri}" unless uri =~ URI.regexp
|
26
|
-
|
14
|
+
begin
|
15
|
+
@driver.navigate.to uri
|
16
|
+
rescue => e
|
17
|
+
debug_to_log("#{e.inspect} '#{$!}'")
|
18
|
+
end
|
27
19
|
run_checkers
|
28
20
|
end
|
29
21
|
end
|
30
22
|
browser.goto(url)
|
31
|
-
|
32
|
-
|
33
|
-
#a = Thread.new {
|
34
|
-
# goto_wd_url(browser, @myURL)
|
35
|
-
# }
|
36
|
-
|
23
|
+
rescue
|
24
|
+
failed_to_log(unable_to)
|
37
25
|
end
|
38
26
|
|
39
27
|
alias goto_wd_url go_to_wd_url
|
@@ -46,30 +34,61 @@ module Awetestlib
|
|
46
34
|
# @param [String, Regexp] url When provided, the browser will go to this url.
|
47
35
|
# @return [Watir::Browser]
|
48
36
|
def open_browser(url = nil)
|
49
|
-
message_to_report("Opening browser: #{@targetBrowser.
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
37
|
+
message_to_report("Opening browser: #{@targetBrowser.abbrev}")
|
38
|
+
|
39
|
+
browser = nil
|
40
|
+
|
41
|
+
if $mobile
|
42
|
+
end_android_processes if $platform == :android
|
43
|
+
clean_up_android_temp unless $device
|
44
|
+
sleep_for(3)
|
45
|
+
browser = open_mobile_browser
|
46
|
+
else
|
47
|
+
case @targetBrowser.abbrev
|
48
|
+
when 'IE'
|
49
|
+
browser = open_ie
|
50
|
+
if browser.class.to_s == "Watir::IE"
|
51
|
+
@myHwnd = browser.hwnd
|
52
|
+
end
|
53
|
+
when 'FF'
|
54
|
+
browser = open_ff
|
55
|
+
when 'S'
|
56
|
+
if USING_OSX
|
57
|
+
browser = open_safari
|
58
|
+
else
|
59
|
+
fail "Safari is not supported under this operating system #{RUBY_PLATFORM}"
|
60
|
+
end
|
61
|
+
when 'C', 'GC'
|
62
|
+
browser = open_chrome
|
61
63
|
else
|
62
|
-
|
63
|
-
|
64
|
-
when 'C', 'GC'
|
65
|
-
@myBrowser = open_chrome
|
66
|
-
else
|
67
|
-
raise "Unsupported browser: #{@targetBrowser.name}"
|
64
|
+
fail "Unsupported browser: #{@targetBrowser.name} (#{@targetBrowser.abbrev})"
|
65
|
+
end
|
68
66
|
end
|
69
|
-
|
70
|
-
|
67
|
+
|
68
|
+
if browser and url
|
69
|
+
go_to_url(browser, url)
|
70
|
+
end
|
71
|
+
|
72
|
+
get_browser_version(browser)
|
73
|
+
message_to_report("Opened browser: #{@browserName} #{@browserVersion}")
|
74
|
+
#message_to_log(@browserName)
|
75
|
+
#message_to_log(@browserVersion)
|
76
|
+
|
77
|
+
@myBrowser = browser
|
78
|
+
|
79
|
+
rescue
|
80
|
+
failed_to_log(unable_to)
|
81
|
+
end
|
82
|
+
|
83
|
+
def browser_driver(browser)
|
84
|
+
if @myBrowser.class.to_s =~ /IE/
|
85
|
+
@actualBrowser.driver = 'Watir Classic'
|
86
|
+
$using_webdriver = false
|
87
|
+
else
|
88
|
+
#@actualBrowser.driver = "Watir-webdriver #{@myBrowser.driver.capabilities.browser_name.titleize}"
|
89
|
+
$using_webdriver = true
|
71
90
|
end
|
72
|
-
@
|
91
|
+
#message_to_report("Running with #{@actualBrowser.driver}")
|
73
92
|
end
|
74
93
|
|
75
94
|
# Open IE (Internet Explorer) browser instance.
|
@@ -78,31 +97,41 @@ module Awetestlib
|
|
78
97
|
# otherwise Watir Webdriver will be used.
|
79
98
|
# @return [Watir::Browser]
|
80
99
|
def open_ie
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
100
|
+
#browser = Watir::Browser.new :ie
|
101
|
+
caps = Selenium::WebDriver::Remote::Capabilities.internet_explorer(
|
102
|
+
#:nativeEvents => false,
|
103
|
+
#'nativeEvents' => false,
|
104
|
+
:initialBrowserUrl => 'about:blank',
|
105
|
+
:enablePersistentHover => false,
|
106
|
+
:ignoreProtectedModeSettings => true,
|
107
|
+
:introduceInstabilityByIgnoringProtectedModeSettings => true,
|
108
|
+
:unexpectedAlertBehaviour => 'ignore'
|
109
|
+
)
|
110
|
+
Watir::Browser.new(:ie, :desired_capabilities => caps)
|
111
|
+
rescue
|
112
|
+
failed_to_log(unable_to)
|
87
113
|
end
|
88
114
|
|
89
115
|
# Open Safari browser instance.
|
90
116
|
# @note Safari currently supported only on Mac OS X
|
91
117
|
# @return [Watir::Browser]
|
92
118
|
def open_safari
|
93
|
-
|
119
|
+
Watir::Browser.new(:remote, :desired_capabilities => :'safari')
|
94
120
|
end
|
95
121
|
|
96
122
|
# Open FF (Firefox) browser instance under FireWatir.
|
97
123
|
# @return [Watir::Browser]
|
98
124
|
def open_ff
|
99
|
-
|
125
|
+
Watir::Browser.new :firefox
|
100
126
|
end
|
101
127
|
|
102
128
|
# Open GC (Google Chrome) browser instance.
|
103
129
|
# @return [Watir::Browser] Browser is Google Chrome.
|
104
130
|
def open_chrome
|
105
|
-
|
131
|
+
client = Selenium::WebDriver::Remote::Http::Default.new
|
132
|
+
client.timeout = 180 # seconds � default is 60
|
133
|
+
|
134
|
+
Watir::Browser.new(:chrome, :http_client => client)
|
106
135
|
end
|
107
136
|
|
108
137
|
# Instruct browser to navigate to a specific URL
|
@@ -114,7 +143,7 @@ module Awetestlib
|
|
114
143
|
if url
|
115
144
|
@myURL = url
|
116
145
|
end
|
117
|
-
message_to_report("URL: #{@myURL}")
|
146
|
+
message_to_report(with_caller("URL: #{@myURL}"))
|
118
147
|
browser.goto(@myURL)
|
119
148
|
true
|
120
149
|
rescue
|
@@ -122,94 +151,53 @@ module Awetestlib
|
|
122
151
|
end
|
123
152
|
|
124
153
|
# Return a reference to a browser window. Used to attach a browser window to a variable
|
125
|
-
# which can then be passed to methods that require a *browser* parameter.
|
154
|
+
# which can then be passed to methods that require a *browser* parameter containing a Browser object.
|
126
155
|
# @example
|
127
156
|
# mainwindow = open_browser('www.google.com')
|
128
157
|
# click(mainwindow, :button, :id, 'an id string') # click a button that opens another browser window
|
129
158
|
# popup = attach_browser(mainwindow, :url, '[url of new window]') #*or*
|
130
159
|
# popup = attach_browser(mainwindow, :title, '[title of new window]')
|
131
|
-
# @todo Update to work with webdriver for IE.
|
132
160
|
# @param [Watir::Browser] browser A reference to the current browser window.
|
133
161
|
# @param [Symbol] how The element attribute used to identify the window: *:title* or :url.
|
134
162
|
# @param [String|Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
|
135
163
|
# @param [String] desc Contains a message or description intended to appear in the log and/or report output
|
136
|
-
# @
|
137
|
-
|
138
|
-
|
164
|
+
# @param [String] refs List of reference identifiers to include in log/report message
|
165
|
+
# @return [Watir::Browser]
|
166
|
+
def attach(browser, how, what, desc = '', refs = '')
|
167
|
+
msg = "Attaching browser window :#{how}='#{what}' #{desc} #{refs}"
|
168
|
+
debug_to_report(with_caller(msg))
|
139
169
|
uri_decoded_pattern = ::URI.encode(what.to_s.gsub('(?-mix:', '').gsub(')', ''))
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
tmpbrowser.speed = :fast
|
147
|
-
else
|
148
|
-
raise "Browser window :#{how}=>'#{what}' has at least one doc not in completed ready state."
|
149
|
-
end
|
150
|
-
else
|
151
|
-
browser.driver.switch_to.window(browser.driver.window_handles[0])
|
152
|
-
browser.window(how, /#{uri_decoded_pattern}/).use
|
153
|
-
tmpbrowser = browser
|
154
|
-
end
|
155
|
-
|
156
|
-
# case @browserAbbrev
|
157
|
-
# when 'IE'
|
158
|
-
# tmpbrowser = Watir::IE.attach(how, what)
|
159
|
-
# browser.visible = true
|
160
|
-
# if tmpbrowser
|
161
|
-
# tmpbrowser.visible = true
|
162
|
-
# tmpbrowser.speed = :fast
|
163
|
-
# else
|
164
|
-
# raise "Browser window :#{how}=>'#{what}' has at least one doc not in completed ready state."
|
165
|
-
# end
|
166
|
-
# when 'FF'
|
167
|
-
# #TODO: This may be dependent on Firefox version if webdriver doesn't support 3.6.17 and below
|
168
|
-
# browser.driver.switch_to.window(browser.driver.window_handles[0])
|
169
|
-
# browser.window(how, /#{uri_decoded_pattern}/).use
|
170
|
-
# tmpbrowser = browser
|
171
|
-
# when 'S'
|
172
|
-
# Watir::Safari.attach(how, what)
|
173
|
-
# tmpbrowser = browser
|
174
|
-
# when 'C', 'GC'
|
175
|
-
# browser.window(how, /#{uri_decoded_pattern}/).use
|
176
|
-
# tmpbrowser = browser
|
177
|
-
# end
|
178
|
-
|
179
|
-
|
180
|
-
debug_to_log("#{__method__}: tmpbrowser:#{tmpbrowser.inspect}")
|
181
|
-
tmpbrowser
|
170
|
+
debug_to_log(with_caller(uri_decoded_pattern))
|
171
|
+
browser.driver.switch_to.window(browser.driver.window_handles[0])
|
172
|
+
browser.window(how, what).use
|
173
|
+
browser
|
174
|
+
rescue
|
175
|
+
failed_to_log(unable_to(msg))
|
182
176
|
end
|
183
177
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
# @param [String] desc Contains a message or description intended to appear in the log and/or report output
|
196
|
-
# @return [Watir::Browser] The new browser window.
|
197
|
-
def attach_popup(browser, how, what, desc = '')
|
198
|
-
msg = "Attach popup :#{how}=>'#{what}'. #{desc}"
|
199
|
-
popup = attach_browser(browser, how, what, desc)
|
200
|
-
sleep_for(1)
|
201
|
-
debug_to_log("#{popup.inspect}")
|
202
|
-
if is_browser?(popup)
|
203
|
-
title = popup.title
|
204
|
-
passed_to_log("#{msg} title='#{title}'")
|
205
|
-
return popup
|
178
|
+
alias find_popup attach
|
179
|
+
alias find_window attach
|
180
|
+
alias attach_popup attach
|
181
|
+
alias attach_window attach
|
182
|
+
alias attach_browser attach
|
183
|
+
alias use_window attach
|
184
|
+
|
185
|
+
def re_attach(browser, window = 0)
|
186
|
+
if $using_webdriver
|
187
|
+
@myBrowser.driver.switch_to.window(browser.driver.window_handles[window])
|
188
|
+
#@myBrowser.window.use
|
206
189
|
else
|
207
|
-
|
190
|
+
case window
|
191
|
+
when 0
|
192
|
+
@myBrowser
|
193
|
+
else
|
194
|
+
@myBrowser
|
195
|
+
end
|
208
196
|
end
|
209
|
-
rescue
|
210
|
-
failed_to_log("Unable to attach popup :#{how}=>'#{what}'. #{desc} '#{$!}' (#{__LINE__})")
|
211
197
|
end
|
212
198
|
|
199
|
+
alias re_attach_window re_attach
|
200
|
+
|
213
201
|
# Locate and close instances of IE browsers
|
214
202
|
def find_other_browsers
|
215
203
|
cnt = 0
|
@@ -270,38 +258,100 @@ module Awetestlib
|
|
270
258
|
# @param [Boolean] bypass_validate When set to true, the call to validate(),
|
271
259
|
# which checks the health of the browser, is skipped..
|
272
260
|
def basic_auth(browser, user, password, url, bypass_validate = false)
|
273
|
-
|
274
|
-
|
275
|
-
message_to_report ("Login: #{user}")
|
276
|
-
message_to_report ("URL: #{url}")
|
277
|
-
message_to_report ("Password: #{password}")
|
261
|
+
mark_test_level("Login")
|
278
262
|
|
279
|
-
|
263
|
+
get_browser_version(browser)
|
264
|
+
message_to_log(@browserName)
|
265
|
+
message_to_log(@browserVersion)
|
266
|
+
message_to_log("Login: #{user}")
|
267
|
+
message_to_log("URL: #{url}")
|
268
|
+
message_to_log("Password: #{password}")
|
269
|
+
debug_to_report("@user: #{user}, @pass: #{password} (#{__LINE__})")
|
280
270
|
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
271
|
+
case @browserAbbrev
|
272
|
+
when 'IE', 'FF'
|
273
|
+
|
274
|
+
user_name, pass_word, login_button, login_title = get_basic_auth_control_indexes
|
275
|
+
|
276
|
+
a = Thread.new {
|
277
|
+
begin
|
278
|
+
#go_to_wd_url(browser, url)
|
279
|
+
browser.goto(url)
|
280
|
+
Watir::Wait.until(5) { browser.alert.exists? }
|
281
|
+
rescue => e
|
282
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
283
|
+
rescue => e
|
284
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
285
|
+
end
|
286
|
+
}
|
287
|
+
|
288
|
+
sleep(1)
|
289
|
+
message_to_log("#{login_title}...")
|
290
|
+
if @ai.WinWait(login_title, "", 90) > 0
|
291
|
+
win_title = @ai.WinGetTitle(login_title)
|
292
|
+
debug_to_log("Basic Auth Login window appeared: '#{win_title}'")
|
293
|
+
@ai.WinActivate(login_title)
|
294
|
+
|
295
|
+
case @browserAbbrev
|
296
|
+
when 'FF'
|
297
|
+
@ai.Send(user)
|
298
|
+
@ai.Send('{TAB}')
|
299
|
+
@ai.Send(password)
|
300
|
+
sleep(1)
|
301
|
+
@ai.Send('{ENTER}')
|
302
|
+
when 'IE'
|
303
|
+
begin
|
304
|
+
@ai.ControlSend(login_title, '', "[CLASS:Edit; INSTANCE:#{user_name}]", '!u')
|
305
|
+
@ai.ControlSetText(login_title, '', "[CLASS:Edit; INSTANCE:#{user_name}]", user)
|
306
|
+
@ai.ControlSetText(login_title, '', "[CLASS:Edit; INSTANCE:#{pass_word}]", password.gsub(/!/, '{!}'))
|
307
|
+
sleep(1)
|
308
|
+
@ai.ControlClick(login_title, "", "[CLASS:Button; INSTANCE:#{login_button}]")
|
309
|
+
rescue => e
|
310
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
311
|
+
rescue => e
|
312
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
313
|
+
end
|
314
|
+
end
|
315
|
+
else
|
316
|
+
debug_to_log("Basic Auth Login window '#{login_title}' did not appear.")
|
317
|
+
end
|
318
|
+
begin
|
319
|
+
a.join
|
320
|
+
rescue => e
|
321
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
322
|
+
rescue => e
|
323
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
324
|
+
end
|
325
|
+
begin
|
326
|
+
validate(browser, @myName) unless bypass_validate
|
327
|
+
rescue => e
|
328
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
329
|
+
rescue => e
|
330
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
331
|
+
end
|
287
332
|
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
333
|
+
when 'GC', 'C'
|
334
|
+
browser.goto(url)
|
335
|
+
sleep(2)
|
336
|
+
browser.alert.use do
|
337
|
+
browser.send_keys(user)
|
338
|
+
browser.send_keys("{TAB}")
|
339
|
+
browser.send_keys(password)
|
340
|
+
browser.send_keys("~") # Enter
|
341
|
+
end
|
342
|
+
browser.windows[0].use
|
343
|
+
#when 'FF'
|
344
|
+
# aug_url = insert_id_pswd_in_url(user, password, url)
|
345
|
+
# debug_to_log("urL: #{url}\naug: #{aug_url}")
|
346
|
+
# go_to_wd_url(browser, aug_url)
|
298
347
|
end
|
299
|
-
a.join
|
300
|
-
|
301
|
-
validate(browser, @myName) unless bypass_validate
|
302
348
|
|
303
|
-
|
349
|
+
message_to_log("URL: [#{browser.url}]")
|
304
350
|
|
351
|
+
rescue => e
|
352
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
353
|
+
rescue => e
|
354
|
+
debug_to_log("#{__LINE__}: #{e.inspect}")
|
305
355
|
end
|
306
356
|
|
307
357
|
# Provide an authorization token or passcode in a specified text field element identified by its *:id* attribute.
|
@@ -327,28 +377,23 @@ module Awetestlib
|
|
327
377
|
# @param [Fixnum] lnbr Line number in calling script.
|
328
378
|
# @param [String] desc Contains a message or description intended to appear in the log and/or report output
|
329
379
|
#
|
330
|
-
def bail_out(browser, lnbr, desc)
|
380
|
+
def bail_out(browser, lnbr = __LINE__, desc = '')
|
331
381
|
ts = Time.new
|
332
|
-
msg = "Bailing out at
|
333
|
-
|
334
|
-
fatal_to_log(msg, lnbr)
|
335
|
-
debug_to_log(dump_caller(lnbr))
|
382
|
+
msg = "Bailing out at #{ts}. " + desc
|
383
|
+
debug_to_log(msg)
|
336
384
|
if is_browser?(browser)
|
337
385
|
if @browserAbbrev == 'IE'
|
338
386
|
hwnd = browser.hwnd
|
339
387
|
kill_browser(hwnd, lnbr, browser)
|
340
|
-
raise(RuntimeError, msg, caller)
|
341
388
|
elsif @browserAbbrev == 'FF'
|
342
389
|
debug_to_log("#{browser.inspect}")
|
343
390
|
debug_to_log("#{browser.to_s}")
|
344
|
-
raise(RuntimeError, msg, caller)
|
345
391
|
end
|
346
392
|
end
|
347
393
|
@status = 'bailout'
|
348
394
|
raise(RuntimeError, msg, caller)
|
349
395
|
end
|
350
396
|
|
351
|
-
|
352
397
|
# Check for the presence of IE browser instances.
|
353
398
|
# @return [Fixnum] The number of IE browser instances encountered.
|
354
399
|
def check_for_other_browsers
|
@@ -434,11 +479,11 @@ module Awetestlib
|
|
434
479
|
end
|
435
480
|
end
|
436
481
|
if logit
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
482
|
+
debug_to_log("#{@browserName} window hwnd #{hwnd} pid #{pid} #{url} (#{here})")
|
483
|
+
fatal_to_log("Kill browser called from line #{lnbr}")
|
484
|
+
end
|
485
|
+
end
|
486
|
+
end
|
442
487
|
|
443
488
|
# @!endgroup Error Handling
|
444
489
|
|
@@ -503,120 +548,134 @@ module Awetestlib
|
|
503
548
|
failed_to_log("#{msg}: Unable to close: '#{$!}'. (#{__LINE__}) #{desc}")
|
504
549
|
end
|
505
550
|
|
506
|
-
# Closes main browser session.
|
551
|
+
# Closes main browser session. Usually used at end of script to shut down browser.
|
507
552
|
def close_browser(browser, where = @myName, lnbr = __LINE__)
|
508
|
-
|
509
|
-
|
510
|
-
debug_to_log("#{
|
553
|
+
browser_name = BROWSER_MAP[@browserAbbrev]
|
554
|
+
mark_test_level("#{browser_name} in #{where}")
|
555
|
+
debug_to_log(with_caller("#{browser.inspect}"))
|
511
556
|
|
512
557
|
url = browser.url
|
513
558
|
title = browser.title
|
559
|
+
message_to_report(with_caller("#{browser_name} url: #{browser.url}"))
|
560
|
+
message_to_report(with_caller("#{browser_name} title: #{browser.title}"))
|
514
561
|
|
515
|
-
|
516
|
-
case @browserAbbrev
|
517
|
-
when 'FF'
|
518
|
-
if is_browser?(browser)
|
519
|
-
debug_to_log("#{__method__}: Firefox browser url: [#{url}]")
|
520
|
-
debug_to_log("#{__method__}: Firefox browser title: [#{title}]")
|
521
|
-
debug_to_log("#{__method__}: Closing browser: #{where} (#{lnbr})")
|
522
|
-
if url and url.length > 1
|
523
|
-
browser.close
|
524
|
-
else
|
525
|
-
browser = FireWatir::Firefox.attach(:title, title)
|
526
|
-
browser.close
|
527
|
-
end
|
562
|
+
report_browser_message(browser)
|
528
563
|
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
if $watir_script
|
535
|
-
hwnd = browser.hwnd
|
536
|
-
pid = Watir::IE::Process.process_id_from_hwnd(hwnd)
|
537
|
-
debug_to_log("#{__method__}: Closing browser: hwnd #{hwnd} pid #{pid} #{where} (#{lnbr}) (#{__LINE__})")
|
538
|
-
browser.close
|
539
|
-
if browser.exists? and pid > 0 and pid < 538976288 # value of uninitialized memory location
|
540
|
-
debug_to_log("Retry close browser: hwnd #{hwnd} pid #{pid} #{where} #{lnbr} (#{__LINE__})")
|
541
|
-
browser.close
|
542
|
-
end
|
543
|
-
if browser.exists? and pid > 0 and pid < 538976288 # value of uninitialized memory location
|
544
|
-
kill_browser(browser.hwnd, __LINE__, browser)
|
545
|
-
end
|
546
|
-
else
|
547
|
-
browser.close
|
548
|
-
end
|
549
|
-
when 'S'
|
550
|
-
if is_browser?(browser)
|
551
|
-
url = browser.url
|
552
|
-
title = browser.title
|
553
|
-
debug_to_log("Safari browser url: [#{url}]")
|
554
|
-
debug_to_log("Safari browser title: [#{title}]")
|
555
|
-
debug_to_log("Closing browser: #{where} (#{lnbr})")
|
556
|
-
close_modal_s # to close any leftover modal dialogs
|
557
|
-
browser.close
|
558
|
-
end
|
559
|
-
when 'C', 'GC'
|
560
|
-
if is_browser?(browser)
|
561
|
-
url = browser.url
|
562
|
-
title = browser.title
|
563
|
-
debug_to_log("Chrome browser url: [#{url}]")
|
564
|
-
debug_to_log("Chrome browser title: [#{title}]")
|
565
|
-
debug_to_log("Closing browser: #{where} (#{lnbr})")
|
566
|
-
if url and url.length > 1
|
567
|
-
browser.close
|
568
|
-
end
|
564
|
+
if $mobile
|
565
|
+
browser.close
|
566
|
+
sleep(1)
|
567
|
+
end_android_processes if $platform == :android
|
568
|
+
clean_up_android_temp unless $device
|
569
569
|
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
570
|
+
else
|
571
|
+
browser.close
|
572
|
+
# case @browserAbbrev
|
573
|
+
# when 'FF'
|
574
|
+
# if is_browser?(browser)
|
575
|
+
# debug_to_log("#{__method__}: Firefox browser url: [#{url}]")
|
576
|
+
# debug_to_log("#{__method__}: Firefox browser title: [#{title}]")
|
577
|
+
# debug_to_log("#{__method__}: Closing browser: #{where} (#{lnbr})")
|
578
|
+
# if url and url.length > 1
|
579
|
+
# browser.close
|
580
|
+
# else
|
581
|
+
# browser = FireWatir::Firefox.attach(:title, title)
|
582
|
+
# browser.close
|
583
|
+
# end
|
584
|
+
#
|
585
|
+
# end
|
586
|
+
# when 'IE'
|
587
|
+
# if is_browser?(browser)
|
588
|
+
# debug_to_log("#{__method__}: Internet Explorer browser url: [#{url}]")
|
589
|
+
# debug_to_log("#{__method__}: Internet Explorer browser title: [#{title}]")
|
590
|
+
# debug_to_log("#{__method__}: Closing browser: #{where} (#{lnbr})")
|
591
|
+
# browser.close
|
592
|
+
# end
|
593
|
+
# when 'S'
|
594
|
+
# if is_browser?(browser)
|
595
|
+
# url = browser.url
|
596
|
+
# title = browser.title
|
597
|
+
# debug_to_log("Safari browser url: [#{url}]")
|
598
|
+
# debug_to_log("Safari browser title: [#{title}]")
|
599
|
+
# debug_to_log("Closing browser: #{where} (#{lnbr})")
|
600
|
+
# # close_modal_s # to close any leftover modal dialogs
|
601
|
+
# browser.close
|
602
|
+
# end
|
603
|
+
# when 'C', 'GC'
|
604
|
+
# if is_browser?(browser)
|
605
|
+
# url = browser.url
|
606
|
+
# title = browser.title
|
607
|
+
# debug_to_log("Chrome browser url: [#{url}]")
|
608
|
+
# debug_to_log("Chrome browser title: [#{title}]")
|
609
|
+
# debug_to_log("Closing browser: #{where} (#{lnbr})")
|
610
|
+
# if url and url.length > 1
|
611
|
+
# browser.close
|
612
|
+
# end
|
613
|
+
#
|
614
|
+
# end
|
615
|
+
# else
|
616
|
+
# raise "Unsupported browser: '#{@browserAbbrev}'"
|
617
|
+
# end
|
574
618
|
end
|
575
619
|
rescue
|
576
620
|
failed_to_log(unable_to)
|
577
621
|
end
|
578
622
|
|
579
|
-
|
623
|
+
def report_browser_message(browser)
|
624
|
+
if browser.title =~ /^\d+\s/
|
625
|
+
failed_to_log(browser.title)
|
626
|
+
message_to_report(browser.text)
|
627
|
+
end
|
628
|
+
end
|
580
629
|
|
581
|
-
# Close a browser
|
582
|
-
# @param [Watir::Browser]
|
583
|
-
def
|
584
|
-
if is_browser?(
|
585
|
-
url =
|
630
|
+
# Close a browser window, usually a child window. Does not apply to modal popups/alerts.
|
631
|
+
# @param [Watir::Browser] window Reference to the browser window to be closed
|
632
|
+
def close_window(window)
|
633
|
+
if is_browser?(window)
|
634
|
+
url = window.url
|
586
635
|
debug_to_log("Closing popup '#{url}' ")
|
587
|
-
|
588
|
-
|
636
|
+
if $using_webdriver
|
637
|
+
window.driver.switch_to.window(window.driver.window_handles[0])
|
638
|
+
window.window(:url, url).close
|
639
|
+
else
|
640
|
+
window.close
|
641
|
+
end
|
589
642
|
end
|
590
643
|
end
|
591
644
|
|
645
|
+
alias close_new_window_popup close_window
|
646
|
+
alias close_child_window close_window
|
647
|
+
|
592
648
|
# Close an HTML panel or division by clicking a link within it identified by the *:text* value of the link.
|
593
649
|
# @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
|
594
650
|
# @param [Watir::Browser] panel Reference to the panel (usually a div element) to be closed
|
595
|
-
|
651
|
+
# @param [Symbol] element The kind of element to click. Must be one of the elements recognized by Watir.
|
652
|
+
# Some common values are :link, :button, :image, :div, :span.
|
653
|
+
# @param [Symbol] how The element attribute used to identify the specific element.
|
654
|
+
# Valid values depend on the kind of element.
|
655
|
+
# Common values: :text, :id, :title, :name, :class, :href (:link only)
|
656
|
+
# @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
|
657
|
+
def close_panel(browser, panel, element, how, what, desc = '')
|
658
|
+
msg = "Close panel with #{element} '#{how}'=>'#{what}' #{desc}"
|
596
659
|
if validate(browser, @myName, __LINE__)
|
597
|
-
if
|
598
|
-
panel.link(:text, what).click!
|
599
|
-
elsif $USE_FIREWATIR
|
660
|
+
if $using_webdriver
|
600
661
|
begin
|
601
|
-
panel.
|
662
|
+
panel.element(how, what).click
|
602
663
|
rescue => e
|
603
|
-
unless rescue_me(e, __method__, rescue_me_command(:link,
|
664
|
+
unless rescue_me(e, __method__, rescue_me_command(:link, how, what, :click), "#{panel.class}")
|
604
665
|
raise e
|
605
666
|
end
|
606
667
|
end
|
607
668
|
else
|
608
|
-
panel.
|
669
|
+
panel.element(how, what).click!
|
609
670
|
end
|
610
671
|
sleep_for(1)
|
611
|
-
|
612
|
-
|
613
|
-
true
|
614
|
-
end
|
672
|
+
passed_to_log(msg)
|
673
|
+
true
|
615
674
|
else
|
616
|
-
failed_to_log(
|
675
|
+
failed_to_log(unable_to(msg))
|
617
676
|
end
|
618
677
|
rescue
|
619
|
-
failed_to_log(
|
678
|
+
failed_to_log(unable_to(msg))
|
620
679
|
end
|
621
680
|
|
622
681
|
#def close_modal_ie(title, button = "OK", text = '', side = 'primary', wait = WAIT, desc = '', quiet = false)
|
@@ -726,31 +785,21 @@ module Awetestlib
|
|
726
785
|
# @param [String] side A string identifying which mouse button to click.
|
727
786
|
# @param [Fixnum] wait Number of seconds to wait for the popup to be seen.
|
728
787
|
def close_modal(browser, title="", button="OK", text='', side = 'primary', wait = WAIT)
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
788
|
+
if $using_webdriver
|
789
|
+
case button
|
790
|
+
when /^OK$/i, /^Yes$/i
|
791
|
+
browser.alert.ok
|
792
|
+
else
|
793
|
+
browser.alert.dismiss
|
794
|
+
end
|
795
|
+
else
|
796
|
+
close_modal_ie(browser, title, button, text, side, wait)
|
738
797
|
end
|
798
|
+
rescue
|
799
|
+
failed_to_log(unable_to)
|
739
800
|
end
|
740
801
|
|
741
|
-
|
742
|
-
# Close a Chrome modal popup by :url.
|
743
|
-
def close_modal_c(browser, url)
|
744
|
-
browser.window(:url, url).close
|
745
|
-
end
|
746
|
-
|
747
|
-
# TODO: Logging
|
748
|
-
# Close a Safari modal popup by closing the frontmost Safari dialog. Mac OSX only.
|
749
|
-
def close_modal_s
|
750
|
-
# simply closes the frontmost Safari dialog
|
751
|
-
Appscript.app("Safari").activate
|
752
|
-
Appscript.app("System Events").processes["Safari"].key_code(52)
|
753
|
-
end
|
802
|
+
alias close_alert close_modal
|
754
803
|
|
755
804
|
# Close an IE modal popup by its title using AutoItX3. Windows only.
|
756
805
|
# @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
|
@@ -915,7 +964,7 @@ module Awetestlib
|
|
915
964
|
|
916
965
|
controlHandle = @ai.ControlGetHandle(window_handle, '', "[CLASS:Button; TEXT:#{button}]")
|
917
966
|
if not controlHandle
|
918
|
-
|
967
|
+
# button = "&#{button}"
|
919
968
|
controlHandle = @ai.ControlGetHandle(window_handle, '', "[CLASS:Button; TEXT:&#{button}]")
|
920
969
|
end
|
921
970
|
|
@@ -965,46 +1014,12 @@ module Awetestlib
|
|
965
1014
|
|
966
1015
|
end
|
967
1016
|
|
968
|
-
# Return a reference to an IE browser window based on one of its attributes.
|
969
|
-
# @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
|
970
|
-
# @param [Symbol] how The element attribute used to identify the window: :url, :title, or :hwnd.
|
971
|
-
# @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
|
972
|
-
# @param [String] desc Contains a message or description intended to appear in the log and/or report output
|
973
|
-
# @return [Watir::IE] A reference to the popup.
|
974
|
-
def find_popup(browser, how, what, desc = '')
|
975
|
-
msg = "Find popup :#{how}=>'#{what}'. #{desc}"
|
976
|
-
popup = Watir::IE.find(how, what) # TODO: too browser specific
|
977
|
-
sleep_for(1)
|
978
|
-
debug_to_log("#{popup.inspect}")
|
979
|
-
if is_browser?(popup)
|
980
|
-
# title = popup.title
|
981
|
-
passed_to_log(msg)
|
982
|
-
return popup
|
983
|
-
else
|
984
|
-
failed_to_log(msg)
|
985
|
-
end
|
986
|
-
rescue
|
987
|
-
failed_to_log("Unable to find popup :#{how}=>'#{what}'. #{desc} '#{$!}' (#{__LINE__})")
|
988
|
-
end
|
989
|
-
|
990
1017
|
# Confirm that the object passed in *browser* is actually a Browser object.
|
991
1018
|
# @param [Watir::Browser] browser A reference to the window or container element to be tested.
|
992
1019
|
def is_browser?(browser)
|
993
|
-
|
994
|
-
case @targetBrowser.abbrev
|
995
|
-
when 'IE'
|
996
|
-
myClass =~ /Watir::IE|Watir::Browser/i
|
997
|
-
when 'FF'
|
998
|
-
myClass =~ /Watir::Browser/i
|
999
|
-
when 'S'
|
1000
|
-
myClass =~ /Watir::Browser/i
|
1001
|
-
when 'C'
|
1002
|
-
myClass =~ /Watir::Browser/i
|
1003
|
-
end
|
1020
|
+
browser.class.to_s =~ /Watir::Browser/i
|
1004
1021
|
end
|
1005
1022
|
|
1006
|
-
alias is_browser is_browser?
|
1007
|
-
|
1008
1023
|
# Translate window title supplied in *title* to a title appropriate for the targeted browser and version
|
1009
1024
|
# actually being run.
|
1010
1025
|
# Used primarily for handling of modal popups and dialogs.
|
@@ -1014,8 +1029,8 @@ module Awetestlib
|
|
1014
1029
|
new_title = title
|
1015
1030
|
case @browserAbbrev
|
1016
1031
|
when 'IE'
|
1017
|
-
if @
|
1018
|
-
case @
|
1032
|
+
if @actualBrowser.version
|
1033
|
+
case @actualBrowser.version
|
1019
1034
|
when '8.0'
|
1020
1035
|
case title
|
1021
1036
|
when "Microsoft Internet Explorer"
|
@@ -1078,12 +1093,11 @@ module Awetestlib
|
|
1078
1093
|
# Identify the exact version of the Browser currently being executed.
|
1079
1094
|
# @todo Bring up to date with newer browser versions
|
1080
1095
|
# @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
|
1081
|
-
def
|
1082
|
-
debug_to_log("starting get_browser_version")
|
1096
|
+
def browser_version(browser)
|
1083
1097
|
case @targetBrowser.abbrev
|
1084
1098
|
when 'IE'
|
1085
|
-
@browserAbbrev
|
1086
|
-
@browserName
|
1099
|
+
@browserAbbrev = 'IE'
|
1100
|
+
@browserName = 'Internet Explorer'
|
1087
1101
|
if $watir_script
|
1088
1102
|
@browserAppInfo = browser.document.invoke('parentWindow').navigator.appVersion
|
1089
1103
|
else
|
@@ -1094,37 +1108,55 @@ module Awetestlib
|
|
1094
1108
|
when 'FF'
|
1095
1109
|
@browserAbbrev = 'FF'
|
1096
1110
|
@browserName = 'Firefox'
|
1097
|
-
@browserVersion = '6.01' #TODO: get actual version from browser
|
1098
1111
|
@browserAppInfo = browser.execute_script("return navigator.userAgent;")
|
1099
|
-
|
1112
|
+
@browserAppInfo =~ /Firefox\/([\d\.]+)/
|
1113
|
+
@browserVersion = $1
|
1100
1114
|
when 'S'
|
1101
1115
|
@browserAbbrev = 'S'
|
1102
1116
|
@browserName = 'Safari'
|
1103
|
-
@browserVersion = '5.0.4' #TODO: get actual version from browser itself
|
1104
1117
|
@browserAppInfo = browser.execute_script("return navigator.userAgent;")
|
1105
|
-
|
1106
|
-
when 'C'
|
1107
|
-
@browserAbbrev = '
|
1118
|
+
@browserVersion = '6.0' #TODO: get actual version from browser itself
|
1119
|
+
when 'C', 'GC'
|
1120
|
+
@browserAbbrev = 'GC'
|
1108
1121
|
@browserName = 'Chrome'
|
1109
|
-
@browserVersion = '11.0' #TODO: get actual version from browser
|
1110
1122
|
@browserAppInfo = browser.execute_script("return navigator.userAgent;")
|
1111
|
-
|
1123
|
+
@browserAppInfo =~ /Chrome\/([\d\.]+)/
|
1124
|
+
@browserVersion = $1
|
1125
|
+
else
|
1126
|
+
@browserAbbrev = @targetBrowser.abbrev
|
1127
|
+
@browserAppInfo = browser.execute_script("return navigator.userAgent;")
|
1128
|
+
|
1112
1129
|
end
|
1130
|
+
debug_to_report("#{@browserName}, @browserAppInfo: (#{@browserAppInfo})")
|
1131
|
+
debug_to_log("#{browser.driver.capabilities.to_yaml}")
|
1132
|
+
|
1133
|
+
@browserVersion # = browser.driver.capabilities.version
|
1113
1134
|
rescue
|
1114
|
-
|
1135
|
+
failed_to_log(unable_to)
|
1115
1136
|
ensure
|
1116
|
-
|
1137
|
+
message_to_report("Browser: [#{@browserName} (#{@browserAbbrev}) #{@browserVersion}]")
|
1117
1138
|
end
|
1118
1139
|
|
1140
|
+
alias get_browser_version browser_version
|
1141
|
+
|
1142
|
+
|
1119
1143
|
protected :get_browser_version
|
1120
1144
|
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1145
|
+
def get_viewport_to_win_diff(browser)
|
1146
|
+
window_width = browser.window.size.width.to_f
|
1147
|
+
body_width = browser.body.style("width")
|
1148
|
+
body_width = body_width.to_f
|
1149
|
+
(window_width - body_width).to_i
|
1150
|
+
end
|
1151
|
+
|
1152
|
+
def calc_window_size(browser, bpsize)
|
1153
|
+
diff = get_viewport_to_win_diff(browser)
|
1154
|
+
if @targetBrowser.abbrev == 'C'
|
1155
|
+
new_size = bpsize + diff -1
|
1156
|
+
elsif @targetBrowser.abbrev == 'FF'
|
1157
|
+
new_size = bpsize + diff -16
|
1158
|
+
end
|
1159
|
+
end
|
1128
1160
|
|
1129
1161
|
# @!group Browser
|
1130
1162
|
|
@@ -1151,24 +1183,24 @@ module Awetestlib
|
|
1151
1183
|
# @param [Boolean] dbg If set to true additional debug messages are written to the log.
|
1152
1184
|
#
|
1153
1185
|
# @return [Boolean] True if no error conditions have been encountered.
|
1154
|
-
def validate(browser, file_name = @myName, lnbr =
|
1186
|
+
def validate(browser, file_name = @myName, lnbr = '', dbg = false)
|
1155
1187
|
debug_to_log("#{__method__} begin") if dbg
|
1156
|
-
msg
|
1157
|
-
|
1188
|
+
msg = ''
|
1189
|
+
ok = true
|
1158
1190
|
if not browser
|
1159
|
-
msg
|
1160
|
-
|
1191
|
+
msg = "browser is nil object."
|
1192
|
+
ok = false
|
1193
|
+
|
1161
1194
|
elsif not browser.class.to_s =~ /Watir/
|
1162
|
-
msg = "
|
1195
|
+
msg = "not a Watir object."
|
1163
1196
|
debug_to_log(browser.inspect)
|
1164
|
-
|
1197
|
+
ok = false
|
1165
1198
|
|
1166
1199
|
else
|
1167
1200
|
if browser.respond_to?(:url)
|
1168
1201
|
if not browser.url == @currentURL
|
1169
1202
|
@currentURL = browser.url
|
1170
|
-
debug_to_log("Current URL: [#{@currentURL}]")
|
1171
|
-
# mark_testlevel( "Current URL: [#{@currentURL}]", 1 )
|
1203
|
+
debug_to_log(with_caller("Current URL: [#{@currentURL}]"))
|
1172
1204
|
end
|
1173
1205
|
end
|
1174
1206
|
|
@@ -1182,7 +1214,8 @@ module Awetestlib
|
|
1182
1214
|
end
|
1183
1215
|
|
1184
1216
|
begin
|
1185
|
-
browser_text
|
1217
|
+
browser_text = browser.text.downcase
|
1218
|
+
browser_title = browser.title
|
1186
1219
|
rescue => e
|
1187
1220
|
unless rescue_me(e, __method__, "browser.text.downcase", "#{browser.class}", browser)
|
1188
1221
|
debug_to_log("browser.text.downcase in #{__method__} #{browser.class}")
|
@@ -1195,111 +1228,111 @@ module Awetestlib
|
|
1195
1228
|
|
1196
1229
|
if browser_text
|
1197
1230
|
if browser_text.match(/unrecognized error condition has occurred/i)
|
1198
|
-
|
1199
|
-
|
1231
|
+
error = "Unrecognized Exception occurred."
|
1232
|
+
ok = false
|
1200
1233
|
|
1201
1234
|
elsif browser_text.match(/cannot find server or dns error/i)
|
1202
|
-
|
1203
|
-
|
1235
|
+
error = "Cannot find server error or DNS error."
|
1236
|
+
ok = false
|
1204
1237
|
|
1205
1238
|
elsif browser_text.match(/the rpc server is unavailable/i)
|
1206
|
-
|
1207
|
-
|
1239
|
+
error = "RPC server unavailable."
|
1240
|
+
ok = false
|
1208
1241
|
|
1209
1242
|
elsif browser_text.match(/404 not found/i) or
|
1210
1243
|
browser_text.match(/the page you were looking for does\s*n[o']t exist/i)
|
1211
|
-
|
1212
|
-
|
1244
|
+
error = "RFC 2068 HTTP/1.1: 404 URI Not Found."
|
1245
|
+
ok = false
|
1213
1246
|
|
1214
1247
|
elsif browser_text.match(/we're sorry, but something went wrong/i) or
|
1215
1248
|
browser_text.match(/http status 500/i)
|
1216
|
-
|
1217
|
-
|
1249
|
+
error = "RFC 2068 HTTP/1.1: 500 Internal Server Error."
|
1250
|
+
ok = false
|
1218
1251
|
|
1219
1252
|
elsif browser_text.match(/internet explorer cannot display the webpage/i)
|
1220
|
-
|
1221
|
-
|
1253
|
+
error = "Probably RFC 2068 HTTP/1.1: 500 Internal Server Error."
|
1254
|
+
ok = false
|
1222
1255
|
|
1223
1256
|
elsif browser_text.match(/503.*service unavailable/i)
|
1224
|
-
|
1225
|
-
|
1257
|
+
error = "RFC 2068 HTTP/1.1: 503 Service Unavailable."
|
1258
|
+
ok = false
|
1226
1259
|
|
1227
1260
|
elsif browser_text.match(/java.lang.NullPointerException/i)
|
1228
|
-
|
1229
|
-
|
1261
|
+
error = "java.lang.NullPointerException."
|
1262
|
+
ok = false
|
1230
1263
|
|
1231
1264
|
elsif browser_text.match(/due to unscheduled maintenance/i)
|
1232
|
-
|
1233
|
-
|
1265
|
+
error = "Due to unscheduled maintenance."
|
1266
|
+
ok = false
|
1234
1267
|
|
1235
1268
|
elsif browser_text.match(/network\s+error\s*(.+)$/i)
|
1236
1269
|
$1.chomp!
|
1237
|
-
|
1238
|
-
|
1270
|
+
error = "Network Error #{$1}."
|
1271
|
+
ok = false
|
1239
1272
|
|
1240
1273
|
elsif browser_text.match(/warning: page has expired/i)
|
1241
|
-
|
1242
|
-
|
1274
|
+
error = "Page using information from form has expired. Not automatically resubmitted."
|
1275
|
+
ok = false
|
1243
1276
|
|
1244
1277
|
elsif browser_text.match(/no backend server available/i)
|
1245
|
-
|
1246
|
-
|
1278
|
+
error = "Cannot Reach Server"
|
1279
|
+
ok = false
|
1247
1280
|
|
1248
1281
|
elsif browser_text.match(/sign on\s+.+\s+unsuccessful/i)
|
1249
|
-
|
1250
|
-
|
1282
|
+
error = "Invalid Id or Password"
|
1283
|
+
ok = false
|
1251
1284
|
|
1252
1285
|
elsif browser_text.match(/you are not authorized/i)
|
1253
|
-
|
1254
|
-
|
1286
|
+
error = "Not authorized to view this page."
|
1287
|
+
ok = false
|
1255
1288
|
|
1256
1289
|
elsif browser_text.match(/too many incorrect login attempts have been made/i)
|
1257
|
-
|
1258
|
-
|
1290
|
+
error = "Invalid Id or Password. Too many tries."
|
1291
|
+
ok = false
|
1259
1292
|
|
1260
1293
|
elsif browser_text.match(/system error\.\s+an error has occurred/i)
|
1261
|
-
|
1262
|
-
|
1294
|
+
error = "System Error. An error has occurred. Please try again or call the Help Line for assistance."
|
1295
|
+
ok = false
|
1263
1296
|
|
1264
1297
|
elsif browser_text.match(/Internal Server failure,\s+NSAPI plugin/i)
|
1265
|
-
|
1266
|
-
|
1298
|
+
error = "Internal Server failure, NSAPI plugin."
|
1299
|
+
ok = false
|
1267
1300
|
|
1268
1301
|
elsif browser_text.match(/Error Page/i)
|
1269
|
-
|
1270
|
-
|
1302
|
+
error = "Error Page."
|
1303
|
+
ok = false
|
1271
1304
|
|
1272
1305
|
elsif browser_text.match(/The website cannot display the page/i)
|
1273
|
-
|
1274
|
-
|
1306
|
+
error = "HTTP 500."
|
1307
|
+
ok = false
|
1275
1308
|
|
1276
1309
|
# elsif browser_text.match(/Insufficient Data/i)
|
1277
|
-
#
|
1278
|
-
#
|
1310
|
+
# error = "Insufficient Data."
|
1311
|
+
# ok = false
|
1279
1312
|
|
1280
1313
|
elsif browser_text.match(/The timeout period elapsed/i)
|
1281
|
-
|
1282
|
-
|
1314
|
+
error = "Time out period elapsed or server not responding."
|
1315
|
+
ok = false
|
1283
1316
|
|
1284
1317
|
elsif browser_text.match(/Unexpected\s+errors*\s+occur+ed\.\s+(?:-+)\s+(.+)/i)
|
1285
|
-
|
1318
|
+
error = "Unexpected errors occurred. #{$2.slice(0, 120)}"
|
1286
1319
|
if not browser_text.match(/close the window and try again/i)
|
1287
|
-
|
1320
|
+
ok = false
|
1288
1321
|
else
|
1289
|
-
debug_to_log("#{
|
1322
|
+
debug_to_log(with_caller(filename, '----', error, "(#{browser.url})"))
|
1290
1323
|
end
|
1291
1324
|
|
1292
1325
|
elsif browser_text.match(/Server Error in (.+) Application\.\s+(?:-+)\s+(.+)/i)
|
1293
|
-
|
1294
|
-
|
1326
|
+
error = "Server Error in #{1} Application. #{$2.slice(0, 100)}"
|
1327
|
+
ok = false
|
1295
1328
|
|
1296
1329
|
elsif browser_text.match(/Server Error in (.+) Application\./i)
|
1297
|
-
|
1298
|
-
|
1330
|
+
error = "Server Error in #{1} Application. '#{browser_text.slice(0, 250)}...'"
|
1331
|
+
ok = false
|
1299
1332
|
|
1300
1333
|
elsif browser_text.match(/An error has occur+ed\. Please contact support/i)
|
1301
|
-
|
1302
|
-
|
1334
|
+
error = "An error has occurred. Please contact support."
|
1335
|
+
ok = false
|
1303
1336
|
|
1304
1337
|
end
|
1305
1338
|
else
|
@@ -1307,28 +1340,104 @@ module Awetestlib
|
|
1307
1340
|
end
|
1308
1341
|
end
|
1309
1342
|
|
1310
|
-
if
|
1311
|
-
|
1343
|
+
if browser_title
|
1344
|
+
if browser_title.match(/page not found/i)
|
1345
|
+
error = "#{browser_title} RFC 2068 HTTP/1.1: 404 URI Not Found."
|
1346
|
+
ok = false
|
1347
|
+
end
|
1348
|
+
end
|
1349
|
+
|
1350
|
+
if not ok
|
1351
|
+
msg = with_caller(file_name, '----', error, "(#{browser.url})")
|
1312
1352
|
puts msg
|
1313
1353
|
debug_to_log(browser.inspect)
|
1314
1354
|
debug_to_log(browser.text)
|
1315
|
-
fatal_to_log(msg
|
1355
|
+
# fatal_to_log(msg)
|
1316
1356
|
raise(RuntimeError, msg, caller)
|
1317
1357
|
else
|
1318
1358
|
debug_to_log("#{__method__} returning OK") if dbg
|
1319
|
-
return
|
1359
|
+
return ok
|
1320
1360
|
end
|
1321
1361
|
|
1322
1362
|
rescue
|
1323
1363
|
errmsg = $!
|
1324
|
-
if errmsg and errmsg.match(msg)
|
1364
|
+
if errmsg and errmsg.message.match(msg)
|
1325
1365
|
errmsg = ''
|
1326
1366
|
end
|
1327
|
-
bail_out(browser,
|
1367
|
+
bail_out(browser, __LINE__, build_message(msg, errmsg))
|
1328
1368
|
end
|
1329
1369
|
|
1330
1370
|
alias validate_browser validate
|
1331
1371
|
|
1372
|
+
def verify_browser_options
|
1373
|
+
browser_name = Awetestlib::BROWSER_MAP[self.browser]
|
1374
|
+
browser_acro = self.browser
|
1375
|
+
ok = true
|
1376
|
+
|
1377
|
+
if $mobile
|
1378
|
+
|
1379
|
+
# REDTAG: correction for Shamisen sending wrong browser acronym.
|
1380
|
+
if self.browser =~ /browser/i
|
1381
|
+
self.browser = 'AB'
|
1382
|
+
browser_name = Awetestlib::BROWSER_MAP[self.browser]
|
1383
|
+
browser_acro = self.browser
|
1384
|
+
end
|
1385
|
+
|
1386
|
+
debug_to_log(with_caller(":#{__LINE__}\n#{self.options.to_yaml}"))
|
1387
|
+
|
1388
|
+
parse_environment_node_for_mobile
|
1389
|
+
|
1390
|
+
debug_to_log(with_caller(":#{__LINE__}\n#{self.options.to_yaml}"))
|
1391
|
+
|
1392
|
+
case browser_acro
|
1393
|
+
when 'FF', 'IE', 'S', 'GC', 'C', 'ED', 'O'
|
1394
|
+
failed_to_log("#{browser_acro} (#{browser_name}) is not a valid mobile browser.")
|
1395
|
+
ok = false
|
1396
|
+
when 'IS', 'MS', 'IC', 'MC'
|
1397
|
+
if self.sdk
|
1398
|
+
self.device_type = 'iOS Simulator'
|
1399
|
+
self.options[:device_type] = 'iOS Simulator'
|
1400
|
+
elsif self.device_id
|
1401
|
+
self.device_type = 'iOS Device'
|
1402
|
+
self.options[:device_type] = 'iOS Device'
|
1403
|
+
else
|
1404
|
+
failed_to_log(with_caller("Must supply either sdk or device id for iOS."))
|
1405
|
+
ok = false
|
1406
|
+
end
|
1407
|
+
when 'AC', 'AB'
|
1408
|
+
if self.emulator
|
1409
|
+
self.device_type = 'Android Emulator'
|
1410
|
+
self.options[:device_type] = 'Android Emulator'
|
1411
|
+
elsif self.device_id
|
1412
|
+
self.device_type = 'Android Device'
|
1413
|
+
self.options[:device_type] = 'Android Device'
|
1414
|
+
if self.sdk
|
1415
|
+
self.options[:sdk] = self.sdk
|
1416
|
+
else
|
1417
|
+
failed_to_log(with_caller("Must supply sdk for Android device."))
|
1418
|
+
ok = false
|
1419
|
+
end
|
1420
|
+
else
|
1421
|
+
failed_to_log(with_caller("Must supply either emulator or device id for Android."))
|
1422
|
+
ok = false
|
1423
|
+
end
|
1424
|
+
when 'ME', 'MI'
|
1425
|
+
failed_to_log(with_caller("#{browser_acro} (#{browser_name}) is not yet supported."))
|
1426
|
+
ok = false
|
1427
|
+
else
|
1428
|
+
failed_to_log(with_caller("'#{browser_acro}' is not a valid browser code."))
|
1429
|
+
ok = false
|
1430
|
+
end
|
1431
|
+
else
|
1432
|
+
ok = true
|
1433
|
+
end
|
1434
|
+
debug_to_log(with_caller(":#{__LINE__}\n#{self.options.to_yaml}"))
|
1435
|
+
|
1436
|
+
ok
|
1437
|
+
rescue
|
1438
|
+
failed_to_log(unable_to)
|
1439
|
+
end
|
1440
|
+
|
1332
1441
|
# @!endgroup Error Handling
|
1333
1442
|
|
1334
1443
|
# @!group Backward compatible usages
|
@@ -1343,7 +1452,7 @@ module Awetestlib
|
|
1343
1452
|
# @param [String] desc Contains a message or description intended to appear in the log and/or report output
|
1344
1453
|
# @return [Watir::Browser]
|
1345
1454
|
def attach_browser_by_url(browser, what, desc = '')
|
1346
|
-
|
1455
|
+
attach(browser, :url, what, desc)
|
1347
1456
|
end
|
1348
1457
|
|
1349
1458
|
alias attach_browser_with_url attach_browser_by_url
|
@@ -1352,14 +1461,14 @@ module Awetestlib
|
|
1352
1461
|
# which can then be passed to methods that require a *browser* parameter. Calls attach_browser().
|
1353
1462
|
# @param (see #attach_browser_by_url)
|
1354
1463
|
def attach_popup_by_title(browser, what, desc = '')
|
1355
|
-
|
1464
|
+
attach(browser, :title, what, desc)
|
1356
1465
|
end
|
1357
1466
|
|
1358
1467
|
# Returns a reference to a new browser window identified by its *:url* attribute. Used to attach a new browser window to a variable
|
1359
1468
|
# which can then be passed to methods that require a *browser* parameter. Calls attach_browser().
|
1360
1469
|
# @param (see #attach_browser_by_url)
|
1361
1470
|
def attach_popup_by_url(browser, what, desc = '')
|
1362
|
-
|
1471
|
+
attach(browser, :url, what, desc)
|
1363
1472
|
end
|
1364
1473
|
|
1365
1474
|
alias get_popup_with_url attach_popup_by_url
|
@@ -1368,12 +1477,20 @@ module Awetestlib
|
|
1368
1477
|
|
1369
1478
|
# Close a popup browser window (non-modal) by clicking on a link with :title *what*.
|
1370
1479
|
# This method does not check to make sure the popup is actually closed.
|
1371
|
-
# @param [Watir::Browser]
|
1480
|
+
# @param [Watir::Browser] browser A reference to the current popup browser window.
|
1372
1481
|
# @param [String, Regexp] what The value in the targeted attribute that uniquely identifies the new window
|
1373
1482
|
# @param [String] desc Contains a message or description intended to appear in the log and/or report output
|
1374
1483
|
# @return [Boolean] True if the click is successful.
|
1375
|
-
def close_popup_by_button_title(
|
1376
|
-
click(
|
1484
|
+
def close_popup_by_button_title(browser, what, desc = '')
|
1485
|
+
click(browser, :link, :title, what, desc)
|
1486
|
+
end
|
1487
|
+
|
1488
|
+
# Close an HTML panel or division by clicking a link within it identified by the *:text* value of the link.
|
1489
|
+
# @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
|
1490
|
+
# @param [Watir::Browser] panel Reference to the panel (usually a div element) to be closed
|
1491
|
+
# @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
|
1492
|
+
def close_panel_by_text(browser, panel, what = 'Close', desc = '')
|
1493
|
+
close_panel(browser, panel, :link, :text, what, desc)
|
1377
1494
|
end
|
1378
1495
|
|
1379
1496
|
# @!endgroup Backward
|