watir 1.4.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. data/bin/watir-console +1 -0
  2. data/changes.rb +119 -0
  3. data/license.rb +37 -0
  4. data/readme.rb +55 -120
  5. data/unittests/buttons_test.rb +107 -104
  6. data/unittests/buttons_xpath_test.rb +69 -0
  7. data/unittests/checkbox_test.rb +154 -141
  8. data/unittests/checkbox_xpath_test.rb +107 -0
  9. data/unittests/core_tests.rb +6 -2
  10. data/unittests/css_test.rb +50 -50
  11. data/unittests/defer_test.rb +47 -0
  12. data/unittests/dialog_test.rb +78 -0
  13. data/unittests/div2_xpath_test.rb +22 -0
  14. data/unittests/div_test.rb +159 -159
  15. data/unittests/div_xpath_test.rb +96 -0
  16. data/unittests/errorchecker_test.rb +22 -22
  17. data/unittests/filefield_test.rb +30 -23
  18. data/unittests/filefield_xpath_test.rb +35 -0
  19. data/unittests/form_test.rb +250 -229
  20. data/unittests/form_xpath_test.rb +253 -0
  21. data/unittests/frame_test.rb +123 -108
  22. data/unittests/google_form_test.rb +17 -0
  23. data/unittests/html/JavascriptClick.html +39 -0
  24. data/unittests/html/buttons1.html +3 -2
  25. data/unittests/html/checkboxes1.html +32 -14
  26. data/unittests/html/complex_table.html +1 -1
  27. data/unittests/html/depot_store.html +59 -0
  28. data/unittests/html/div.html +3 -21
  29. data/unittests/html/div_xml.html +21 -0
  30. data/unittests/html/fileupload.html +2 -2
  31. data/unittests/html/forms2.html +3 -3
  32. data/unittests/html/forms3.html +2 -2
  33. data/unittests/html/frame_links.html +2 -2
  34. data/unittests/html/google_india.html +119 -0
  35. data/unittests/html/iframeTest.html +2 -2
  36. data/unittests/html/images/map.GIF +0 -0
  37. data/unittests/html/images/map2.gif +0 -0
  38. data/unittests/html/images1.html +17 -2
  39. data/unittests/html/javascriptevents.html +3 -7
  40. data/unittests/html/links1.html +9 -8
  41. data/unittests/html/links_multi.html +14 -0
  42. data/unittests/html/list_matters.html +720 -0
  43. data/unittests/html/lists.html +18 -0
  44. data/unittests/html/map_test.html +31 -0
  45. data/unittests/html/modal_dialog.html +10 -0
  46. data/unittests/html/modal_dialog_launcher.html +12 -0
  47. data/unittests/html/new_browser.html +17 -0
  48. data/unittests/html/pass.html +3 -0
  49. data/unittests/html/popups1.html +1 -1
  50. data/unittests/html/pre.html +28 -0
  51. data/unittests/html/radioButtons1.html +6 -5
  52. data/unittests/html/selectboxes1.html +12 -11
  53. data/unittests/html/simple_table.html +1 -1
  54. data/unittests/html/simple_table_columns.html +1 -1
  55. data/unittests/html/table1.html +1 -1
  56. data/unittests/html/tableCell_using_xpath.html +19 -0
  57. data/unittests/html/textfields1.html +6 -4
  58. data/unittests/html/xpath_nbsp.html +12 -0
  59. data/unittests/ie_exists_test.rb +32 -0
  60. data/unittests/ie_mock.rb +78 -79
  61. data/unittests/ie_test.rb +39 -39
  62. data/unittests/images_test.rb +132 -155
  63. data/unittests/images_xpath_test.rb +91 -0
  64. data/unittests/links_multi_test.rb +36 -0
  65. data/unittests/links_test.rb +158 -152
  66. data/unittests/links_xpath_test.rb +40 -0
  67. data/unittests/lists_test.rb +29 -0
  68. data/unittests/map_test.rb +99 -0
  69. data/unittests/minmax_test.rb +23 -23
  70. data/unittests/navigate_test.rb +43 -51
  71. data/unittests/nbsp_xpath_test.rb +18 -0
  72. data/unittests/other/WindowLogonExample.rb +28 -0
  73. data/unittests/{WindowLogonExtra.rb → other/WindowLogonExtra.rb} +0 -0
  74. data/unittests/{all_tests_concurrent.rb → other/all_tests_concurrent.rb} +23 -23
  75. data/unittests/other/navigate_exception_test.rb +14 -0
  76. data/unittests/other/rexml_unit_test.rb +24 -0
  77. data/unittests/other/testcase_method_order_test.rb +36 -0
  78. data/unittests/other/testcase_verify_test.rb +25 -0
  79. data/unittests/other/wait_until_test.rb +99 -0
  80. data/unittests/pagecontainstext_test.rb +56 -37
  81. data/unittests/parent_child_test.rb +55 -0
  82. data/unittests/popups_test.rb +37 -37
  83. data/unittests/pre_test.rb +52 -0
  84. data/unittests/radios_test.rb +186 -155
  85. data/unittests/radios_xpath_test.rb +101 -0
  86. data/unittests/screen_capture_test.rb +41 -41
  87. data/unittests/selectbox_test.rb +223 -181
  88. data/unittests/selectbox_xpath_test.rb +113 -0
  89. data/unittests/setup.rb +29 -25
  90. data/unittests/speed_settings_test.rb +22 -0
  91. data/unittests/table_cell_using_xpath_test.rb +40 -0
  92. data/unittests/table_test.rb +315 -284
  93. data/unittests/table_xpath_test.rb +114 -0
  94. data/unittests/textarea_test.rb +81 -0
  95. data/unittests/textarea_xpath_test.rb +82 -0
  96. data/unittests/textfields_test.rb +205 -229
  97. data/unittests/textfields_xpath_test.rb +111 -0
  98. data/unittests/window_tests.rb +7 -0
  99. data/unittests/windows/attach_to_existing_window_test.rb +52 -0
  100. data/unittests/windows/attach_to_new_window_test.rb +82 -0
  101. data/unittests/windows/close_window_test.rb +22 -0
  102. data/unittests/windows/frame_links_test.rb +25 -0
  103. data/unittests/windows/ie-each_test.rb +48 -0
  104. data/unittests/windows/iedialog_test.rb +55 -0
  105. data/unittests/windows/js_events_test.rb +57 -0
  106. data/unittests/windows/jscriptExtraAlert.rb +6 -0
  107. data/unittests/windows/jscriptExtraConfirmCancel.rb +7 -0
  108. data/unittests/windows/jscriptExtraConfirmOk.rb +7 -0
  109. data/unittests/{jscriptPushButton.rb → windows/jscriptPushButton.rb} +1 -1
  110. data/unittests/windows/jscript_test.rb +64 -0
  111. data/unittests/windows/modal_dialog_test.rb +127 -0
  112. data/unittests/windows/new.rb +56 -0
  113. data/unittests/windows/open_close_test.rb +22 -0
  114. data/unittests/windows/send_keys_test.rb +34 -0
  115. data/unittests/xpath_tests.rb +10 -0
  116. data/watir.rb +4344 -3565
  117. data/watir/IEDialog/Release/IEDialog.dll +0 -0
  118. data/watir/WindowHelper.rb +13 -11
  119. data/watir/assertions.rb +36 -0
  120. data/watir/camel_case.rb +14 -5
  121. data/watir/close_all.rb +38 -0
  122. data/watir/contrib/enabled_popup.rb +21 -0
  123. data/watir/contrib/ie-new-process.rb +27 -0
  124. data/watir/contrib/page_checker.rb +29 -0
  125. data/watir/contrib/visible.rb +47 -0
  126. data/watir/cookiemanager.rb +4 -4
  127. data/watir/datahandler.rb +107 -0
  128. data/watir/dialog.rb +46 -0
  129. data/watir/elements.rb +65 -0
  130. data/watir/exceptions.rb +18 -36
  131. data/watir/ie-process.rb +40 -0
  132. data/watir/irb-history.rb +31 -0
  133. data/watir/process.rb +20 -0
  134. data/watir/testUnitAddons.rb +3 -42
  135. data/watir/testcase.rb +58 -0
  136. data/watir/utils.rb +20 -0
  137. data/watir/waiter.rb +88 -0
  138. data/watir/watir_simple.rb +4 -4
  139. data/watir/win32ole.rb +8 -0
  140. data/watir/win32ole/win32ole.so +0 -0
  141. data/watir/winClicker.rb +374 -400
  142. metadata +209 -128
  143. data/unittests/WindowLogonExample.rb +0 -30
  144. data/unittests/attachToExistingWindow_test.rb +0 -40
  145. data/unittests/js_events_test.rb +0 -77
  146. data/unittests/jscriptExtraAlert.rb +0 -6
  147. data/unittests/jscriptExtraConfirmCancel.rb +0 -7
  148. data/unittests/jscriptExtraConfirmOk.rb +0 -7
  149. data/unittests/jscript_test.rb +0 -57
  150. data/unittests/send_keys_test.rb +0 -29
  151. data/unittests/textAreafields_test.rb +0 -81
