watir 1.8.1 → 1.9.0.rc1

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.
Files changed (53) hide show
  1. data/CHANGES +10 -0
  2. data/VERSION +1 -1
  3. data/lib/watir/container.rb +7 -2
  4. data/lib/watir/core.rb +4 -0
  5. data/lib/watir/dialogs/file_upload.rb +36 -0
  6. data/lib/watir/dialogs/javascript.rb +47 -0
  7. data/lib/watir/element.rb +44 -4
  8. data/lib/watir/frame.rb +15 -2
  9. data/lib/watir/ie-class.rb +42 -18
  10. data/lib/watir/ie.rb +3 -6
  11. data/lib/watir/image.rb +5 -4
  12. data/lib/watir/input_elements.rb +40 -89
  13. data/lib/watir/modal_dialog.rb +6 -0
  14. data/lib/watir/module.rb +0 -23
  15. data/lib/watir/win32.rb +4 -0
  16. data/lib/watir/win32ole.rb +5 -2
  17. data/lib/watir/win32ole/1.8.7/win32ole.so +0 -0
  18. data/rakefile.rb +2 -1
  19. data/unittests/click_no_wait_test.rb +4 -2
  20. data/unittests/close_all_test.rb +1 -1
  21. data/unittests/dialog_test.rb +22 -38
  22. data/unittests/filefield_xpath_test.rb +4 -1
  23. data/unittests/form_test.rb +1 -0
  24. data/unittests/frame_test.rb +17 -1
  25. data/unittests/html/ie_9.html +6 -0
  26. data/unittests/html/iframe.html +3 -0
  27. data/unittests/ie9_test.rb +16 -0
  28. data/unittests/images_test.rb +1 -1
  29. data/unittests/minmax_test.rb +16 -9
  30. data/unittests/no_wait_test.rb +10 -4
  31. data/unittests/setup.rb +0 -13
  32. data/unittests/version_test.rb +15 -0
  33. data/unittests/win32ole_so_test.rb +35 -0
  34. data/unittests/windows/send_keys_test.rb +0 -6
  35. data/watir.gemspec +6 -4
  36. metadata +67 -38
  37. data/lib/watir/AutoItX.chm +0 -0
  38. data/lib/watir/AutoItX3.dll +0 -0
  39. data/lib/watir/WindowHelper.rb +0 -49
  40. data/lib/watir/clickJSDialog.rb +0 -19
  41. data/lib/watir/dialog.rb +0 -46
  42. data/lib/watir/popup.rb +0 -30
  43. data/lib/watir/setFileDialog.rb +0 -16
  44. data/lib/watir/win32ole/win32ole.so +0 -0
  45. data/lib/watir/winClicker.rb +0 -460
  46. data/unittests/other/WindowLogonExample.rb +0 -28
  47. data/unittests/other/WindowLogonExtra.rb +0 -7
  48. data/unittests/other/jscriptExtraAlert.rb +0 -7
  49. data/unittests/other/jscriptExtraConfirmCancel.rb +0 -7
  50. data/unittests/other/jscriptExtraConfirmOk.rb +0 -7
  51. data/unittests/other/jscriptPushButton.rb +0 -6
  52. data/unittests/other/jscript_test.rb +0 -63
  53. data/unittests/popups_test.rb +0 -41
data/CHANGES CHANGED
@@ -1,3 +1,13 @@
1
+ == Version 1.9.0 -2011//
2
+
3
+ * Added support for IE9
4
+ * Updated watir/ie for Ruby 1.8.7 and are no longer supporting Ruby 1.8.6.
5
+ * Using RAutomation instead of Autoit, WinClicker and the WindowHelper
6
+ * New implementation of ie.file_field
7
+ * Replaced ie.dialog with ie.javascript_dialog
8
+ * Recompiled win32ole for 1.8.7 mingw and removed win32ole for 1.8.6
9
+
10
+
1
11
  == Version 1.8.1 - 2011/04/08
2
12
 
3
13
  === IE improvements
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.1
1
+ 1.9.0.rc1
@@ -269,9 +269,14 @@ module Watir
269
269
  # browser.file_field(:index, 2) # access the second file upload on the page (1 based, so the first field is accessed with :index,1)
270
270
  #
271
271
  def file_field(how, what=nil)
272
- FileField.new(self, how, what)
272
+ FileUpload.new(self, how, what)
273
273
  end
274
-
274
+
275
+ def javascript_dialog(opts={})
276
+ JavascriptDialog.new(opts)
277
+ end
278
+ alias :dialog :javascript_dialog
279
+
275
280
  # this is the main method for accessing the file_fields iterator. It returns a FileFields object
