awetestlib 0.1.29 → 0.1.30pre1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -67,3 +67,4 @@ dump.rdb
67
67
  config/settings.yml
68
68
  PROJECT_NAME
69
69
  *.log
70
+ awetest_reports/
data/bin/awetestlib CHANGED
@@ -1,6 +1,11 @@
1
1
  $: << "./lib"
2
+
3
+ $base_time = Time.now
4
+ $load_times = Hash.new
5
+ $capture_load_times = true
6
+
2
7
  require File.join(File.dirname(__FILE__),"awetestlib-helpers")
3
- require 'fileutils'
8
+ require 'fileutils' #: load_time
4
9
 
5
10
  cmd = ARGV[0]
6
11
 
@@ -30,8 +35,8 @@ elsif cmd == 'driver_setup'
30
35
  awetestlib_driver_setup
31
36
  else
32
37
 
33
- require 'optparse'
34
- require 'awetestlib'
38
+ require 'optparse' #; load_time('optparse')
39
+ require 'awetestlib' #; load_time
35
40
 
36
41
  options = { }
37
42
  OptionParser.new do |opts|
@@ -77,12 +82,18 @@ OptionParser.new do |opts|
77
82
  opts.on("-o", "--output_to_log", "Write to log file") do
78
83
  options[:output_to_log] = true
79
84
  end
85
+ opts.on("-c", "--classic_watir", "Use Classic Watir for IE instead of Watir-webdriver") do
86
+ options[:classic_watir] = true
87
+ end
80
88
  opts.on("", "--log_path_subdir LOG_PATH_SUBDIR", "Specify log path relative to root_path.") do |log_path_subdir|
81
89
  options[:log_path_subdir] = log_path_subdir
82
90
  end
83
91
  opts.on("", "--report_all_test_refs REPORT_ALL_TEST_REFS", "Include list of all error/test case reference ids actually validated.") do
84
92
  options[:report_all_test_refs] = true
85
93
  end
94
+ opts.on("", "--capture_load_times CAPTURE_LOAD_TIMES", "Capture load time for gem requires.") do
95
+ options[:capture_load_times] = true
96
+ end
86
97
 
87
98
  end.parse!
88
99
 
@@ -92,6 +103,10 @@ options[:environment]["url"] = options[:environment_url]
92
103
  options[:environment]["nodename"] = options[:environment_nodename]
93
104
  check_script_type(options)
94
105
 
106
+ $watir_script = options[:classic_watir]
107
+ $capture_load_times = options[:capture_load_times] unless $capture_load_times
108
+
109
+
95
110
  IS_WIN_2008 = File.exists?("config/win2008.txt")
96
111
  Awetestlib::Runner.new(options)
97
112
 
@@ -40,3 +40,22 @@ def check_script_type(options)
40
40
  options[:script_file] = ARGV[0]
41
41
  end
42
42
  end
43
+
44
+ def load_time(what = nil, time = Time.now)
45
+ if $capture_load_times
46
+ caller = Kernel.caller
47
+ called = $"
48
+ unless what
49
+ what = "#{caller[0]} => #{called[called.length - 1]}"
50
+ end
51
+ elapsed = time - $base_time
52
+ msg = "#{what} #{sprintf('%.4f', elapsed)}"
53
+ $load_times[time.to_f] = msg
54
+ begin
55
+ debug_to_report("#{time.to_f}: #{msg}")
56
+ rescue
57
+ puts("#{time.to_f}: #{msg}")
58
+ end
59
+ $base_time = time
60
+ end
61
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/lib/awetestlib.rb CHANGED
@@ -27,13 +27,13 @@ module Awetestlib
27
27
  #require 'active_support/inflector'
28
28
  #require 'active_support/core_ext/object'
29
29
  #require 'active_support/core_ext/hash'
30
- require 'awetestlib/runner'
31
- require 'andand'
32
- require 'awetestlib/regression/runner'
33
- require 'pry'
30
+ require 'awetestlib/runner' #; load_time
31
+ require 'andand' #; load_time
32
+ require 'awetestlib/regression/runner' #; load_time
33
+ require 'pry' #; load_time
34
34
 