@@ -0,0 +1 @@
1
+ exec 'irb.bat -r irb/completion -r watir/irb-history -r watir --simple-prompt --readline'
@@ -0,0 +1,119 @@
1
+ =begin rdoc
2
+ Major Changes in 1.5
3
+ Support for IE's Modal Dialogs.
4
+ showModalDialog()
5
+ Any method can be used to specify an element (:text, :class, etc.).
6
+ ie.button(:class,'Button Menu').click
7
+ ie.div(:text, 'Type').text_field(:class, 'TextInput-input').set('my value')
8
+ ie.button(:text, 'Save').click
9
+ One can now use multiple attributes to specify an element.
10
+ ie.span(:class =>'Label', :text => 'Add new').click
11
+
12
+ Other Changes in 1.5
13
+ * Migrated IE.new_process from watir/contrib and improved its reliability. We now recommend IE.new_process over IE.new as a way to avoid numerous errors detailed in http://jira.openqa.org/browse/WTR-150.
14
+ * Added IE.start_process. This works like IE.start, but uses the new_process mechanism to start IE.
15
+ * Added IE.new_window and IE.start_window. This are synonyms for IE.new and IE.start.
16
+ * Added dependency on the win32-process gem.
17
+ * Added IE.each, which iterates through the various IE windows currently open.
18
+ * Updated WindowHelper and watir/dialog to work with IE7
19
+ * The wait method was completely rewritten. This should fix various errors seen in 1.5.1.1165 and 1.5.1.1158.
20
+ * Removed the "spinner".
21
+ * Fixed bug in Element#parent and updated unit test.
22
+ * HTML value attributes are checked as strings before converting, updated unit tests.
23
+ * Watir::wait_until clean up.
24
+ * Fix for winclicker when installed in directory with spaces.
25
+ * Rdoc changes and updates.
26
+ * A workaround for frame access errors in the wait command, swallowing access denied errors and rethrowing if other WIN32OLERuntimeErrors show up.
27
+ * Add support for "li" tag.
28
+ * Fix for bug in element_by_xpath. http://www.mail-archive.com/wtr-general@rubyforge.org/msg06742.html
29
+ * "Wait" method now is called recursively into nested frames. http://jira.openqa.org/browse/WTR-107
30
+ * Rdocs now only include the core Watir library (not contrib).
31
+ * Improve error reporting when IE#modal_dialog isn't found.
32
+ * Add method "ModalDialog#exists?"
33
+ * Add Watir::Win32.window_exists? method.
34
+ * Fix for winclicker setComboBoxTest and setTextBoxText http://jira.openqa.org/browse/WTR-124
35
+ * Improved Support for IE7
36
+ o Fix for IE7 on ie.exists? http://jira.openqa.org/browse/WTR-123
37
+ o Fix for IE7 with winclicker.
38
+ o Fix for check_for_http_error in IE7. http://jira.openqa.org/browse/WTR-141
39
+ * Fix for IE7 on ie.exists? http://jira.openqa.org/browse/WTR-123
40
+ * Rubyw is now used in winclicker to bypass command line windows.
41
+ * Autoit is registered before being used.
42
+ * Watir now checks for the right version of Ruby before loading our customized Win32ole library.
43
+ * ie.file_field has been fixed and unit test updated.
44
+ * rdoc generation has been fixed.
45
+ * page checker has been moved from the default behavior into contrib/page_checker.rb
46
+ * Fix for intermittent crashes occuring when using Watir with Ruby version > 1.8.2.
47
+ * Fix for http://jira.openqa.org/browse/WTR-86
48
+ This fix prevents the Watir-modified win32ole.so library (compiled against 1.8.2) from being used.
49
+ * Added Element#parent
50
+ * Add new methods Element#after? and Element#before?
51
+ * Added support for relative specifiers. E.g.:
52
+ link = $ie.link(:class => 'addtocart', :after? => @headline)
53
+ * Removed NAVIGATION_CHECKER from Watir.rb, added to contrib. This fixes rdoc generation and stops the frame access exception being thrown in the default installation.
54
+ * Open-code calls to def_creator, for easier debugging and rdoc generation of factory methods.
55
+ * Winclicker fix for too many callbacks defined error.
56
+ * Patch for rspec API changes
57
+ * You can now reference an iframe using IE#frame(:id, 'whatever'). Jira 109
58
+ * Added 'map' and 'area' element support.
59
+ * Moved Watir::Assertions into new file watir/assertions.rb so they can be used outside test cases.
60
+ * Fix and unit test for Jira 114, related to tag in HTML source.
61
+ * Added SelectList#include? and SelectList#selected?
62
+ * Added Element#visible?
63
+ * Fixes all reported bugs with contains_text.
64
+ * New Watir::TestCase#verify method (and verify_equal and verify_match).
65
+ * The click_no_wait method now works in frames.
66
+ * Released new IE.new_process method to 'watir/contrib/ie-new-process'. This starts up a new IE process for each IE window, which is really how it should be done. To close these use IE#kill. Any one getting intermittent RPC errors when opening windows may want to use this instead.
67
+ * Several examples have been updated.
68
+ * Moved enabled_popup to a new contrib directory.
69
+ * Added several tests.
70
+
71
+ Changes in 1.4
72
+ fix method name for accessing class name of P/Span/Div (change from style to class_name)
73
+ fix for bug 2152 (frame index in show_frames off by 1)
74
+ added alt as a property to image
75
+ added file_fields
76
+ fixed TextArea#to_s
77
+ moved reset button to buttons class
78
+ add IE#send_keys
79
+ frames can now be referenced using regexps and ids
80
+ added IE#minimize, IE#maximize, IE#restore
81
+ onChange and onBlur events now triggered by TextField#set
82
+ added default option to set for checkbox
83
+ added colspan method to tablecell
84
+ fix for bug reported by Scott P, wrong objects are sometimes found
85
+ fixed Bug with radio/checkboxes doing multiple fireevents
86
+ fix for table, id and reg exp
87
+ wait for page load before returning from IE.attach
88
+ update to select_list -- new interface still in progress
89
+ added .show method to iterators
90
+ fix for flashing objects in table cells
91
+ added flash for forms
92
+ flash returns nil instead of the curious '10'
93
+ removed ScreenCapture module from IE class
94
+
95
+ Changes in 1.3.1
96
+ Added P tag support
97
+ Bug fix for images and links in frames using each
98
+ Bug fixes for image#save
99
+
100
+ Changes in 1.3
101
+ added new row_values and column_value methods to tables
102
+ added ability to save an image - ie.image(:index,1).save('c:\temp\mypic.gif')
103
+ new method, html that applies to objects, not just a page - ie.button(:index,1).html => <INPUT id=b2 title="this is button1" onclick="javascript:document.location='pass.html';" type=button value="Click Me" name=b1>
104
+ now throws a NavigationException on 404, 500 errors
105
+ iterators now mixin Enumerable
106
+ added support for labels
107
+ added support for frames by index
108
+ added screen_capture
109
+ added hidden field support, and iterator method
110
+ table cells, span and div now act as containers, so can do ie.div(:index,1).button(:index.2).click
111
+ added index to print out from show_xx methods. Link shows img src if an image is used
112
+ added onKeyUp and onKeyDown to text_fields#set
113
+ installer now installs AutoIt to deal with javascript popups, file uploads etc
114
+ the spinner is now off by default
115
+ bug fix in text_fields iterator where it wasnt iterating through password or text ares. Added test for password fields
116
+ bug fix for flash for tables
117
+ bug fixes for images and links in cells
118
+
119
+ =end
@@ -0,0 +1,37 @@
1
+ =begin rdoc
2
+
3
+ License
4
+ ---------------------------------------------------------------------------
5
+ Copyright (c) 2004-2007, Paul Rogers and Bret Pettichord
6
+ All rights reserved.
7
+
8
+ Redistribution and use in source and binary forms, with or without
9
+ modification, are permitted provided that the following conditions are met:
10
+
11
+ 1. Redistributions of source code must retain the above copyright notice,
12
+ this list of conditions and the following disclaimer.
13
+
14
+ 2. Redistributions in binary form must reproduce the above copyright
15
+ notice, this list of conditions and the following disclaimer in the
16
+ documentation and/or other materials provided with the distribution.
17
+
18
+ 3. Neither the names Paul Rogers, Bret Pettichord nor the names of contributors to
19
+ this software may be used to endorse or promote products derived from this
20
+ software without specific prior written permission.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
23
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
24
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
26
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
29
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
31
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
32
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
+ --------------------------------------------------------------------------
34
+ (based on BSD Open Source License)
35
+
36
+ =end
37
+
data/readme.rb CHANGED
@@ -2,101 +2,61 @@
2
2
 
