commonwatir 3.0.0.rc3 → 3.0.0
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/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
|
-
|