commonwatir 3.0.0.rc3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +24 -0
- data/Rakefile +3 -14
- data/commonwatir.gemspec +18 -0
- data/lib/watir.rb +1 -14
- metadata +19 -131
- data/CHANGES +0 -712
- data/LICENSE +0 -34
- data/README.rdoc +0 -101
- data/VERSION +0 -1
- data/lib/watir/assertions.rb +0 -44
- data/lib/watir/browser.rb +0 -149
- data/lib/watir/browsers.rb +0 -13
- data/lib/watir/element_extensions.rb +0 -69
- data/lib/watir/exceptions.rb +0 -50
- data/lib/watir/matches.rb +0 -23
- data/lib/watir/options.rb +0 -56
- data/lib/watir/testcase.rb +0 -97
- data/lib/watir/util.rb +0 -35
- data/lib/watir/version.rb +0 -4
- data/lib/watir/wait.rb +0 -41
- data/lib/watir/wait_helper.rb +0 -12
- data/lib/watir/waiter.rb +0 -98
- data/unittests/attach_to_existing_window_test.rb +0 -70
- data/unittests/browser_test.rb +0 -38
- data/unittests/buttons_test.rb +0 -288
- data/unittests/dd_test.rb +0 -84
- data/unittests/dl_test.rb +0 -82
- data/unittests/dt_test.rb +0 -82
- data/unittests/element_collections_test.rb +0 -22
- data/unittests/element_test.rb +0 -24
- data/unittests/em_test.rb +0 -81
- data/unittests/form2_test.rb +0 -22
- data/unittests/html/blankpage.html +0 -11
- data/unittests/html/buttons1.html +0 -40
- data/unittests/html/buttons2.html +0 -60
- data/unittests/html/definition_lists.html +0 -48
- data/unittests/html/elements.html +0 -13
- data/unittests/html/emphasis.html +0 -12
- data/unittests/html/entertainment_com.html +0 -667
- data/unittests/html/frame_buttons.html +0 -4
- data/unittests/html/images/button.jpg +0 -0
- data/unittests/html/pass.html +0 -10
- data/unittests/html/phrase_elements.html +0 -15
- data/unittests/html/select_lists.html +0 -18
- data/unittests/html/utf8.html +0 -12
- data/unittests/html/visibility.html +0 -90
- data/unittests/html/wait.html +0 -15
- data/unittests/html/watir_unit_tests.css +0 -64
- data/unittests/html/whitespace.html +0 -29
- data/unittests/options.yml.example +0 -13
- data/unittests/select_list_test.rb +0 -19
- data/unittests/setup.rb +0 -17
- data/unittests/setup/browser.rb +0 -14
- data/unittests/setup/capture_io_helper.rb +0 -17
- data/unittests/setup/filter.rb +0 -24
- data/unittests/setup/lib.rb +0 -22
- data/unittests/setup/options.rb +0 -29
- data/unittests/setup/testUnitAddons.rb +0 -8
- data/unittests/setup/watir-unittest.rb +0 -78
- data/unittests/strong_test.rb +0 -46
- data/unittests/utf8_test.rb +0 -24
- data/unittests/visibility_test.rb +0 -47
- data/unittests/wait_test.rb +0 -126
- data/unittests/whitespace_test.rb +0 -46
data/lib/watir/matches.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
class String
|
2
|
-
def matches(x)
|
3
|
-
return self == x
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
|
-
class Regexp
|
8
|
-
def matches(x)
|
9
|
-
return self.match(x)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class Integer
|
14
|
-
def matches(x)
|
15
|
-
return self == x
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class Object
|
20
|
-
def matches(x)
|
21
|
-
raise TypeError, "#{self.class} is not supported as a locator"
|
22
|
-
end
|
23
|
-
end
|
data/lib/watir/options.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# watir/options
|
3
|
-
require 'rubygems'
|
4
|
-
|
5
|
-
require 'user-choices'
|
6
|
-
|
7
|
-
module Watir
|
8
|
-
@@options_file = nil
|
9
|
-
@@options = nil
|
10
|
-
class << self
|
11
|
-
# Specify the location of a yaml file containing Watir options. Must be
|
12
|
-
# specified before the options are parsed.
|
13
|
-
def options_file= file
|
14
|
-
@@options_file = file
|
15
|
-
end
|
16
|
-
def options_file
|
17
|
-
@@options_file
|
18
|
-
end
|
19
|
-
def options= x
|
20
|
-
@@options = x
|
21
|
-
end
|
22
|
-
# Return the Watir options, as a hash. If they haven't been parsed yet,
|
23
|
-
# they will be now.
|
24
|
-
def options
|
25
|
-
@@options ||= Watir::WatirOptions.new.execute
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class WatirOptions < UserChoices::Command
|
30
|
-
include UserChoices
|
31
|
-
def add_sources builder
|
32
|
-
builder.add_source EnvironmentSource, :with_prefix, 'watir_'
|
33
|
-
if Watir.options_file
|
34
|
-
builder.add_source YamlConfigFileSource, :from_complete_path,
|
35
|
-
Watir.options_file
|
36
|
-
end
|
37
|
-
end
|
38
|
-
def add_choices builder
|
39
|
-
builder.add_choice :browser,
|
40
|
-
:type => Watir::Browser.browser_names,
|
41
|
-
:default => Watir::Browser.default
|
42
|
-
builder.add_choice :speed,
|
43
|
-
:type => ['slow', 'fast', 'zippy'],
|
44
|
-
:default => 'fast'
|
45
|
-
builder.add_choice :visible,
|
46
|
-
:type => :boolean
|
47
|
-
builder.add_choice :zero_based_indexing,
|
48
|
-
:type => :boolean,
|
49
|
-
:default => true
|
50
|
-
end
|
51
|
-
def execute
|
52
|
-
@user_choices[:speed] = @user_choices[:speed].to_sym
|
53
|
-
@user_choices
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/lib/watir/testcase.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'watir/assertions'
|
3
|
-
|
4
|
-
module Watir
|
5
|
-
|
6
|
-
# This is a 'test/unit' testcase customized to exeucte test methods sequentially by default
|
7
|
-
# and extra assertions
|
8
|
-
#
|
9
|
-
# Example Usage
|
10
|
-
#
|
11
|
-
# require 'watir/testcase'
|
12
|
-
#
|
13
|
-
# class MyTestCase < Watir::TestCase
|
14
|
-
#
|
15
|
-
# # some helpers
|
16
|
-
# @@browser = nil
|
17
|
-
# def browser
|
18
|
-
# @browser ||= Watir::IE.start(:url, 'http://watir.com/")
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# # TESTS
|
22
|
-
# def test_text
|
23
|
-
# browser.goto "http://watir.com/"
|
24
|
-
# verify_match "Web Application Testing in Ruby", browser.text
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# def test_title
|
28
|
-
# verify browser.title == 'Watir'
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
# def test_link
|
32
|
-
# verify_match 'watir.com', browser.link(:text, 'Home').href
|
33
|
-
# end
|
34
|
-
#
|
35
|
-
# def test_navigate_to_examples
|
36
|
-
# browser.div(:id, 'nav').link(:text, 'Examples').click
|
37
|
-
# end
|
38
|
-
#
|
39
|
-
# def test_url
|
40
|
-
# verify_equal browser.url, 'http://watir.com/examples/'
|
41
|
-
# end
|
42
|
-
#
|
43
|
-
# end
|
44
|
-
#
|
45
|
-
class TestCase < Test::Unit::TestCase
|
46
|
-
include Watir::Assertions
|
47
|
-
@@order = :sequentially
|
48
|
-
def initialize name
|
49
|
-
throw :invalid_test if name == :default_test && self.class == Watir::TestCase
|
50
|
-
super
|
51
|
-
end
|
52
|
-
class << self
|
53
|
-
attr_accessor :test_methods, :order
|
54
|
-
def test_methods
|
55
|
-
@test_methods ||= []
|
56
|
-
end
|
57
|
-
def order
|
58
|
-
@order || @@order
|
59
|
-
end
|
60
|
-
def default_order= order
|
61
|
-
@@order = order
|
62
|
-
end
|
63
|
-
def sorted_test_methods
|
64
|
-
case order
|
65
|
-
when :alphabetically then test_methods.sort
|
66
|
-
when :sequentially then test_methods
|
67
|
-
when :reversed_sequentially then test_methods.reverse
|
68
|
-
when :reversed_alphabetically then test_methods.sort.reverse
|
69
|
-
else raise ArgumentError, "Execute option not supported: #{@order}"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
def suite
|
73
|
-
suite = Test::Unit::TestSuite.new(name)
|
74
|
-
sorted_test_methods.each do |test|
|
75
|
-
catch :invalid_test do
|
76
|
-
suite << new(test)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
if (suite.empty?)
|
80
|
-
catch :invalid_test do
|
81
|
-
suite << new(:default_test)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
return suite
|
85
|
-
end
|
86
|
-
def method_added id
|
87
|
-
name = id.id2name
|
88
|
-
test_methods << name if name =~ /^test./
|
89
|
-
end
|
90
|
-
def execute order
|
91
|
-
@order = order
|
92
|
-
end
|
93
|
-
end
|
94
|
-
public :add_assertion
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
data/lib/watir/util.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Watir
|
2
|
-
class Util
|
3
|
-
class << self
|
4
|
-
#
|
5
|
-
# "Watir::Span" => "Span"
|
6
|
-
#
|
7
|
-
def demodulize(str)
|
8
|
-
str.gsub(/^.*::/, '')
|
9
|
-
end
|
10
|
-
|
11
|
-
#
|
12
|
-
# "FooBar" => "foo_bar"
|
13
|
-
#
|
14
|
-
def underscore(str)
|
15
|
-
str.gsub(/\B[A-Z][^A-Z]/, '_\&').downcase.gsub(' ', '_')
|
16
|
-
end
|
17
|
-
|
18
|
-
#
|
19
|
-
# "Checkboxes" => "Checkbox"
|
20
|
-
# "Bodies" => "Body"
|
21
|
-
# "Buttons" => "Button"
|
22
|
-
#
|
23
|
-
def singularize(str)
|
24
|
-
case str.downcase
|
25
|
-
when "checkboxes"
|
26
|
-
str.chop.chop
|
27
|
-
when "bodies"
|
28
|
-
str.chop.chop.chop + "y"
|
29
|
-
else
|
30
|
-
str.chop
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/watir/version.rb
DELETED
data/lib/watir/wait.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Watir
|
4
|
-
module Wait
|
5
|
-
extend self
|
6
|
-
|
7
|
-
class TimeoutError < StandardError
|
8
|
-
end
|
9
|
-
|
10
|
-
#
|
11
|
-
# Wait until the block evaluates to true or times out.
|
12
|
-
#
|
13
|
-
|
14
|
-
def until(timeout = 60, &block)
|
15
|
-
end_time = ::Time.now + timeout
|
16
|
-
|
17
|
-
until ::Time.now > end_time
|
18
|
-
result = yield(self)
|
19
|
-
return result if result
|
20
|
-
sleep 0.1
|
21
|
-
end
|
22
|
-
|
23
|
-
raise TimeoutError, "timed out after #{timeout} seconds"
|
24
|
-
end
|
25
|
-
|
26
|
-
#
|
27
|
-
# Wait while the block evaluates to true or times out.
|
28
|
-
#
|
29
|
-
def while(timeout = 60, &block)
|
30
|
-
end_time = ::Time.now + timeout
|
31
|
-
|
32
|
-
until ::Time.now > end_time
|
33
|
-
return unless yield(self)
|
34
|
-
sleep 0.1
|
35
|
-
end
|
36
|
-
|
37
|
-
raise TimeoutError, "timed out after #{timeout} seconds"
|
38
|
-
end
|
39
|
-
|
40
|
-
end # Wait
|
41
|
-
end # Watir
|
data/lib/watir/wait_helper.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
# include this module if there's a need to have wait_until and wait_while methods in some different scope
|
2
|
-
module Watir
|
3
|
-
module WaitHelper
|
4
|
-
def wait_until(*args, &blk)
|
5
|
-
Wait.until(*args, &blk)
|
6
|
-
end
|
7
|
-
|
8
|
-
def wait_while(*args, &blk)
|
9
|
-
Wait.while(*args, &blk)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
data/lib/watir/waiter.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
#######
|
2
|
-
#
|
3
|
-
# Using Watir::Waiter is DEPRECATED and will be removed in some newer version of Watir! Use Watir::Wait and Watir::ElementExtensions methods instead!
|
4
|
-
#
|
5
|
-
#######
|
6
|
-
require 'watir/exceptions'
|
7
|
-
|
8
|
-
module Watir
|
9
|
-
|
10
|
-
def wait_until(*args)
|
11
|
-
Waiter.wait_until(*args) {yield}
|
12
|
-
end
|
13
|
-
|
14
|
-
class TimeKeeper
|
15
|
-
attr_reader :sleep_time
|
16
|
-
def initialize
|
17
|
-
@sleep_time = 0.0
|
18
|
-
end
|
19
|
-
def sleep seconds
|
20
|
-
@sleep_time += Kernel.sleep seconds
|
21
|
-
end
|
22
|
-
def now
|
23
|
-
::Time.now
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Waiter
|
28
|
-
# This is an interface to a TimeKeeper which proxies
|
29
|
-
# calls to "sleep" and "Time.now".
|
30
|
-
# Useful for unit testing Waiter.
|
31
|
-
attr_accessor :timer
|
32
|
-
|
33
|
-
# How long to wait between each iteration through the wait_until
|
34
|
-
# loop. In seconds.
|
35
|
-
attr_accessor :polling_interval
|
36
|
-
|
37
|
-
# Timeout for wait_until.
|
38
|
-
attr_accessor :timeout
|
39
|
-
|
40
|
-
@@default_polling_interval = 0.5
|
41
|
-
@@default_timeout = 60.0
|
42
|
-
|
43
|
-
def initialize(timeout=@@default_timeout,
|
44
|
-
polling_interval=@@default_polling_interval)
|
45
|
-
Kernel.warn "Using Watir::Waiter is DEPRECATED and will be removed in some newer version of Watir! Use Watir::Wait and Watir::ElementExtensions methods instead!"
|
46
|
-
@timeout = timeout
|
47
|
-
@polling_interval = polling_interval
|
48
|
-
@timer = TimeKeeper.new
|
49
|
-
end
|
50
|
-
|
51
|
-
# Execute the provided block until either (1) it returns true, or
|
52
|
-
# (2) the timeout (in seconds) has been reached. If the timeout is reached,
|
53
|
-
# a TimeOutException will be raised. The block will always
|
54
|
-
# execute at least once.
|
55
|
-
#
|
56
|
-
# waiter = Waiter.new(5)
|
57
|
-
# waiter.wait_until {puts 'hello'}
|
58
|
-
#
|
59
|
-
# This code will print out "hello" for five seconds, and then raise a
|
60
|
-
# Watir::TimeOutException.
|
61
|
-
def wait_until # block
|
62
|
-
start_time = now
|
63
|
-
until yield do
|
64
|
-
if (duration = now - start_time) > @timeout
|
65
|
-
raise Watir::Exception::TimeOutException.new(duration, @timeout),
|
66
|
-
"Timed out after #{duration} seconds."
|
67
|
-
end
|
68
|
-
sleep @polling_interval
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
# Execute the provided block until either (1) it returns true, or
|
73
|
-
# (2) the timeout (in seconds) has been reached. If the timeout is reached,
|
74
|
-
# a TimeOutException will be raised. The block will always
|
75
|
-
# execute at least once.
|
76
|
-
#
|
77
|
-
# Waiter.wait_until(5) {puts 'hello'}
|
78
|
-
#
|
79
|
-
# This code will print out "hello" for five seconds, and then raise a
|
80
|
-
# Watir::TimeOutException.
|
81
|
-
|
82
|
-
# IDEA: wait_until: remove defaults from Waiter.wait_until
|
83
|
-
def self.wait_until(timeout=@@default_timeout,
|
84
|
-
polling_interval=@@default_polling_interval)
|
85
|
-
waiter = new(timeout, polling_interval)
|
86
|
-
waiter.wait_until { yield }
|
87
|
-
end
|
88
|
-
|
89
|
-
private
|
90
|
-
def sleep seconds
|
91
|
-
@timer.sleep seconds
|
92
|
-
end
|
93
|
-
def now
|
94
|
-
@timer.now
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
end # module
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# feature tests for attaching to existing IE windows
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') unless $SETUP_LOADED
|
4
|
-
require 'unittests/setup'
|
5
|
-
|
6
|
-
class TC_ExistingWindow < Test::Unit::TestCase
|
7
|
-
location __FILE__
|
8
|
-
include Watir
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@original_timeout = Browser.options[:attach_timeout]
|
12
|
-
@browsers = []
|
13
|
-
uses_page "pass.html"
|
14
|
-
end
|
15
|
-
|
16
|
-
def teardown
|
17
|
-
Browser.set_options :attach_timeout => @original_timeout
|
18
|
-
@browsers.each {|x| x.close}
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_missing_window
|
22
|
-
Browser.set_options :attach_timeout => 0.1
|
23
|
-
assert_raises(NoMatchingWindowFoundException) { Browser.attach(:title, "missing") }
|
24
|
-
assert_raises(NoMatchingWindowFoundException) { Browser.attach(:title, /missing/) }
|
25
|
-
assert_raises(NoMatchingWindowFoundException) { Browser.attach(:url, "missing") }
|
26
|
-
assert_raises(NoMatchingWindowFoundException) { Browser.attach(:url, /missing/) }
|
27
|
-
end
|
28
|
-
|
29
|
-
# Open a few browsers so that the test has a few windows to choose
|
30
|
-
# from. The test harness has already opened a window that we won't
|
31
|
-
# use.
|
32
|
-
def open_several_windows
|
33
|
-
["buttons1.html", "whitespace.html"].each do |file|
|
34
|
-
@browsers << Browser.start(self.class.html_root + file)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_existing_window
|
39
|
-
open_several_windows
|
40
|
-
|
41
|
-
b1 = Browser.attach(:title , /buttons/i)
|
42
|
-
assert_equal("Test page for buttons", b1.title)
|
43
|
-
|
44
|
-
b2 = Browser.attach(:title , "Test page for buttons")
|
45
|
-
assert_equal("Test page for buttons", b2.title)
|
46
|
-
|
47
|
-
b3 = Browser.attach(:url, /buttons1.html/)
|
48
|
-
assert_equal("Test page for buttons", b3.title)
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_title_and_url_are_correct_after_reload
|
52
|
-
uses_page "whitespace.html"
|
53
|
-
assert_equal 'Test page for whitespace', browser.title
|
54
|
-
assert_match /whitespace.html/, browser.url
|
55
|
-
browser.link(:text, 'Login').click
|
56
|
-
assert_equal 'Pass Page', browser.title
|
57
|
-
assert_match /pass.html/, browser.url
|
58
|
-
end
|
59
|
-
|
60
|
-
tag_method :test_working_back_and_forth, :fails_on_firefox
|
61
|
-
def test_working_back_and_forth
|
62
|
-
open_several_windows
|
63
|
-
buttons = Browser.attach(:url, /buttons1.html/)
|
64
|
-
whitespace = Browser.attach(:url, /whitespace.html/)
|
65
|
-
assert_match /This button is a submit/, buttons.text
|
66
|
-
whitespace.link(:text, 'Login').click
|
67
|
-
assert_match /pass/i, whitespace.text
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|