3
3
  This is Watir - Web Application Testing In Ruby http://wtr.rubyforge.org
4
4
 
5
- To Install:
6
- Execute install.rb.
5
+ To Install Ruby: http://ruby-lang.org
6
+ Best is to use Ruby 1.8.2-14 or later.
7
+ However, if you are using the Watir::IE#modal_dialog method, you must use Ruby 1.8.2-14 and not a more recent version.
8
+ Watir (in general) will not work with Ruby 1.8.1-13. (This version of Ruby has a bad WIN32OLE library.)
9
+
10
+ To Install Watir:
11
+ Best way to install is to use the gem.
12
+ From your command line:
13
+ > gem install win32-process --include-dependencies
14
+ > gem install watir
15
+ This will download and install watir, win32-process and all dependencies.
7
16
 
8
17
  How To Use:
9
- This only works on Windows. It has been tested on Windows 2000 and XP.
10
- Best is to use Ruby 1.8.2-14 or later.
11
- This has been developed and tested using Ruby 1.8.1-11, Ruby 1.8.1-12.
12
- It will NOT work with Ruby 1.8.1-13. (This version of Ruby has a bad WIN32OLE library.)
18
+ This only works on Windows.
13
19
  Requires Internet Explorer 5.5 or newer.
14
20
  Check out the mail lists and the documentation for the workarounds.