35
35
  if USING_OSX
36
- require 'appscript'
36
+ require 'appscript' #; load_time
37
37
  end
38
38
 
39
39
  #require 'roo' #moved to awetestlib runner
@@ -5,7 +5,7 @@ module Awetestlib
5
5
  # Initialize the report class
6
6
  # @private
7
7
  def initialize(report_name)
8
- @reportname = report_name
8
+ @reportname = report_name
9
9
  @reportContent1 = ''
10
10
  @reportContent2 = ''
11
11
  end
@@ -16,13 +16,17 @@ module Awetestlib
16
16
  # Get current time
17
17
  t = Time.now
18
18
 
19
+ @col_1_p = '65%'
20
+ @col_2_p = '25%'
21
+ @col_3_p = '10%'
22
+
19
23
  # Create the report name
20
- strTime = "#{t.strftime("%Y%m%d_%H%M%S")}"
21
- strNiceTime = "#{t.strftime("%m/%d/%Y @ %H:%M:%S")}"
22
- strTotalReport = "#{reportName}_#{strTime}.html"
24
+ rpt_time = "#{t.strftime("%Y%m%d_%H%M%S")}"
25
+ rpt_nice_time = "#{t.strftime("%m/%d/%Y @ %H:%M:%S")}"
26
+ rpt_file_name = "#{reportName}_#{rpt_time}.html"
23
27
 
24
28
  # Create the HTML report
25
- strFile = File.open(strTotalReport, 'w')
29
+ rpt_file = File.open(rpt_file_name, 'w')
26
30
 
27
31
  # Format the header of the HTML report
28
32
  @reportContent1 = '<html>
@@ -31,19 +35,22 @@ module Awetestlib
31
35
  <title>Awetestlib Test Run</title>
32
36
  <style type=text/css>