276
281
  #
277
282
  # Typical usage:
data/lib/watir/core.rb CHANGED
@@ -29,3 +29,7 @@ require 'watir/link'
29
29
  require 'watir/html_element'
30
30
 
31
31
  require 'watir/module'
32
+
33
+ require 'rautomation'
34
+ require 'watir/dialogs/file_upload'
35
+ require 'watir/dialogs/javascript'
@@ -0,0 +1,36 @@
1
+ module Watir
2
+ class FileUpload < InputElement
3
+ #:stopdoc:
4
+ INPUT_TYPES = ["file"]
5
+ #:startdoc:
6
+
7
+ def set(file_path)
8
+ assert_file_exists(file_path)
9
+ assert_exists
10
+ click_no_wait
11
+ set_file_name file_path
12
+ open_button.click
13
+ end
14
+
15
+ def assert_file_exists(file_path)
16
+ raise WatirException, "#{file_path} has to exist to set!" unless File.exists?(file_path)
17
+ end
18
+
19
+ def set_file_name(path_to_file)
20
+ file_upload_window.text_field(:class => 'Edit', :index => 0).set path_to_file
21
+ end
22
+
23
+ def open_button
24
+ file_upload_window.button(:value => '&Open')
25
+ end
26
+
27
+ def cancel_button
28
+ file_upload_window.button(:value => 'Cancel')
29
+ end
30
+
31
+ def file_upload_window
32
+ @window ||= RAutomation::Window.new(:title => /^choose file( to upload)?$/i)
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,47 @@
1
+ module Watir
2
+
3
+ class JavascriptDialog
4
+ WINDOW_TITLES = ['Message from webpage', 'Windows Internet Explorer','Microsoft Internet Explorer']
5
+
6
+ attr_accessor :timeout
7
+
8
+ def initialize(opts={})
9
+ @opts = opts
10
+ @timeout = 30
11
+ end
12
+
13
+ def exists?
14
+ javascript_dialog_window.exists?
15
+ end
16
+
17
+ def button(value)
18
+ javascript_dialog_window.button(:value => value)
19
+ end
20
+
21
+ def close
22
+ javascript_dialog_window.close
23
+ end
24
+
25
+ def text
26
+ javascript_dialog_window.text
27
+ end
28
+
29
+ def javascript_dialog_window
30
+ return @window if @window
31
+ begin
32
+ original_timeout = RAutomation::Window.wait_timeout
33
+ RAutomation::Window.wait_timeout = @timeout
34
+ ::RAutomation::Window.new(:title => @opts[:title] || /^(#{WINDOW_TITLES.join('|')})$/)
35
+ ensure
36
+ RAutomation::Window.wait_timeout = original_timeout
37
+ end
38
+ @window
39
+ end
40
+
41
+ end
42
+ end
43
+
44
+
45
+
46
+
47
+
data/lib/watir/element.rb CHANGED
@@ -251,7 +251,7 @@ module Watir
251
251
  def generate_ruby_code(element, method_name, *args)
252
252
  element = "#{self.class}.new(#{@page_container.attach_command}, :unique_number, #{self.unique_number})"
253
253
  method = build_method(method_name, *args)
254
- ruby_code = "$:.unshift(#{$LOAD_PATH.grep(%r{watir(-.*?)?/lib}).map {|p| "'#{p}'" }.join(").unshift(")});" <<
254
+ ruby_code = "$:.unshift(#{$LOAD_PATH.map {|p| "'#{p}'" }.join(").unshift(")});" <<
255
255
  "require '#{File.expand_path(File.dirname(__FILE__))}/core';#{element}.#{method};"
256
256
  return ruby_code
257
257
  end
@@ -276,7 +276,10 @@ module Watir
276
276
  assert_enabled
277
277
 
278
278
  highlight(:set)
279
- ole_object.click
279
+ # Not sure why but in IE9 Document mode, passing a parameter
280
+ # to click seems to work. Firing the onClick event breaks other tests
281
+ # so this seems to be the safest change and also works fine in IE8
282
+ ole_object.click(0)
280
283
  highlight(:clear)
281
284
  end
282
285
 
@@ -300,13 +303,50 @@ module Watir
300
303
  def fire_event(event)
301
304
  assert_exists
302
305
  assert_enabled
303
-
304
306
  highlight(:set)
305
- ole_object.fireEvent(event)
307
+ dispatch_event(event)
306
308
  @container.wait
307
309
  highlight(:clear)
308
310
  end
309
311
 
312
+ def dispatch_event(event)
313
+ if IE.version_parts.first.to_i >= 8 && @container.page_container.document.respond_to?(:createEvent)
314
+ # we're in IE9 document standards mode
315
+ ole_object.dispatchEvent(create_event(event))
316
+ else
317
+ ole_object.fireEvent(event)
318
+ end
319
+ end
320
+
321
+ def create_event(event)
322
+ event =~ /on(.*)/i
323
+ event = $1 if $1
324
+ event.downcase!
325
+
326
+ # See http://www.howtocreate.co.uk/tutorials/javascript/domevents
327
+ case event
328
+ when 'abort', 'blur', 'change', 'error', 'focus', 'load',
329
+ 'reset', 'resize', 'scroll', 'select', 'submit', 'unload'
330
+ dom_event_type = 'HTMLEvents'
331
+ dom_event_init = "initEvent(\"#{event}\", true, true)"
332
+ when 'keydown', 'keypress', 'keyup'
333
+ dom_event_type = 'KeyEvents'
334
+ # 'type', bubbles, cancelable, windowObject, ctrlKey, altKey, shiftKey, metaKey, keyCode, charCode
335
+ dom_event_init = "initKeyEvent(\"#{event}\", true, true, #{@container.page_container.window}, false, false, false, false, 0, 0)"
336
+ when 'click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover',
337
+ 'mouseup'
338
+ dom_event_type = 'MouseEvents'
339
+ # 'type', bubbles, cancelable, windowObject, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget
340
+ dom_event_init = "initMouseEvent(\"#{event}\", true, true, #{@container.page_container.window}, 1, 0, 0, 0, 0, false, false, false, false, 0, null)"
341
+ else
342
+ dom_event_type = 'HTMLEvents'
343
+ dom_event_init = "initEvents(\"#{event}\", true, true)"
344
+ end
345
+ event = @container.page_container.document.createEvent("HTMLEvents")
346
+ event.initEvent("change", true, true)
347
+ event
348
+ end
349
+
310
350
  # This method sets focus on the active element.
311
351
  # raises: UnknownObjectException if the object is not found
312
352
  # ObjectDisabledException if the object is currently disabled
data/lib/watir/frame.rb CHANGED
@@ -17,7 +17,16 @@ module Watir
17
17
  located_frame, document = locator.locate
18
18
  unless (located_frame.nil? && document.nil?)
19
19
  @o = located_frame
20
- @document = document.document
20
+ begin
21
+ @document = document.document
22
+ rescue WIN32OLERuntimeError => e
23
+ if e.message =~ /Access is denied/
24
+ # This frame's content is not directly accessible but let the
25
+ # user continue so they can access the frame properties
26
+ else
27
+ raise e
28
+ end
29
+ end
21
30
  break
22
31
  end
23
32
  end
@@ -38,7 +47,11 @@ module Watir
38
47
 
39
48
  def document
40
49
  assert_exists
41
- @document
50
+ if @document
51
+ @document
52
+ else
53
+ raise FrameAccessDeniedException, "IE will not allow access to this frame for security reasons. You can work around this with ie.goto(frame.src)"
54
+ end
42
55
  end
43
56
 
44
57
  def attach_command
@@ -249,7 +249,21 @@ module Watir
249
249
  end
250
250
  end
251
251
 
252
- # return internet explorer instance as specified. if none is found,
252
+ def self.version
253
+ begin
254
+ require 'win32/registry'
255
+ ::Win32::Registry::HKEY_LOCAL_MACHINE.open("SOFTWARE\\Microsoft\\Internet Explorer") do |ie_key|
256
+ ie_key.read('Version').last
257
+ end
258
+ # OR: ::WIN32OLE.new("WScript.Shell").RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Internet Explorer\\Version")
259
+ end
260
+ end
261
+
262
+ def self.version_parts
263
+ version.split('.')
264
+ end
265
+
266
+ # return internet explorer instance as specified. if none is found,
253
267
  # return nil.
254
268
  # arguments:
255
269
  # :url, url -- the URL of the IE browser window
@@ -413,43 +427,53 @@ module Watir
413
427
 
414
428
  # Maximize the window (expands to fill the screen)
415
429
  def maximize
416
- set_window_state :SW_MAXIMIZE
430
+ rautomation.maximize
417
431
  end
418
432
 
419
433
  # Minimize the window (appears as icon on taskbar)
420
434
  def minimize
421
- set_window_state :SW_MINIMIZE
435
+ rautomation.minimize
436
+ end
437
+
438
+ def minimized?
439
+ rautomation.minimized?
422
440
  end
423
441
 
424
442
  # Restore the window (after minimizing or maximizing)
425
443
  def restore
426
- set_window_state :SW_RESTORE
444
+ rautomation.restore
427
445
  end
428
446
 
429
447
  # Make the window come to the front
430
- def bring_to_front
431
- autoit.WinActivate title, ''
448
+ def activate
449
+ rautomation.activate
432
450
  end
451
+ alias :bring_to_front :activate
433
452
 
434
- def front?
435
- 1 == autoit.WinActive(title, '')
453
+ def active?
454
+ rautomation.active?
436
455
  end
456
+ alias :front? :active?
437
457
 
438
- private
439
- def set_window_state(state)
440
- autoit.WinSetState title, '', autoit.send(state)
458
+ def rautomation
459
+ @rautomation ||= ::RAutomation::Window.new(:hwnd => hwnd)
460
+ @rautomation
441
461
  end
462
+
442
463
  def autoit
443
- Watir::autoit
464
+ raise NotImplementedError, 'Watir no longer uses AutoIT. ' <<
465
+ 'If you need this functionality you can downgrade to v1.8.1 ' <<
466
+ 'or update your scripts to use ie.rautomation. ' <<
467
+ 'Please refer to https://github.com/jarmo/RAutomation'
444
468
  end
445
- public
446
469
 
447
- # Send key events to IE window.
448
- # See http://www.autoitscript.com/autoit3/docs/appendix/SendKeys.htm
449
- # for complete documentation on keys supported and syntax.
470
+ # Activates the window and sends keys to it.
471
+ #
472
+ # Refer to MSDN documentation at http://msdn.microsoft.com/en-us/library/dd375731(v=VS.85).aspx
473
+ # for the keycodes.
474
+ # @see RAutomation::Window#send_keys
450
475
  def send_keys(key_string)
451
- autoit.WinActivate title
452
- autoit.Send key_string
476
+ rautomation.send_keys key_string
453
477
  end
454
478
 
455
479
  def dir
data/lib/watir/ie.rb CHANGED
@@ -1,13 +1,8 @@
1
1
  require 'watir'
2
2
  require 'watir/core'
3
- require 'watir/winClicker'
4
3
  require 'watir/close_all'
5
4
  require 'watir/ie-process'
6
5
 
7
- require 'dl/import'
8
- require 'dl/struct'
9
- require 'Win32API'
10
-
11
6
  # these switches need to be deleted from ARGV to enable the Test::Unit
12
7
  # functionality that grabs
13
8
  # the remaining ARGV as a filter on what tests to run.
@@ -25,8 +20,10 @@ $FAST_SPEED = ARGV.delete('-f')
25
20
  ARGV.delete('-s')
26
21
 
27
22
  require 'watir/win32'
28
- require 'watir/popup'
29
23
  require 'watir/modal_dialog'
30
24
  require 'watir/collections'
31
25
 
32
26
  require 'watir/camel_case'
27
+
28
+
29
+
data/lib/watir/image.rb CHANGED
@@ -107,11 +107,8 @@ module Watir
107
107
  # will not overwrite a previously existing image. If an image already
108
108
  # exists at the given path then a dialog will be displayed prompting
109
109
  # for overwrite.
110
- # Raises a WatirException if AutoIt is not correctly installed
111
110
  # path - directory path and file name of where image should be saved
112
111
  def save(path)
113
- require 'watir/windowhelper'
114
- WindowHelper.check_autoit_installed
115
112
  @container.goto(src)
116
113
  begin
117
114
  thrd = fill_save_image_dialog(path)
@@ -123,8 +120,12 @@ module Watir
123
120
  end
124
121
 
125
122
  def fill_save_image_dialog(path)
123
+ command = "require 'rautomation';" <<
124
+ "window=::RAutomation::Window.new(:title => 'Save Picture');" <<
125
+ "window.text_field(:class => 'Edit', :index => 0).set('#{path}');" <<
126
+ "window.button(:value => '&Save').click"
126
127
  Thread.new do
127
- system("ruby -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control'); waitresult=@autoit.WinWait 'Save Picture', '', 15; if waitresult == 1\" -e \"@autoit.ControlSetText 'Save Picture', '', '1148', '#{path}'; @autoit.ControlSend 'Save Picture', '', '1', '{ENTER}';\" -e \"end\"")
128
+ system("ruby -e \"#{command}\"")
128
129
  end
129
130
  end
130
131
  private :fill_save_image_dialog
@@ -40,14 +40,14 @@ module Watir
40
40
  highlight(:clear)
41
41
  end
42
42
 
43
-
43
+
44
44
  # This method selects an item, or items in a select box, by text.
45
45
  # Raises NoValueFoundException if the specified value is not found.
46
46
  # * item - the thing to select, string or reg exp
47
47
  def select(item)
48
48
  select_item_in_select_list(:text, item)
49
49
  end
50
- alias :set :select
50
+ alias :set :select
51
51
 
52
52
  # Selects an item, or items in a select box, by value.
53
53
  # Raises NoValueFoundException if the specified value is not found.
@@ -75,7 +75,7 @@ module Watir
75
75
  break
76
76
  else
77
77
  option.selected = true
78
- @o.fireEvent("onChange")
78
+ dispatch_event("onChange")
79
79
  @container.wait
80
80
  found = true
81
81
  break
@@ -88,7 +88,7 @@ module Watir
88
88
  end
89
89
  highlight(:clear)
90
90
  end
91
-
91
+
92
92
  # Returns array of all text items displayed in a select box
93
93
  # An empty array is returned if the select box has no contents.
94
94
  # Raises UnknownObjectException if the select box is not found
@@ -308,14 +308,14 @@ module Watir
308
308
  @o.select
309
309
  value = self.value
310
310
 
311
- @o.fireEvent("onSelect")
312
- @o.fireEvent("ondragstart")
313
- @o.fireEvent("ondrag")
314
- destination.fireEvent("onDragEnter")
315
- destination.fireEvent("onDragOver")
316
- destination.fireEvent("ondrop")
311
+ dispatch_event("onSelect")
312
+ dispatch_event("ondragstart")
313
+ dispatch_event("ondrag")
314
+ destination.dispatch_event("onDragEnter")
315
+ destination.dispatch_event("onDragOver")
316
+ destination.dispatch_event("ondrop")
317
317
 
318
- @o.fireEvent("ondragend")
318
+ dispatch_event("ondragend")
319
319
  destination.value = destination.value + value.to_s
320
320
  self.value = ""
321
321
  end
@@ -334,10 +334,10 @@ module Watir
334
334
  @o.scrollIntoView
335
335
  @o.focus
336
336
  @o.select
337
- @o.fireEvent("onSelect")
337
+ dispatch_event("onSelect")
338
338
  @o.value = ""
339
- @o.fireEvent("onKeyPress")
340
- @o.fireEvent("onChange")
339
+ dispatch_event("onKeyPress")
340
+ dispatch_event("onChange")
341
341
  @container.wait
342
342
  highlight(:clear)
343
343
  end
@@ -366,33 +366,33 @@ module Watir
366
366
  assert_exists
367
367
  assert_enabled
368
368
  assert_not_readonly
369
-
369
+
370
370
  highlight(:set)
371
371
  @o.scrollIntoView
372
372
  if type_keys
373
373
  @o.focus
374
374
  @o.select
375
- @o.fireEvent("onSelect")
376
- @o.fireEvent("onKeyPress")
375
+ dispatch_event("onSelect")
376
+ dispatch_event("onKeyPress")
377
377
  @o.value = ""
378
378
  type_by_character(value)
379
- @o.fireEvent("onChange")
380
- @o.fireEvent("onBlur")
379
+ dispatch_event("onChange")
380
+ dispatch_event("onBlur")
381
381
  else
382
382
  @o.value = limit_to_maxlength(value)
383
383
  end
384
384
  highlight(:clear)
385
385
  end
386
-
387
- # Sets the value of the text field directly.
388
- # It causes no events to be fired or exceptions to be raised,
386
+
387
+ # Sets the value of the text field directly.
388
+ # It causes no events to be fired or exceptions to be raised,
389
389
  # so generally shouldn't be used.
390
390
  # It is preffered to use the set method.
391
391
  def value=(v)
392
392
  assert_exists
393
393
  @o.value = v.to_s
394
394
  end
395
-
395
+
396
396
  def requires_typing #:nodoc:
397
397
  @type_keys = true
398
398
  self
@@ -403,7 +403,7 @@ module Watir
403
403
  end
404
404
 
405
405
  private
406
-
406
+
407
407
  # Type the characters in the specified string (value) one by one.
408
408
  # It should not be used externally.
409
409
  # * value - string - The string to enter into the text field
@@ -411,10 +411,10 @@ module Watir
411
411
  value = limit_to_maxlength(value)
412
412
  characters_in(value) do |c|
413
413
  sleep @container.typingspeed
414
- @o.value = @o.value.to_s + c
415
- @o.fireEvent("onKeyDown")
416
- @o.fireEvent("onKeyPress")
417
- @o.fireEvent("onKeyUp")
414
+ @o.value = @o.value.to_s + c
415
+ dispatch_event("onKeyDown")
416
+ dispatch_event("onKeyPress")
417
+ dispatch_event("onKeyUp")
418
418
  end
419
419
  end
420
420
 
@@ -476,51 +476,7 @@ module Watir
476
476
  end
477
477
 
478
478
  end
479
-
480
- # For fields that accept file uploads
481
- # Windows dialog is opened and handled in this case by autoit
482
- # launching into a new process.
483
- # Normally a user would not need to create this object as it is returned by the Watir::Container#file_field method
484
- class FileField < InputElement
485
- #:stopdoc:
486
- INPUT_TYPES = ["file"]
487
- POPUP_TITLES = ['Choose file', 'Choose File to Upload']
488
- #:startdoc:
489
-
490
- # set the file location in the Choose file dialog in a new process
491
- # will raise a WatirException if AutoIt is not correctly installed
492
- def set(path_to_file)
493
- assert_exists
494
- require 'watir/windowhelper'
495
- WindowHelper.check_autoit_installed
496
- begin
497
- Thread.new do
498
- sleep 1 # it takes some time for popup to appear
499
-
500
- system %{ruby -e '
501
- require "win32ole"
502
-
503
- @autoit = WIN32OLE.new("AutoItX3.Control")
504
- time = Time.now
505
479
 
506
- while (Time.now - time) < 15 # the loop will wait up to 15 seconds for popup to appear
507
- #{POPUP_TITLES.inspect}.each do |popup_title|
508
- next unless @autoit.WinWait(popup_title, "", 1) == 1
509
-
510
- @autoit.ControlSetText(popup_title, "", "Edit1", #{path_to_file.inspect})
511
- @autoit.ControlSend(popup_title, "", "Button2", "{ENTER}")
512
- exit
513
- end # each
514
- end # while
515
- '}
516
- end.join(1)
517
- rescue
518
- raise Watir::Exception::WatirException, "Problem accessing Choose file dialog"
519
- end
520
- click
521
- end
522
- end
523
-
524
480
  # This class contains common methods to both radio buttons and check boxes.
525
481
  # Normally a user would not need to create this object as it is returned by the Watir::Container#checkbox or by Watir::Container#radio methods
526
482
  #--
@@ -547,15 +503,7 @@ module Watir
547
503
  end
548
504
  alias checked? set?
549
505
 
550
- # This method is the common code for setting or clearing checkboxes and radio.
551
- def set_clear_item(set)
552
- @o.checked = set
553
- @o.fireEvent("onClick")
554
- @container.wait
555
- end
556
- private :set_clear_item
557
-
558
- end
506
+ end
559
507
 
560
508
  #--
561
509
  # this class makes the docs better
@@ -572,7 +520,8 @@ module Watir
572
520
  assert_exists
573
521
  assert_enabled
574
522
  highlight(:set)
575
- set_clear_item(false)
523
+ @o.checked = false
524
+ highlight(:clear)
576
525
  highlight(:clear)
577
526
  end
578
527
 
@@ -584,12 +533,13 @@ module Watir
584
533
  assert_enabled
585
534
  highlight(:set)
586
535
  @o.scrollIntoView
587
- set_clear_item(true)
536
+ @o.checked = true
537
+ click
588
538
  highlight(:clear)
589
539
  end
590
-
540
+
591
541
  end
592
-
542
+
593
543
  # This class is the watir representation of a check box.
594
544
  # Normally a user would not need to create this object as it is returned by the Watir::Container#checkbox method
595
545
  class CheckBox < RadioCheckCommon
@@ -603,8 +553,9 @@ module Watir
603
553
  assert_exists
604
554
  assert_enabled
605
555
  highlight :set
606
- unless @o.checked == value
607
- set_clear_item value
556
+ current_value = @o.checked
557
+ unless value == current_value
558
+ click
608
559
  end
609
560
  highlight :clear
610
561
  end
@@ -615,7 +566,7 @@ module Watir
615
566
  def clear
616
567
  set false
617
568
  end
618
-
569
+
619
570
  end
620
-
571
+
621
572
  end