15
- Install ruby from http://ruby-lang.org
21
+
22
+ User Guide: http://wiki.openqa.org/display/WTR/User+Guide
16
23
 
17
24
  Unit Tests:
18
25
  Run the unittests in a cmd shell. Go to the dir where you installed it and then type 'ruby unittests/core_tests.rb'.
19
26
  See the user guide if you are having problems with security blocking.
20
27
 
21
- Changes in 1.4.1
22
- (based on watir.rb revision 1.215)
23
- removed annoying warning message that sometimes appeared
24
- corrected Element#class_name references which has been misnamed Element#style
25
- removed IE#capture_events (didn't really work)
26
- added IE#bring_to_front and IE#front?
27
- fixed failing frame tests
28
- remove failing test for disabled images
29
- better rdoc
30
-
31
- Changes in 1.4.0
32
- fix method name for accessing class name of P/Span/Div (change from style to class_name)
33
- fix for bug 2152 (frame index in show_frames off by 1)
34
- added alt as a property to image
35
- added file_fields
36
- fixed TextArea#to_s
37
- moved reset button to buttons class
38
- add IE#send_keys
39
- frames can now be referenced using regexps and ids
40
- added IE#minimize, IE#maximize, IE#restore
41
- onChange and onBlur events now triggered by TextField#set
42
- added default option to set for checkbox
43
- added colspan method to tablecell
44
- fix for bug reported by Scott P, wrong objects are sometimes found
45
- fixed bug with radio/checkboxes doing multiple fireevents
46
- fix for table, id and reg exp
47
- wait for page load before returning from IE.attach
48
- update to select_list -- new interface still in progress
49
- added .show method to iterators
50
- fix for flashing objects in table cells
51
- added flash for forms
52
- flash returns nil instead of the curious '10'
53
- removed ScreenCapture module from IE class
54
-
55
- Changes in 1.3.1
56
- Added P tag support
57
- Bug fix for images and links in frames using each
58
- Bug fixes for image#save
59
-
60
- Changes in 1.3
61
- added new row_values and column_value methods to tables
62
- added ability to save an image - ie.image(:index,1).save('c:\temp\mypic.gif')
63
- new method, html that applies to objects, not just a page - ie.button(:index,1).html => <INPUT id=b2 title="this is button1" onclick="javascript:document.location='pass.html';" type=button value="Click Me" name=b1>
64
- now throws a NavigationException on 404, 500 errors
65
- iterators now mixin Enumerable
66
- added support for labels
67
- added support for frames by index
68
- added screen_capture
69
- added hidden field support, and iterator method
70
- table cells, span and div now act as containers, so can do ie.div(:index,1).button(:index.2).click
71
- added index to print out from show_xx methods. Link shows img src if an image is used
72
- added onKeyUp and onKeyDown to text_fields#set
73
- installer now installs AutoIt to deal with javascript popups, file uploads etc
74
- the spinner is now off by default
75
- bug fix in text_fields iterator where it wasnt iterating through password or text ares. Added test for password fields
76
- bug fix for flash for tables
77
- bug fixes for images and links in cells
78
-
79
28
  Typical Usage