33
37
  .title { font-family: verdana; font-size: 30px; font-weight: bold; align: left; color: #000000;}
34
- .bold_text { font-family: verdana; font-size: 12px; font-weight: bold;}
35
- .bold_large_text { font-family: verdana; font-size: 13px; font-weight: bold;}
36
- .normal_text { font-family: verdana; font-size: 12px; font-weight: normal;}
37
- .small_text { font-family: verdana; font-size: 10px; font-weight: normal; }
38
+ .bold_text { font-family: verdana; font-size: 11px; font-weight: bold;}
39
+ .bold_large_text { font-family: verdana; font-size: 12px; font-weight: bold;}
40
+ .normal_text { font-family: verdana; font-size: 11px; font-weight: normal;}
41
+ .center_text { font-family: verdana; font-size: 11px; font-weight: normal; text-align: center;}
42
+ .small_text { font-family: verdana; font-size: 9px; font-weight: normal; }
38
43
  .border { border: 1px solid #000000;}
39
44
  .mark_testlevel_left { border-top: 1px solid #858585; border-left: 1px solid #858585;background-color:#E2F4FE;}
45
+ .mark_testlevel_middle { border-top: 1px solid #858585; background-color:#E2F4FE;}
40
46
  .mark_testlevel_right { border-top: 1px solid #858585; border-right: 1px solid #858585;background-color:#E2F4FE;}
41
47
  .border_left { border-top: 1px solid #858585; border-left: 1px solid #858585; border-right: 1px solid #858585;}
48
+ .border_middle { border-top: 1px solid #858585; border-right: 1px solid #858585;}
42
49
  .border_right { border-top: 1px solid #858585; border-right: 1px solid #858585;}
43
- .result_ok { font-family: verdana; font-size: 12px; font-weight: bold; text-align: center; color: green;}
44
- .result_nok { font-family: verdana; font-size: 12px; font-weight: bold; text-align: center; color: red;}
45
- .overall_ok { font-family: verdana; font-size: 12px; font-weight: bold; text-align: left; color: green;}
46
- .overall_nok { font-family: verdana; font-size: 12px; font-weight: bold; text-align: left; color: red;}
50
+ .result_ok { font-family: verdana; font-size: 11px; font-weight: bold; text-align: center; color: green;}
51
+ .result_nok { font-family: verdana; font-size: 11px; font-weight: bold; text-align: center; color: red;}
52
+ .overall_ok { font-family: verdana; font-size: 11px; font-weight: bold; text-align: left; color: green;}
53
+ .overall_nok { font-family: verdana; font-size: 11px; font-weight: bold; text-align: left; color: red;}
47
54
  .bborder_left { border-top: 1px solid #858585; border-left: 1px solid #858585; border-bottom: 1px solid #858585; background-color:#858585;font-family: verdana; font-size: 12px; font-weight: bold; text-align: center; color: white;}
48
55
  .bborder_right { border-right: 1px solid #858585; background-color:#858585;font-family: verdana; font-size: 12px; font-weight: bold; text-align: center; color: white;}
49
56
  </style>
@@ -51,11 +58,11 @@ module Awetestlib
51
58
  <body>
52
59
  <br>
53
60
  <center>
54
- <table width=800 border=0 cellpadding=2 cellspacing=2>
61
+ <table width=auto border=0 cellpadding=2 cellspacing=2>
55
62
  <tbody>
56
63
  <tr>
57
64
  <td>
58
- <table width=100% border=0 cellpadding=2 cellspacing=2>
65
+ <table width=90% border=0 cellpadding=2 cellspacing=2>
59
66
  <tbody>
60
67
  <tr>
61
68
  <td style=width: 150px;>&nbsp;</td>
@@ -67,17 +74,19 @@ module Awetestlib
67
74
  <br>
68
75
  <hr width=100% class=border size=1px>
69
76
  <center>
70
- <table border=0 width=95% cellpadding=2 cellspacing=2>
77
+ <table border=0 width=100% cellpadding=2 cellspacing=2>
71
78
  <tbody>
72
79
  <tr>
80
+ <td width=10%><p class=normal_text></p></td>
73
81
  <td width=20%><p class=bold_text>Script</p></td>
74
82
  <td width=5%><p class=bold_text>:</p></td>
75
- <td width=75%><p class=normal_text>' + @reportname.capitalize + '</p></td>
83
+ <td width=65%><p class=normal_text>' + @reportname.capitalize + '</p></td>
76
84
  </tr>
77
85
  <tr>
86
+ <td width=10%><p class=normal_text></p></td>
78
87
  <td width=20%><p class=bold_text>Test Execution</p></td>
79
88
  <td width=5%><p class=bold_text>:</p></td>
80
- <td width=75%><p class=normal_text>' + strNiceTime + '</p></td>
89
+ <td width=65%><p class=normal_text>' + rpt_nice_time + '</p></td>
81
90
  </tr>
82
91
  <tr>'
83
92
 
@@ -87,56 +96,78 @@ module Awetestlib
87
96
  </center>
88
97
  <br>
89
98
  <center>
90
- <table width=95% cellpadding=2 cellspacing=0>
99
+ <table width=100% cellpadding=2 cellspacing=0>
91
100
  <tbody>
92
101
  <tr>
93
- <td class=bborder_left width=80%><p>Test Step</p></td>
94
- <td class=bborder_left width=20%><p>Result</p></td>
95
- </tr>'
102
+ <td class=bborder_left width=' + @col_1_p + '><p>Test Step</p></td>
103
+ <td class=bborder_left width=' + @col_2_p + '><p>Location</p></td>
104
+ <td class=bborder_left width=' + @col_3_p + '><p>Result</p></td>
105
+ </tr>' + "\n"
96
106
 
97
107
  # Close the report
98
- strFile.close
108
+ rpt_file.close
99
109
 
100
- return strTotalReport
110
+ return rpt_file_name
101
111
  end
102
112
 
103
113
  # Add a row to the report
104
114
  # @private
105
- def add_to_report(step, result, level = 1)
115
+ def add_to_report(message, location, result, level = 1)
106
116
  # Format the body of the HTML report
107
- if (result == 'PASSED')
108
- @reportContent2 = @reportContent2 + '<tr><td class=border_left width=80%><p class=normal_text>' + step + '</p></td>'
109
- @reportContent2 = @reportContent2 + '<td class=border_right width=20%><p class=result_ok>' + result + '</p></td>'
110
- elsif (result == 'FAILED')
111
- @reportContent2 = @reportContent2 + '<tr><td class=border_left width=80%><p class=normal_text>' + step + '</p></td>'
112
- @reportContent2 = @reportContent2 + '<td class=border_right width=20%><p class=result_nok>' + result + '</p></td>'
113
- elsif level < 1
114
- @reportContent2 = @reportContent2 + '<tr><td class=border_left width=80%><p class=normal_text>' + step + '</p></td>'
115
- @reportContent2 = @reportContent2 + '<td class=border_right width=20%><p class=result_nok>' + result + '</p></td>'
116
- else
117
- @reportContent2 = @reportContent2 + '<tr><td class=mark_testlevel_left width=80%><p class=bold_large_text>' + step + '</p></td>'
118
- @reportContent2 = @reportContent2 + '<td class=mark_testlevel_right width=20%><p class=result_nok>' + result + '</p></td>'
117
+
118
+ left_class = 'border_left'
119
+ right_class = 'border_right'
120
+ pgph_class = 'normal_text'
121
+ loc_class = 'center_text'
122
+ rslt_class = 'result_ok'
123
+ middle_class = 'border_middle'
124
+
125
+ rslt_class = 'result_nok' if result == "FAILED"
126
+ case result
127
+ when 'FAILED'
128
+ rslt_class = 'result_nok'
129
+ when 'PASSED'
130
+ rslt_class = 'result_ok'
131
+ else
132
+ if level
133
+ if level >= 1
134
+ pgph_class = 'bold_large_text'
135
+ left_class = 'mark_testlevel_left'
136
+ middle_class = 'mark_testlevel_middle'
137
+ right_class = 'mark_testlevel_right'
138
+ end
139
+ end
119
140
  end
141
+
142
+ row = '<tr>
143
+ <td class=' + left_class + ' width=' + @col_1_p + '><p class=' + pgph_class + '>' + message + '</p></td>
144
+ <td class=' + middle_class + ' width=' + @col_2_p + '><p class=' + loc_class + '>' + location + '</p></td>
145
+ <td class=' + right_class + ' width=' + @col_3_p + '><p class=' + rslt_class + '>' + result + '</p></td>
146
+ </tr>'
147
+
148
+ @reportContent2 += row + "\n"
149
+
120
150
  end
121
151
 
122
152
  # Close the report HTML
123
153
  # @private
124
154
  def finish_report(reportName)
125
155
  # Open the HTML report
126
- strFile = File.open(reportName, 'a')
156
+ rpt_file = File.open(reportName, 'a')
127
157
 
128
158
  @reportContent2 = @reportContent2 + '<tr>
129
- <td class=bborder_left width=80%><p>&nbsp;</p></td>
130
- <td class=bborder_left width=20%><p>&nbsp;</p></td>
159
+ <td class=bborder_left width=' + @col_1_p + '><p>&nbsp;</p></td>
160
+ <td class=bborder_left width=' + @col_2_p + '><p>&nbsp;</p></td>
161
+ <td class=bborder_left width=' + @col_3_p + '><p>&nbsp;</p></td>
131
162
  </tr>
132
163
  </table>'
133
164
 
134
- strFile.puts(@reportContent1)
165
+ rpt_file.puts(@reportContent1)
135
166
 
136
- strFile.puts(@reportContent2)
167
+ rpt_file.puts(@reportContent2)
137
168
 
138
169
  # Close the report
139
- strFile.close
170
+ rpt_file.close
140
171
  end
141
172
  end
142
173
  end
@@ -99,7 +99,7 @@ module Awetestlib
99
99
  # failed_to_log "SIKULI LOG:\n\n #{output_lines.join('\n')}"
100
100
  # end
101
101
 
102
- return { :result => passed, :msg => output_str }
102
+ return { :result => passed, :msg => output_lines }
103
103
  end
104
104
 
105
105
 
@@ -126,9 +126,9 @@ module Awetestlib
126
126
  end
127
127
  strg << " #{message}" if message.length > 0
128
128
  strg << " (#{desc})" if desc.length > 0
129
- strg << " [#{call_line}]"
129
+ strg << " [#{call_line}]" if dbg or @debug_calls
130
130
  strg << "\n#{list.to_yaml}" if dbg or @debug_calls
131
- @report_class.add_to_report(strg, "&nbsp", lvl || 1) unless Awetestlib::Runner.nil?
131
+ @report_class.add_to_report(strg, "&nbsp", "&nbsp", lvl || 1) unless Awetestlib::Runner.nil?
132
132
  log_message(INFO, strg, lvl, nil, 1)
133
133
  rescue
134
134
  failed_to_log("#{__method__}: #{$!}")
@@ -170,7 +170,7 @@ module Awetestlib
170
170
  message << " \n#{get_debug_list}" if dbg or @debug_calls # and not @debug_calls_fail_only)
171
171
  @my_passed_count += 1 if @my_passed_count
172
172
  parse_error_references(message)
173
- @report_class.add_to_report(message, "PASSED") unless Awetestlib::Runner.nil?
173
+ @report_class.add_to_report(message, get_caller(lnbr), "PASSED") unless Awetestlib::Runner.nil?
174
174
  log_message(INFO, "#{message}", PASS, lnbr)
175
175
  end
176
176
 
@@ -186,7 +186,7 @@ module Awetestlib
186
186
  message << " \n#{get_debug_list}" if dbg.to_s == 'true' or @debug_calls or @debug_calls_fail_only
187
187
  @my_failed_count += 1 if @my_failed_count
188
188
  parse_error_references(message, true)
189
- @report_class.add_to_report("#{message}" + " [#{get_caller(lnbr)}]", "FAILED") unless Awetestlib::Runner.nil?
189
+ @report_class.add_to_report("#{message}", get_caller(lnbr), "FAILED") unless Awetestlib::Runner.nil?
190
190
  log_message(WARN, "#{message}", FAIL, lnbr, nil, exception)
191
191
  end
192
192
 
@@ -202,7 +202,7 @@ module Awetestlib
202
202
  message << " \n#{get_debug_list}" if dbg.to_s == 'true' or (@debug_calls and not @debug_calls_fail_only)
203
203
  @my_failed_count += 1 if @my_failed_count
204
204
  parse_error_references(message, true)
205
- @report_class.add_to_report("#{message}" + " [#{get_caller(lnbr)}]", "FAILED") unless Awetestlib::Runner.nil?
205
+ @report_class.add_to_report("#{message}", get_caller(lnbr), "FAILED") unless Awetestlib::Runner.nil?
206
206
  debug_to_report("#{__method__}:\n#{dump_caller(lnbr)}")
207
207
  log_message(FATAL, "#{message} (#{lnbr})", FAIL, lnbr, nil, exception)
208
208
  end
@@ -40,6 +40,7 @@ module Awetestlib
40
40
 
41
41
  # Open a browser based on the command line parameters that identify the browser and
42
42
  # version to use for the test.
43
+ # @note Safari currently supported only on Mac OS X
43
44
  # @example
44
45
  # browser = open_browser('www.google.com')
45
46
  # @param [String, Regexp] url When provided, the browser will go to this url.
@@ -53,10 +54,13 @@ module Awetestlib
53
54
  @myHwnd = @myBrowser.hwnd
54
55
  end
55
56
  when 'FF'
56
- @myBrowser = open_ff_for_version
57
+ @myBrowser = open_ff
57
58
  when 'S'
58
- aBrowser = Watir::Browser.new :safari
59
- @myBrowser = aBrowser
59
+ if USING_OSX
60
+ @myBrowser = open_safari
61
+ else
62
+ raise "Safari is not supported under this operating system #{RUBY_PLATFORM}"
63
+ end
60
64
  when 'C', 'GC'
61
65
  @myBrowser = open_chrome
62
66
  else
@@ -82,18 +86,16 @@ module Awetestlib
82
86
  browser
83
87
  end
84
88
 
85
- # Open FF (Firefox) browser instance.
86
- # @param [Fixnum] version A number designating the version of the browser to be opened.
87
- # @return [Watir::Browser, Firewatir::Browser]
88
- # Returns Firewatir::Browser if target browser is Firefox version less than 4.0
89
- def open_ff_for_version(version = @targetVersion)
90
- browser = Watir::Browser.new :firefox
89
+ # Open Safari browser instance.
90
+ # @note Safari currently supported only on Mac OS X
91
+ # @return [Watir::Browser]
92
+ def open_safari
93
+ browser = Watir::Browser.new(:remote, :desired_capabilities=>:'safari')
91
94
  end
92
95
 
93
96
  # Open FF (Firefox) browser instance under FireWatir.
94
- # @return [Firewatir::Browser]
97
+ # @return [Watir::Browser]
95
98
  def open_ff
96
- # Watir::Browser.default = 'firefox'
97
99
  browser = Watir::Browser.new :firefox
98
100
  end
99
101
 
@@ -502,17 +504,18 @@ module Awetestlib
502
504
  end
503
505
 
504
506
  # Closes main browser session. Misnamed. Usually used at end of script to shut down browser.
505
- def logout(browser, where = @myName, lnbr = __LINE__)
507
+ def close_browser(browser, where = @myName, lnbr = __LINE__)
506
508
  #TODO Firewatir 1.6.5 does not implement .exists for FireWatir::Firefox class
507
509
  debug_to_log("Logging out in #{where} at line #{lnbr}.", lnbr, true)
508
510
  debug_to_log("#{__method__}: browser: #{browser.inspect} (#{__LINE__})")
509
511
 
512
+ url = browser.url
513
+ title = browser.title
514
+
510
515
  if ['FF', 'S'].include?(@browserAbbrev) || browser.exists?
511
516
  case @browserAbbrev
512
517
  when 'FF'
513
518
  if is_browser?(browser)
514
- url = browser.url
515
- title = browser.title
516
519
  debug_to_log("#{__method__}: Firefox browser url: [#{url}]")
517
520
  debug_to_log("#{__method__}: Firefox browser title: [#{title}]")
518
521
  debug_to_log("#{__method__}: Closing browser: #{where} (#{lnbr})")
@@ -525,16 +528,23 @@ module Awetestlib
525
528
 
526
529
  end
527
530
  when 'IE'
528
- hwnd = browser.hwnd
529
- pid = Watir::IE::Process.process_id_from_hwnd(hwnd)
530
- debug_to_log("#{__method__}: Closing browser: hwnd #{hwnd} pid #{pid} #{where} (#{lnbr}) (#{__LINE__})")
531
- browser.close
532
- if browser.exists? and pid > 0 and pid < 538976288 # value of uninitialized memory location
533
- debug_to_log("Retry close browser: hwnd #{hwnd} pid #{pid} #{where} #{lnbr} (#{__LINE__})")
531
+ debug_to_log("#{__method__}: Internet Explorer browser url: [#{url}]")
532
+ debug_to_log("#{__method__}: Internet Explorer browser title: [#{title}]")
533
+ debug_to_log("#{__method__}: Closing browser: #{where} (#{lnbr})")
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
534
547
  browser.close
535
- end
536
- if browser.exists? and pid > 0 and pid < 538976288 # value of uninitialized memory location
537
- kill_browser(browser.hwnd, __LINE__, browser)
538
548
  end
539
549
  when 'S'
540
550
  if is_browser?(browser)
@@ -555,9 +565,6 @@ module Awetestlib
555
565
  debug_to_log("Closing browser: #{where} (#{lnbr})")
556
566
  if url and url.length > 1
557
567
  browser.close
558
- #else
559
- #browser = FireWatir::Firefox.attach(:title, title)
560
- #browser.close
561
568
  end
562
569
 
563
570
  end
@@ -565,12 +572,12 @@ module Awetestlib
565
572
  raise "Unsupported browser: '#{@browserAbbrev}'"
566
573
  end
567
574
  end
568
- # rescue => e
569
- # if not e.is_a?(Vapir::WindowGoneException)
570
- # raise e
571
- # end
575
+ rescue
576
+ failed_to_log(unable_to)
572
577
  end
573
578
 
579
+ alias logout close_browser
580
+
574
581
  # Close a browser popup window. Does not apply to modal popups.
575
582
  # @param [Watir::Browser] popup Reference to the popup to be closed
576
583
  def close_new_window_popup(popup)