watir 1.4.1 → 1.5.2
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.
- data/bin/watir-console +1 -0
- data/changes.rb +119 -0
- data/license.rb +37 -0
- data/readme.rb +55 -120
- data/unittests/buttons_test.rb +107 -104
- data/unittests/buttons_xpath_test.rb +69 -0
- data/unittests/checkbox_test.rb +154 -141
- data/unittests/checkbox_xpath_test.rb +107 -0
- data/unittests/core_tests.rb +6 -2
- data/unittests/css_test.rb +50 -50
- data/unittests/defer_test.rb +47 -0
- data/unittests/dialog_test.rb +78 -0
- data/unittests/div2_xpath_test.rb +22 -0
- data/unittests/div_test.rb +159 -159
- data/unittests/div_xpath_test.rb +96 -0
- data/unittests/errorchecker_test.rb +22 -22
- data/unittests/filefield_test.rb +30 -23
- data/unittests/filefield_xpath_test.rb +35 -0
- data/unittests/form_test.rb +250 -229
- data/unittests/form_xpath_test.rb +253 -0
- data/unittests/frame_test.rb +123 -108
- data/unittests/google_form_test.rb +17 -0
- data/unittests/html/JavascriptClick.html +39 -0
- data/unittests/html/buttons1.html +3 -2
- data/unittests/html/checkboxes1.html +32 -14
- data/unittests/html/complex_table.html +1 -1
- data/unittests/html/depot_store.html +59 -0
- data/unittests/html/div.html +3 -21
- data/unittests/html/div_xml.html +21 -0
- data/unittests/html/fileupload.html +2 -2
- data/unittests/html/forms2.html +3 -3
- data/unittests/html/forms3.html +2 -2
- data/unittests/html/frame_links.html +2 -2
- data/unittests/html/google_india.html +119 -0
- data/unittests/html/iframeTest.html +2 -2
- data/unittests/html/images/map.GIF +0 -0
- data/unittests/html/images/map2.gif +0 -0
- data/unittests/html/images1.html +17 -2
- data/unittests/html/javascriptevents.html +3 -7
- data/unittests/html/links1.html +9 -8
- data/unittests/html/links_multi.html +14 -0
- data/unittests/html/list_matters.html +720 -0
- data/unittests/html/lists.html +18 -0
- data/unittests/html/map_test.html +31 -0
- data/unittests/html/modal_dialog.html +10 -0
- data/unittests/html/modal_dialog_launcher.html +12 -0
- data/unittests/html/new_browser.html +17 -0
- data/unittests/html/pass.html +3 -0
- data/unittests/html/popups1.html +1 -1
- data/unittests/html/pre.html +28 -0
- data/unittests/html/radioButtons1.html +6 -5
- data/unittests/html/selectboxes1.html +12 -11
- data/unittests/html/simple_table.html +1 -1
- data/unittests/html/simple_table_columns.html +1 -1
- data/unittests/html/table1.html +1 -1
- data/unittests/html/tableCell_using_xpath.html +19 -0
- data/unittests/html/textfields1.html +6 -4
- data/unittests/html/xpath_nbsp.html +12 -0
- data/unittests/ie_exists_test.rb +32 -0
- data/unittests/ie_mock.rb +78 -79
- data/unittests/ie_test.rb +39 -39
- data/unittests/images_test.rb +132 -155
- data/unittests/images_xpath_test.rb +91 -0
- data/unittests/links_multi_test.rb +36 -0
- data/unittests/links_test.rb +158 -152
- data/unittests/links_xpath_test.rb +40 -0
- data/unittests/lists_test.rb +29 -0
- data/unittests/map_test.rb +99 -0
- data/unittests/minmax_test.rb +23 -23
- data/unittests/navigate_test.rb +43 -51
- data/unittests/nbsp_xpath_test.rb +18 -0
- data/unittests/other/WindowLogonExample.rb +28 -0
- data/unittests/{WindowLogonExtra.rb → other/WindowLogonExtra.rb} +0 -0
- data/unittests/{all_tests_concurrent.rb → other/all_tests_concurrent.rb} +23 -23
- data/unittests/other/navigate_exception_test.rb +14 -0
- data/unittests/other/rexml_unit_test.rb +24 -0
- data/unittests/other/testcase_method_order_test.rb +36 -0
- data/unittests/other/testcase_verify_test.rb +25 -0
- data/unittests/other/wait_until_test.rb +99 -0
- data/unittests/pagecontainstext_test.rb +56 -37
- data/unittests/parent_child_test.rb +55 -0
- data/unittests/popups_test.rb +37 -37
- data/unittests/pre_test.rb +52 -0
- data/unittests/radios_test.rb +186 -155
- data/unittests/radios_xpath_test.rb +101 -0
- data/unittests/screen_capture_test.rb +41 -41
- data/unittests/selectbox_test.rb +223 -181
- data/unittests/selectbox_xpath_test.rb +113 -0
- data/unittests/setup.rb +29 -25
- data/unittests/speed_settings_test.rb +22 -0
- data/unittests/table_cell_using_xpath_test.rb +40 -0
- data/unittests/table_test.rb +315 -284
- data/unittests/table_xpath_test.rb +114 -0
- data/unittests/textarea_test.rb +81 -0
- data/unittests/textarea_xpath_test.rb +82 -0
- data/unittests/textfields_test.rb +205 -229
- data/unittests/textfields_xpath_test.rb +111 -0
- data/unittests/window_tests.rb +7 -0
- data/unittests/windows/attach_to_existing_window_test.rb +52 -0
- data/unittests/windows/attach_to_new_window_test.rb +82 -0
- data/unittests/windows/close_window_test.rb +22 -0
- data/unittests/windows/frame_links_test.rb +25 -0
- data/unittests/windows/ie-each_test.rb +48 -0
- data/unittests/windows/iedialog_test.rb +55 -0
- data/unittests/windows/js_events_test.rb +57 -0
- data/unittests/windows/jscriptExtraAlert.rb +6 -0
- data/unittests/windows/jscriptExtraConfirmCancel.rb +7 -0
- data/unittests/windows/jscriptExtraConfirmOk.rb +7 -0
- data/unittests/{jscriptPushButton.rb → windows/jscriptPushButton.rb} +1 -1
- data/unittests/windows/jscript_test.rb +64 -0
- data/unittests/windows/modal_dialog_test.rb +127 -0
- data/unittests/windows/new.rb +56 -0
- data/unittests/windows/open_close_test.rb +22 -0
- data/unittests/windows/send_keys_test.rb +34 -0
- data/unittests/xpath_tests.rb +10 -0
- data/watir.rb +4344 -3565
- data/watir/IEDialog/Release/IEDialog.dll +0 -0
- data/watir/WindowHelper.rb +13 -11
- data/watir/assertions.rb +36 -0
- data/watir/camel_case.rb +14 -5
- data/watir/close_all.rb +38 -0
- data/watir/contrib/enabled_popup.rb +21 -0
- data/watir/contrib/ie-new-process.rb +27 -0
- data/watir/contrib/page_checker.rb +29 -0
- data/watir/contrib/visible.rb +47 -0
- data/watir/cookiemanager.rb +4 -4
- data/watir/datahandler.rb +107 -0
- data/watir/dialog.rb +46 -0
- data/watir/elements.rb +65 -0
- data/watir/exceptions.rb +18 -36
- data/watir/ie-process.rb +40 -0
- data/watir/irb-history.rb +31 -0
- data/watir/process.rb +20 -0
- data/watir/testUnitAddons.rb +3 -42
- data/watir/testcase.rb +58 -0
- data/watir/utils.rb +20 -0
- data/watir/waiter.rb +88 -0
- data/watir/watir_simple.rb +4 -4
- data/watir/win32ole.rb +8 -0
- data/watir/win32ole/win32ole.so +0 -0
- data/watir/winClicker.rb +374 -400
- metadata +209 -128
- data/unittests/WindowLogonExample.rb +0 -30
- data/unittests/attachToExistingWindow_test.rb +0 -40
- data/unittests/js_events_test.rb +0 -77
- data/unittests/jscriptExtraAlert.rb +0 -6
- data/unittests/jscriptExtraConfirmCancel.rb +0 -7
- data/unittests/jscriptExtraConfirmOk.rb +0 -7
- data/unittests/jscript_test.rb +0 -57
- data/unittests/send_keys_test.rb +0 -29
- data/unittests/textAreafields_test.rb +0 -81
data/unittests/minmax_test.rb
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
# feature tests for minimizing and maximizing IE windows
|
|
2
|
-
# revision: $Revision:
|
|
2
|
+
# revision: $Revision: 958 $
|
|
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_MinMax< Test::Unit::TestCase
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
8
|
+
include Watir
|
|
9
|
+
def setup
|
|
10
|
+
$ie.goto($htmlRoot + 'pass.html')
|
|
11
|
+
end
|
|
12
|
+
def teardown
|
|
13
|
+
$ie.restore
|
|
14
|
+
end
|
|
15
|
+
def test_minimimum
|
|
16
|
+
$ie.minimize
|
|
17
|
+
end
|
|
18
|
+
def test_maximum
|
|
19
|
+
$ie.maximize
|
|
20
|
+
end
|
|
21
|
+
def test_front
|
|
22
|
+
assert $ie.front?
|
|
23
|
+
ie2 = IE.start($htmlRoot + 'blankpage.html')
|
|
24
|
+
assert ie2.front?
|
|
25
|
+
assert_false $ie.front?
|
|
26
|
+
$ie.bring_to_front
|
|
27
|
+
assert $ie.front?
|
|
28
|
+
ie2.close
|
|
29
|
+
end
|
|
30
30
|
end
|
|
31
31
|
|
data/unittests/navigate_test.rb
CHANGED
|
@@ -1,56 +1,48 @@
|
|
|
1
1
|
# feature tests for navigation
|
|
2
|
-
# revision: $Revision:
|
|
2
|
+
# revision: $Revision: 1009 $
|
|
3
3
|
|
|
4
4
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
|
|
5
5
|
require 'unittests/setup'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
# this is commented out as it depends on too many things.....
|
|
49
|
-
|
|
50
|
-
assert_raises(NavigationException) { $ie.goto('http://localhost:3001') } # Cannot find server or DNS Error
|
|
51
|
-
assert_raises(NavigationException) { $ie.goto('http://www.fxruby.org/dfdf' ) } # HTTP 404 - File not found
|
|
52
|
-
|
|
53
|
-
end
|
|
54
|
-
|
|
6
|
+
require 'CGI'
|
|
7
|
+
|
|
8
|
+
class TC_Navigate < Test::Unit::TestCase
|
|
9
|
+
include Watir
|
|
10
|
+
|
|
11
|
+
def goto_page(a)
|
|
12
|
+
$ie.goto($htmlRoot + a)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_navigation
|
|
16
|
+
$ie.clear_url_list
|
|
17
|
+
goto_page('buttons1.html')
|
|
18
|
+
url = $ie.url.downcase.gsub('///' , '//') # no idea why this happens - we get 3 / after file:
|
|
19
|
+
url = CGI::unescape(url) # url is encoded so we need to
|
|
20
|
+
assert_equal(url.downcase, ($htmlRoot + 'buttons1.html' ).downcase ) # sometimes we get capital drive letters
|
|
21
|
+
|
|
22
|
+
assert_equal(1, $ie.url_list.length)
|
|
23
|
+
assert_equal(url, $ie.url_list[0].gsub('\\', '/').downcase)
|
|
24
|
+
|
|
25
|
+
goto_page('checkboxes1.html')
|
|
26
|
+
url = $ie.url.downcase.gsub('///' , '//') # no idea why this happens - we get 3 / after file:
|
|
27
|
+
url = CGI::unescape(url) # url is encoded so we need to
|
|
28
|
+
|
|
29
|
+
assert_equal($ie.title, "Test page for Check Boxes")
|
|
30
|
+
assert_equal(2, $ie.url_list.length)
|
|
31
|
+
assert_equal(url, $ie.url_list[1].gsub('\\', '/').downcase)
|
|
32
|
+
|
|
33
|
+
$ie.clear_url_list
|
|
34
|
+
assert_equal(0, $ie.url_list.length )
|
|
35
|
+
|
|
36
|
+
$ie.back
|
|
37
|
+
assert_equal($ie.title , "Test page for buttons")
|
|
38
|
+
|
|
39
|
+
$ie.forward
|
|
40
|
+
assert_equal($ie.title , "Test page for Check Boxes")
|
|
41
|
+
|
|
42
|
+
$ie.checkBox(:name, "box1").set
|
|
43
|
+
assert($ie.checkBox(:name, "box1").isSet?)
|
|
44
|
+
|
|
45
|
+
$ie.refresh
|
|
46
|
+
# Not sure how we test this. Text fields and checkboxes dont get reset if you click the browser refresh button
|
|
47
|
+
end
|
|
55
48
|
end
|
|
56
|
-
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# feature tests for Tables
|
|
2
|
+
# revision: $Revision: 1076 $
|
|
3
|
+
|
|
4
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
|
|
5
|
+
require 'unittests/setup'
|
|
6
|
+
|
|
7
|
+
class TC_Tables < Test::Unit::TestCase
|
|
8
|
+
include Watir
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
$ie.goto($htmlRoot + "xpath_nbsp.html")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_nbsp
|
|
15
|
+
div = $ie.element_by_xpath("//div")
|
|
16
|
+
assert(div.innerText, "Hello world")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
|
|
2
|
+
require 'unittests/setup'
|
|
3
|
+
require 'watir/WindowHelper'
|
|
4
|
+
|
|
5
|
+
class TC_Logon_Test < Test::Unit::TestCase
|
|
6
|
+
include Watir
|
|
7
|
+
|
|
8
|
+
def goto_windows_login_page
|
|
9
|
+
$ie.goto('http://clio.lyris.com/')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def test_window_logon
|
|
14
|
+
|
|
15
|
+
a = Thread.new {
|
|
16
|
+
system('ruby WindowLogonExtra.rb')
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
b = Thread.new {
|
|
20
|
+
goto_windows_login_page
|
|
21
|
+
}
|
|
22
|
+
a.join
|
|
23
|
+
b.join
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
end
|
|
File without changes
|
|
@@ -14,19 +14,19 @@ require 'unittests/checkbox_test'
|
|
|
14
14
|
require 'test/unit/testsuite'
|
|
15
15
|
require 'thread'
|
|
16
16
|
class ConcurrentTestSuite < Test::Unit::TestSuite
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
threads.each {|t| t.join}
|
|
28
|
-
yield(FINISHED, name)
|
|
17
|
+
|
|
18
|
+
# Runs the tests and/or suites contained in this TestSuite.
|
|
19
|
+
def run(result, &progress_block)
|
|
20
|
+
yield(STARTED, name)
|
|
21
|
+
threads = []
|
|
22
|
+
@tests.each do |test|
|
|
23
|
+
threads << Thread.new do
|
|
24
|
+
test.run(result, &progress_block)
|
|
29
25
|
end
|
|
26
|
+
end
|
|
27
|
+
threads.each {|t| t.join}
|
|
28
|
+
yield(FINISHED, name)
|
|
29
|
+
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# create a suite
|
|
@@ -36,19 +36,19 @@ require 'test/unit/collector'
|
|
|
36
36
|
include Test::Unit::Collector
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
@filters = []
|
|
40
|
+
suite = ConcurrentTestSuite.new('super suite')
|
|
41
|
+
sub_suites = []
|
|
42
|
+
::ObjectSpace.each_object(Class) do |klass|
|
|
43
|
+
if(Test::Unit::TestCase > klass)
|
|
44
|
+
puts sub_suites, klass.suite
|
|
45
|
+
add_suite(sub_suites, klass.suite)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
sort(sub_suites).each{|s| suite << s}
|
|
49
|
+
|
|
49
50
|
|
|
50
51
|
|
|
51
|
-
|
|
52
52
|
# select a runner
|
|
53
53
|
require 'test/unit/ui/console/testrunner'
|
|
54
54
|
Test::Unit::UI::Console::TestRunner.run(suite)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# feature tests for navigation errors
|
|
2
|
+
# revision: $Revision: 958 $
|
|
3
|
+
|
|
4
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
|
|
5
|
+
require 'unittests/setup'
|
|
6
|
+
|
|
7
|
+
class TC_NavigateException < Test::Unit::TestCase
|
|
8
|
+
include Watir
|
|
9
|
+
|
|
10
|
+
def test_http_errors
|
|
11
|
+
assert_raises(NavigationException) { $ie.goto('http://localhost:3001') } # Cannot find server or DNS Error
|
|
12
|
+
assert_raises(NavigationException) { $ie.goto('http://www.fxruby.org/dfdf' ) } # HTTP 404 - File not found
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require "rexml/document"
|
|
3
|
+
|
|
4
|
+
class RexmlTest < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
file = File.open( "xpath_bug.xml" )
|
|
7
|
+
@doc = REXML::Document.new file
|
|
8
|
+
end
|
|
9
|
+
def fixture xpath
|
|
10
|
+
matches = []
|
|
11
|
+
@doc.elements.each(xpath) do |element|
|
|
12
|
+
matches << element
|
|
13
|
+
assert_equal('Add', element.text)
|
|
14
|
+
assert_equal('ButtonText', element.attributes['class'])
|
|
15
|
+
end
|
|
16
|
+
assert_equal(1, matches.length)
|
|
17
|
+
end
|
|
18
|
+
def test_text
|
|
19
|
+
fixture "//div[text()='Add' and @class='ButtonText']"
|
|
20
|
+
end
|
|
21
|
+
def test_contains
|
|
22
|
+
fixture "//div[contains(.,'Add') and @class='ButtonText']"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# the default behavior of Test::Unit::TestCase should be to execute test
|
|
2
|
+
# methods in alphabetical order.
|
|
3
|
+
# When executed, should print "A.B.C.D.E.F.G.H.I.J.K.L.F"
|
|
4
|
+
# The final F is actually an expected failure:
|
|
5
|
+
# 1) Failure:
|
|
6
|
+
# default_test(TC4_No_Test_Methods)
|
|
7
|
+
|
|
8
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', '..') if $0 == __FILE__
|
|
9
|
+
|
|
10
|
+
require 'watir/testcase'
|
|
11
|
+
|
|
12
|
+
class TC1_Alphabetical_Default < Watir::TestCase
|
|
13
|
+
execute :alphabetically
|
|
14
|
+
def test_b; print 'B'; end
|
|
15
|
+
def test_a; print 'A'; end
|
|
16
|
+
def test_d; print 'D'; end
|
|
17
|
+
def test_c; print 'C'; end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class TC2_Sequential < Watir::TestCase
|
|
21
|
+
def test_b; print 'E'; end
|
|
22
|
+
def test_a; print 'F'; end
|
|
23
|
+
def test_d; print 'G'; end
|
|
24
|
+
def test_c; print 'H'; end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class TC3_Alphabetical_Specified < Watir::TestCase
|
|
28
|
+
execute :alphabetically
|
|
29
|
+
def test_b; print 'J'; end
|
|
30
|
+
def test_a; print 'I'; end
|
|
31
|
+
def test_d; print 'L'; end
|
|
32
|
+
def test_c; print 'K'; end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class TC4_No_Test_Methods < Watir::TestCase
|
|
36
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 3 tests, 10 assertions, 4 failures, 0 errors
|
|
2
|
+
|
|
3
|
+
require 'watir/testcase'
|
|
4
|
+
|
|
5
|
+
class VerifyTests < Watir::TestCase
|
|
6
|
+
|
|
7
|
+
def test_verify
|
|
8
|
+
verify true
|
|
9
|
+
assert true
|
|
10
|
+
verify false
|
|
11
|
+
assert true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_verify_equal
|
|
15
|
+
verify_equal 1, 1
|
|
16
|
+
verify_equal 1, 2
|
|
17
|
+
verify_equal 3, 4
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_verify_match
|
|
21
|
+
verify_match /\d*/, '123'
|
|
22
|
+
verify_match 'foo', 'foobar'
|
|
23
|
+
verify_match '...', 'A'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# feature tests for wait_until
|
|
2
|
+
|
|
3
|
+
require 'watir/testcase'
|
|
4
|
+
require 'watir/waiter'
|
|
5
|
+
require 'watir'
|
|
6
|
+
require 'spec' # gem install rspec
|
|
7
|
+
|
|
8
|
+
# used for unit testing
|
|
9
|
+
class MockTimeKeeper < Watir::TimeKeeper
|
|
10
|
+
def sleep seconds
|
|
11
|
+
@sleep_time += seconds
|
|
12
|
+
end
|
|
13
|
+
def now
|
|
14
|
+
Time.now + @sleep_time
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class WaitUntilInstanceTest < Watir::TestCase
|
|
19
|
+
|
|
20
|
+
def setup
|
|
21
|
+
@waiter = Watir::Waiter.new
|
|
22
|
+
@waiter.timeout = 10.0
|
|
23
|
+
@mock_checkee = Spec::Mocks::Mock.new "mock_checkee"
|
|
24
|
+
|
|
25
|
+
# remove this line to test with actual TimeKeeper intead of the Mock
|
|
26
|
+
# (slower, but more accurate)
|
|
27
|
+
@waiter.timer = MockTimeKeeper.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def teardown
|
|
31
|
+
@mock_checkee.__verify if @test_passed
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Instance Method
|
|
35
|
+
|
|
36
|
+
def test_no_time_passes_if_true
|
|
37
|
+
@waiter.wait_until {true}
|
|
38
|
+
@waiter.timer.sleep_time.should_equal 0.0
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_three_tries_before_true
|
|
42
|
+
@mock_checkee.should_receive(:check).exactly(3).times.and_return [false, false, true]
|
|
43
|
+
@waiter.wait_until {@mock_checkee.check}
|
|
44
|
+
@waiter.timer.sleep_time.should_equal 1.0
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_timeout
|
|
48
|
+
@mock_checkee.should_receive(:check).any_number_of_times.and_return false
|
|
49
|
+
lambda{@waiter.wait_until {@mock_checkee.check}}.should_raise Watir::Exception::TimeOutException
|
|
50
|
+
@waiter.timer.sleep_time.should_be_close 10.25, 0.26
|
|
51
|
+
@waiter.timer.sleep_time.should_satisfy {|x| [10.0, 10.5].include? x}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_polling_interval
|
|
55
|
+
@waiter.polling_interval = 0.1
|
|
56
|
+
@mock_checkee.should_receive(:check).any_number_of_times.and_return false
|
|
57
|
+
lambda{@waiter.wait_until {@mock_checkee.check}}.should_raise Watir::Exception::TimeOutException
|
|
58
|
+
@waiter.timer.sleep_time.should_be_close 10.05, 0.07
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_timeout_duration
|
|
62
|
+
@mock_checkee.should_receive(:check).any_number_of_times.and_return false
|
|
63
|
+
begin
|
|
64
|
+
@waiter.wait_until {@mock_checkee.check}
|
|
65
|
+
flunk
|
|
66
|
+
rescue Watir::Exception::TimeOutException => e
|
|
67
|
+
e.duration.should_be_close 10.25, 0.26
|
|
68
|
+
e.timeout.should_equal 10.0
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class WaitUntilClassTest < Watir::TestCase
|
|
74
|
+
|
|
75
|
+
def setup
|
|
76
|
+
@mock_checkee = Spec::Mocks::Mock.new "mock_checkee"
|
|
77
|
+
@mock_checkee.should_receive(:check).exactly(3).times.and_return [false, false, true]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def teardown
|
|
81
|
+
@mock_checkee.__verify if @test_passed
|
|
82
|
+
end
|
|
83
|
+
# Class method
|
|
84
|
+
|
|
85
|
+
def test_class_method_with_args
|
|
86
|
+
Watir::Waiter.wait_until(5, 0.1) {@mock_checkee.check}
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_class_method_with_defaults
|
|
90
|
+
Watir::Waiter.wait_until {@mock_checkee.check}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
include Watir
|
|
94
|
+
def test_watir_method
|
|
95
|
+
wait_until {@mock_checkee.check}
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|