80
29
  # include the controller
81
30
  require 'watir'
82
31
  # create an instance of the controller
83
32
  ie = Watir::IE.new
84
33
  # go to the page you want to test
85
- ie.goto("http://myserver/mypage")
86
- # to enter text into a text field - assuming the field is name "username"
87
- ie.text_field(:name, "username").set("Paul")
88
- # if there was a text field that had an id of "company_ID", you could set it to Ruby Co:
89
- ie.text_field(:id ,"company_ID").set("Ruby Co")
34
+ ie.goto('http://myserver/mypage')
35
+ # to enter text into a text field - assuming the field is named 'username'
36
+ ie.text_field(:name, 'username').set('Paul')
37
+ # if there was a text field that had an id of 'company_ID', you could set it to 'Ruby Co':
38
+ ie.text_field(:id ,'company_ID').set('Ruby Co')
90
39
  # to click a button that has a caption of 'Cancel'
91
- ie.button(:value, "Cancel").click
40
+ ie.button(:value, 'Cancel').click
41
+
42
+ Identifying something using two or more identifying characteristics
43
+ # Html objects can also be identified via a combination of two of the above methods,
44
+ # for example to click a span with a class name of 'Label', and whose text is 'Add new', one could say
45
+ ie.span(:class =>'Label', :text => 'Add new').click
46
+ # Or to find one object within another (for example the first text_field within a div of class
47
+ # 'PasswordInput', where your password equals 'MyPassword'), one could say
48
+ ie.div(:class, 'PasswordInput').text_field(:index, 1).set('MyPassword')
92
49
 
93
50
  The ways that are available to identify an html object depend upon the object type, but include
94
- :id used for an object that has an ID attribute -- this is the best way!
95
- :name used for an object that has a name attribute.
96
- :value value of text fields, captions of buttons
51
+ :id used for an object that has an ID attribute.*
52
+ :name used for an object that has a name attribute.*
53
+ :value value of text fields, captions of buttons.
97
54
  :index finds the nth object of the specified type - eg button(:index , 2) finds the second button. This is 1 based. <br>
98
- :beforeText finds the object immeditaley before the specified text. Doesnt work if the text is in a table cell
99
- :afterText finds the object immeditaley after the specified text. Doesnt work if the text is in a table cell
55
+ :class used for an object that has a class attribute.
56
+ :text used for links and other objects that contain text.
57
+ :xpath finds the item using xpath query
58
+
59
+ * :id and :name are the quickest of these to process, and so should be used when possible to speed up scripts.
100
60
 
101
61
  The objects that are currently supported include
102
62
  Button
@@ -121,18 +81,18 @@ Typical Usage
121
81
 
122
82
  -b (background) Run Internet Explorer invisible
123
83
  -f (fast) Run tests very fast
124
- -x (spinner) Add a spinner that displays when pages are waiting to be loaded.
125
84
 
126
85
  Note that if you also use test/unit, you will need to require 'watir' first to avoid conflicts
127
86
  with its command line switches.
128
87
 
129
88
  Javascript Pop Up Support
130
- Watir now installs AutoIt - http://www.autoitscript.com/
131
- This is the preffered method for dealing with pop ups, file requesters etc. Support for Winclickers will be removed.
89
+ Watir now optionally installs AutoIt - http://www.autoitscript.com/
90
+ This is the prefered method for dealing wth pop ups, file requesters etc. Support for Winclickers will be removed.
132
91
 
133
92
  Contacts:
134
93
  Paul Rogers (paul.rogers@shaw.ca)
135
94
  Bret Pettichord (bret@pettichord.com)
95
+ Charley Baker (charley.baker@gmail.com)
136
96
  The mailing list: http://rubyforge.org/mail/?group_id=104
137
97
 
138
98
  Contributors:
@@ -146,9 +106,8 @@ Contributors:
146
106
  Justin McCarthy
147
107
  Chris McMahon
148
108
  Elisabeth Hendrickson
149
- Michael Kelly (Indianapolis)
109
+ Michael Kelly
150
110
  Peter Chau
151
- Jacinda Scott
152
111
  Danny Faught
153
112
  Andy Sipe
154
113
  John Lloyd-Jones
@@ -158,7 +117,20 @@ Contributors:
158
117
  Jared Luxenberg
159
118
  Alexey Verkhovsky
160
119
  Tuyet Cong-Ton-Nu
161
- Kingsley Hendrickse
120
+ Jeff Wood
121
+ Angrez Singh
122
+ Abhishek Goliya
123
+ Yaxin Wang
124
+ Michael Bolton
125
+ Paul Carvalho
126
+ Konstantin Sobolev
127
+ David Schmidt
128
+ Dara Lillis
129
+ Charley Baker
130
+ Prema Arya
131
+ Xavier Noria
132
+ Jeff Fry
133
+ Zeljko Filipin
162
134
 
163
135
  Acknowledgements:
164
136
  Chris Morris
@@ -167,45 +139,8 @@ Acknowledgements:
167
139
  Penny Tonita
168
140
  Janet Gregory
169
141
  Andy Tinkham
142
+ Jacinda Scott (logo creator)
170
143
 
171
144
  Thanks for your ideas and support!
172
145
 
173
- License
174
- ---------------------------------------------------------------------------
175
- Copyright (c) 2004-2005, Paul Rogers and Bret Pettichord
176
- All rights reserved.
177
-
178
- Redistribution and use in source and binary forms, with or without
179
- modification, are permitted provided that the following conditions are met:
180
-
181
- 1. Redistributions of source code must retain the above copyright notice,
182
- this list of conditions and the following disclaimer.
183
-
184
- 2. Redistributions in binary form must reproduce the above copyright
185
- notice, this list of conditions and the following disclaimer in the
186
- documentation and/or other materials provided with the distribution.
187
-
188
- 3. Neither the names Paul Rogers, Bret Pettichord nor the names of contributors to
189
- this software may be used to endorse or promote products derived from this
190
- software without specific prior written permission.
191
-
192
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
193
- IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
194
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
195
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
196
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
197
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
199
- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
200
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
201
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
202
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
203
- --------------------------------------------------------------------------
204
- (based on BSD Open Source License)
205
-
206
-
207
-
208
-
209
146
  =end
210
- class ReadMe
211
- end
@@ -1,131 +1,134 @@
1
1
  # feature tests for Buttons
2
- # revision: $Revision: 1.32 $
2
+ # revision: $Revision: 962 $
3
3
 
4
4
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
5
5
  require 'unittests/setup'
6
6
 
7
7
  class TC_Buttons < Test::Unit::TestCase
8
- include Watir
9
-
10
- def setup
11
- $ie.goto($htmlRoot + "buttons1.html")
12
- end
13
-
14
- def goto_frames_page()
15
- $ie.goto($htmlRoot + "frame_buttons.html")
16
- end
17
-
18
- def aatest_Spinner
19
- s = Spinner.new
20
- i = 0
21
- while(i < 100)
22
- sleep 0.05
23
- print s.next
24
- i+=1
25
- end
26
- s = nil
8
+ include Watir
9
+
10
+ def setup
11
+ $ie.goto($htmlRoot + "buttons1.html")
12
+ end
13
+
14
+ def goto_frames_page
15
+ $ie.goto($htmlRoot + "frame_buttons.html")
16
+ end
17
+
18
+ def aatest_Spinner
19
+ s = Spinner.new
20
+ i = 0
21
+ while(i < 100)
22
+ sleep 0.05
23
+ print s.next
24
+ i+=1
27
25
  end
26
+ s = nil
27
+ end
28
+
29
+ def aaatest_Button_to_s
30
+ # i think the tests for to_s should be dropped. The output is not in a nice format to be tested, and the
31
+ # individual properties are tested in the test_properties method
28
32
 
29
- def aaatest_Button_to_s
30
- # i think the tests for to_s should be dropped. The output is not in a nice format to be tested, and the
31
- # individual properties are tested in the test_properties method
32
-
33
- b4 = ['name b4',
33
+ b4 = ['name b4',
34
34
  'type button',
35
35
  'id b5',
36
36
  'value Disabled Button',
37
37
  'disabled true']
38
- b1 = ['name b1',
38
+ b1 = ['name b1',
39
39
  'type button',
40
40
  'id b2',
41
41
  'value Click Me',
42
42
  'disabled false']
43
-
44
- assert_equal(b4, $ie.button(:name, "b4").to_s)
45
- assert_equal(b1, $ie.button(:caption, "Click Me").to_s)
46
- assert_equal(b1, $ie.button(:index, 1).to_s)
47
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").to_s }
48
- end
49
43
 
50
- def test_properties
51
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").id }
52
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").name }
53
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").disabled }
54
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").type }
55
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").value }
56
-
57
- assert_equal("b1" , $ie.button(:index, 1).name )
58
- assert_equal("b2" , $ie.button(:index, 1).id )
59
- assert_equal("button" , $ie.button(:index, 1).type )
60
- assert_equal("Click Me" , $ie.button(:index, 1).value )
61
- assert_equal(false , $ie.button(:index, 1).disabled )
62
-
63
- assert_equal("b1" , $ie.button(:id, "b2").name )
64
- assert_equal("b2" , $ie.button(:id, "b2").id )
65
- assert_equal("button" , $ie.button(:id, "b2").type )
66
-
67
- assert_equal("b4" , $ie.button(:index, 2).name )
68
- assert_equal("b5" , $ie.button(:index, 2).id )
69
- assert_equal("button" , $ie.button(:index, 2).type )
70
- assert_equal("Disabled Button" , $ie.button(:index, 2).value )
71
- assert_equal(true , $ie.button(:index, 2).disabled )
72
-
73
- assert_equal( "" , $ie.button(:index, 2).title )
74
- assert_equal( "this is button1" , $ie.button(:index, 1).title )
75
- end
44
+ assert_equal(b4, $ie.button(:name, "b4").to_s)
45
+ assert_equal(b1, $ie.button(:caption, "Click Me").to_s)
46
+ assert_equal(b1, $ie.button(:index, 1).to_s)
47
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").to_s }
48
+ end
49
+
50
+ def test_properties
51
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").id }
52
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").name }
53
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").disabled }
54
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").type }
55
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").value }
76
56
 
57
+ assert_equal("b1" , $ie.button(:index, 1).name )
58
+ assert_equal("b2" , $ie.button(:index, 1).id )
59
+ assert_equal("button" , $ie.button(:index, 1).type )
60
+ assert_equal("Click Me" , $ie.button(:index, 1).value )
61
+ assert_equal(false , $ie.button(:index, 1).disabled )
62
+ assert_equal("italic_button" , $ie.button(:name, "b1").class_name )
63
+ assert_equal("" , $ie.button(:name , "b4").class_name )
77
64
 
78
- def test_button_using_default
79
- # since most of the time, a button will be accessed based on its caption, there is a default way of accessing it....
80
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button( "Missing Caption").click }
81
-
82
- $ie.button("Click Me").click
83
- assert($ie.contains_text("PASS") )
84
- end
85
65
 
86
- def test_Button_click_only
87
- $ie.button(:caption, "Click Me").click
88
- assert($ie.contains_text("PASS") )
89
- end
66
+ assert_equal("b1" , $ie.button(:id, "b2").name )
67
+ assert_equal("b2" , $ie.button(:id, "b2").id )
68
+ assert_equal("button" , $ie.button(:id, "b2").type )
90
69
 
91
- def test_button_click
92
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:caption, "Missing Caption").click }
93
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:id, "missingID").click }
94
-
95
- assert_raises(ObjectDisabledException , "ObjectDisabledException was supposed to be thrown" ) { $ie.button(:caption, "Disabled Button").click }
96
-
97
- $ie.button(:caption, "Click Me").click
98
- assert($ie.contains_text("PASS") )
99
- end
70
+ assert_equal("b4" , $ie.button(:index, 2).name )
71
+ assert_equal("b5" , $ie.button(:index, 2).id )
72
+ assert_equal("button" , $ie.button(:index, 2).type )
73
+ assert_equal("Disabled Button" , $ie.button(:index, 2).value )
74
+ assert_equal(true , $ie.button(:index, 2).disabled )
100
75
 
101
- def test_Button_Exists
102
- assert($ie.button(:caption, "Click Me").exists?)
103
- assert($ie.button(:caption, "Submit").exists?)
104
- assert($ie.button(:name, "b1").exists?)
105
- assert($ie.button(:id, "b2").exists?)
106
- assert($ie.button(:caption, /sub/i).exists?)
107
-
108
- assert_false($ie.button(:caption, "missingcaption").exists?)
109
- assert_false($ie.button(:name, "missingname").exists?)
110
- assert_false($ie.button(:id, "missingid").exists?)
111
- assert_false($ie.button(:caption, /missing/i).exists?)
112
- end
76
+ assert_equal( "" , $ie.button(:index, 2).title )
77
+ assert_equal( "this is button1" , $ie.button(:index, 1).title )
78
+ end
79
+
80
+
81
+ def test_button_using_default
82
+ # since most of the time, a button will be accessed based on its caption, there is a default way of accessing it....
83
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button( "Missing Caption").click }
113
84
 
114
- def test_Button_Enabled
115
- assert($ie.button(:caption, "Click Me").enabled?)
116
- assert_false($ie.button(:caption, "Disabled Button").enabled?)
117
- assert_false($ie.button(:name, "b4").enabled?)
118
- assert_false($ie.button(:id, "b5").enabled?)
119
-
120
- assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").enabled? }
121
- end
85
+ $ie.button("Click Me").click
86
+ assert($ie.text.include?("PASS") )
87
+ end
88
+
89
+ def test_Button_click_only
90
+ $ie.button(:caption, "Click Me").click
91
+ assert($ie.text.include?("PASS") )
92
+ end
93
+
94
+ def test_button_click
95
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:caption, "Missing Caption").click }
96
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:id, "missingID").click }
122
97
 
123
- def test_frame
124
- goto_frames_page()
125
-
126
- assert($ie.frame("buttonFrame").button(:caption, "Click Me").enabled?)
127
- assert_raises( UnknownObjectException , "UnknownObjectException was supposed to be thrown ( no frame name supplied) " ) { $ie.button(:caption, "Disabled Button").enabled?}
128
- end
98
+ assert_raises(ObjectDisabledException , "ObjectDisabledException was supposed to be thrown" ) { $ie.button(:caption, "Disabled Button").click }
99
+
100
+ $ie.button(:caption, "Click Me").click
101
+ assert($ie.text.include?("PASS") )
102
+ end
103
+
104
+ def test_Button_Exists
105
+ assert($ie.button(:caption, "Click Me").exists?)
106
+ assert($ie.button(:caption, "Submit").exists?)
107
+ assert($ie.button(:name, "b1").exists?)
108
+ assert($ie.button(:id, "b2").exists?)
109
+ assert($ie.button(:caption, /sub/i).exists?)
110
+
111
+ assert(!$ie.button(:caption, "missingcaption").exists?)
112
+ assert(!$ie.button(:name, "missingname").exists?)
113
+ assert(!$ie.button(:id, "missingid").exists?)
114
+ assert(!$ie.button(:caption, /missing/i).exists?)
115
+ end
116
+
117
+ def test_Button_Enabled
118
+ assert($ie.button(:caption, "Click Me").enabled?)
119
+ assert(!$ie.button(:caption, "Disabled Button").enabled?)
120
+ assert(!$ie.button(:name, "b4").enabled?)
121
+ assert(!$ie.button(:id, "b5").enabled?)
122
+
123
+ assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) { $ie.button(:name, "noName").enabled? }
124
+ end
125
+
126
+ def test_frame
127
+ goto_frames_page
129
128
 
129
+ assert($ie.frame("buttonFrame").button(:caption, "Click Me").enabled?)
130
+ assert_raises( UnknownObjectException , "UnknownObjectException was supposed to be thrown ( no frame name supplied) " ) { $ie.button(:caption, "Disabled Button").enabled?}
131
+ end
132
+
130
133
  end
131
134