watir-webdriver 0.6.1 → 0.6.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/.gitignore +2 -1
- data/.travis.yml +1 -0
- data/CHANGES.md +1693 -0
- data/Gemfile +0 -1
- data/Rakefile +22 -0
- data/lib/watir-webdriver/alert.rb +46 -0
- data/lib/watir-webdriver/aliases.rb +2 -2
- data/lib/watir-webdriver/atoms.rb +2 -2
- data/lib/watir-webdriver/atoms/README +0 -1
- data/lib/watir-webdriver/browser.rb +195 -14
- data/lib/watir-webdriver/cell_container.rb +14 -2
- data/lib/watir-webdriver/container.rb +22 -0
- data/lib/watir-webdriver/cookies.rb +41 -0
- data/lib/watir-webdriver/element_collection.rb +13 -3
- data/lib/watir-webdriver/elements/button.rb +3 -1
- data/lib/watir-webdriver/elements/checkbox.rb +8 -6
- data/lib/watir-webdriver/elements/dlist.rb +4 -4
- data/lib/watir-webdriver/elements/element.rb +153 -28
- data/lib/watir-webdriver/elements/file_field.rb +6 -4
- data/lib/watir-webdriver/elements/generated.rb +12 -8
- data/lib/watir-webdriver/elements/image.rb +10 -5
- data/lib/watir-webdriver/elements/input.rb +6 -0
- data/lib/watir-webdriver/elements/option.rb +28 -2
- data/lib/watir-webdriver/elements/radio.rb +5 -1
- data/lib/watir-webdriver/elements/select.rb +11 -9
- data/lib/watir-webdriver/elements/table.rb +8 -1
- data/lib/watir-webdriver/elements/table_cell.rb +3 -3
- data/lib/watir-webdriver/elements/table_row.rb +0 -1
- data/lib/watir-webdriver/elements/table_section.rb +8 -2
- data/lib/watir-webdriver/elements/text_area.rb +2 -2
- data/lib/watir-webdriver/elements/text_field.rb +2 -2
- data/lib/watir-webdriver/extensions/alerts.rb +3 -3
- data/lib/watir-webdriver/extensions/nokogiri.rb +2 -2
- data/lib/watir-webdriver/extensions/select_text.rb +2 -2
- data/lib/watir-webdriver/has_window.rb +23 -1
- data/lib/watir-webdriver/html.rb +2 -0
- data/lib/watir-webdriver/html/visitor.rb +2 -2
- data/lib/watir-webdriver/locators/element_locator.rb +8 -0
- data/lib/watir-webdriver/locators/text_field_locator.rb +1 -1
- data/lib/watir-webdriver/row_container.rb +11 -3
- data/lib/watir-webdriver/screenshot.rb +11 -0
- data/lib/watir-webdriver/user_editable.rb +10 -4
- data/lib/watir-webdriver/version.rb +2 -2
- data/lib/watir-webdriver/wait.rb +32 -11
- data/lib/watir-webdriver/window.rb +104 -1
- data/lib/watir-webdriver/xpath_support.rb +4 -0
- data/lib/yard/handlers/watir.rb +1 -1
- data/spec/element_locator_spec.rb +14 -1
- data/spec/html/clicks.html +1 -1
- data/spec/implementation.rb +29 -6
- data/spec/wait_spec.rb +2 -2
- data/support/travis.sh +5 -3
- data/support/version_differ.rb +59 -0
- data/watir-webdriver.gemspec +4 -3
- metadata +146 -149
- data/spec/alert_spec.rb +0 -91
- data/spec/html/alerts.html +0 -12
- data/spec/screenshot_spec.rb +0 -25
- data/support/html5.html +0 -102577
@@ -1,5 +1,16 @@
|
|
1
1
|
module Watir
|
2
2
|
module HasWindow
|
3
|
+
|
4
|
+
#
|
5
|
+
# Returns browser windows array.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# browser.a(:id => "open_new_window").click
|
9
|
+
# browser.windows(:title => "new")
|
10
|
+
#
|
11
|
+
# @return [Array<Window>]
|
12
|
+
#
|
13
|
+
|
3
14
|
def windows(*args)
|
4
15
|
all = @driver.window_handles.map { |handle| Window.new(@driver, :handle => handle) }
|
5
16
|
|
@@ -10,6 +21,16 @@ module Watir
|
|
10
21
|
end
|
11
22
|
end
|
12
23
|
|
24
|
+
#
|
25
|
+
# Returns browser window.
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# browser.a(:id => "open_new_window").click
|
29
|
+
# browser.window(:title => "new")
|
30
|
+
#
|
31
|
+
# @return [Window]
|
32
|
+
#
|
33
|
+
|
13
34
|
def window(*args, &blk)
|
14
35
|
win = Window.new @driver, extract_selector(args)
|
15
36
|
|
@@ -29,5 +50,6 @@ module Watir
|
|
29
50
|
selector.all? { |key, value| value === win.send(key) }
|
30
51
|
end
|
31
52
|
end
|
32
|
-
|
53
|
+
|
54
|
+
end # HasWindow
|
33
55
|
end # Watir
|
data/lib/watir-webdriver/html.rb
CHANGED
@@ -12,6 +12,8 @@ ActiveSupport::Inflector.inflections do |inflect|
|
|
12
12
|
inflect.plural /^s$/, 'ss'
|
13
13
|
inflect.plural 'meta', 'metas'
|
14
14
|
inflect.plural 'details', 'detailses'
|
15
|
+
inflect.plural 'data', 'datas'
|
16
|
+
inflect.plural 'datalist', 'datalists'
|
15
17
|
end
|
16
18
|
|
17
19
|
require "watir-webdriver/html/util"
|
@@ -146,9 +146,9 @@ module Watir
|
|
146
146
|
:string
|
147
147
|
when 'UnsignedLong', 'Long', 'Integer', 'Short', 'UnsignedShort'
|
148
148
|
:int
|
149
|
-
when 'Float',
|
149
|
+
when 'Float', /.*Double$/
|
150
150
|
:float
|
151
|
-
when 'Function'
|
151
|
+
when 'Function', /.*EventHandler$/
|
152
152
|
:function
|
153
153
|
when 'Boolean'
|
154
154
|
:bool
|
@@ -329,6 +329,10 @@ module Watir
|
|
329
329
|
return false
|
330
330
|
end
|
331
331
|
|
332
|
+
if selectors[:tag_name] == 'input' && selectors.has_key?(:type)
|
333
|
+
return false
|
334
|
+
end
|
335
|
+
|
332
336
|
if selectors.has_key?(:class) && selectors[:class] !~ /^[\w-]+$/ui
|
333
337
|
return false
|
334
338
|
end
|
@@ -369,6 +373,10 @@ module Watir
|
|
369
373
|
when :href
|
370
374
|
# TODO: change this behaviour?
|
371
375
|
'normalize-space(@href)'
|
376
|
+
when :type
|
377
|
+
# type attributes can be upper case - downcase them
|
378
|
+
# https://github.com/watir/watir-webdriver/issues/72
|
379
|
+
XpathSupport.downcase('@type')
|
372
380
|
else
|
373
381
|
"@#{key.to_s.gsub("_", "-")}"
|
374
382
|
end
|
@@ -3,7 +3,7 @@ module Watir
|
|
3
3
|
|
4
4
|
NON_TEXT_TYPES = %w[file radio checkbox submit reset image button hidden datetime date month week time datetime-local range color]
|
5
5
|
# TODO: better way of finding input text fields?
|
6
|
-
NEGATIVE_TYPE_EXPR = NON_TEXT_TYPES.map { |
|
6
|
+
NEGATIVE_TYPE_EXPR = NON_TEXT_TYPES.map { |type| "%s!=%s" % [XpathSupport.downcase('@type'), type.inspect] }.join(' and ')
|
7
7
|
|
8
8
|
def locate_all
|
9
9
|
find_all_by_multiple
|
@@ -1,6 +1,10 @@
|
|
1
1
|
module Watir
|
2
2
|
module RowContainer
|
3
3
|
|
4
|
+
#
|
5
|
+
# Returns table row.
|
6
|
+
#
|
7
|
+
|
4
8
|
def row(*args)
|
5
9
|
row = tr(*args)
|
6
10
|
row.locator_class = ChildRowLocator
|
@@ -8,13 +12,17 @@ module Watir
|
|
8
12
|
row
|
9
13
|
end
|
10
14
|
|
15
|
+
#
|
16
|
+
# Returns table rows collection.
|
17
|
+
#
|
18
|
+
|
11
19
|
def rows(*args)
|
12
20
|
rows = trs(*args)
|
13
21
|
rows.locator_class = ChildRowLocator
|
14
22
|
|
15
23
|
rows
|
16
24
|
end
|
17
|
-
|
25
|
+
|
18
26
|
#
|
19
27
|
# The table as a 2D Array of strings with the text of each cell.
|
20
28
|
#
|
@@ -30,5 +38,5 @@ module Watir
|
|
30
38
|
end
|
31
39
|
alias_method :to_a, :strings
|
32
40
|
|
33
|
-
end
|
34
|
-
end
|
41
|
+
end # RowContainer
|
42
|
+
end # Watir
|
@@ -9,6 +9,9 @@ module Watir
|
|
9
9
|
#
|
10
10
|
# Saves screenshot to given path.
|
11
11
|
#
|
12
|
+
# @example
|
13
|
+
# browser.screenshot.save "screenshot.png"
|
14
|
+
#
|
12
15
|
# @param [String] path
|
13
16
|
#
|
14
17
|
|
@@ -19,6 +22,10 @@ module Watir
|
|
19
22
|
#
|
20
23
|
# Represents screenshot as PNG image string.
|
21
24
|
#
|
25
|
+
# @example
|
26
|
+
# browser.screenshot.png
|
27
|
+
# #=> '\x95\xC7\x8C@1\xC07\x1C(Edb\x15\xB2\vL'
|
28
|
+
#
|
22
29
|
# @return [String]
|
23
30
|
#
|
24
31
|
|
@@ -29,6 +36,10 @@ module Watir
|
|
29
36
|
#
|
30
37
|
# Represents screenshot as Base64 encoded string.
|
31
38
|
#
|
39
|
+
# @example
|
40
|
+
# browser.screenshot.base64
|
41
|
+
# #=> '7HWJ43tZDscPleeUuPW6HhN3x+z7vU/lufmH0qNTtTum94IBWMT46evImci1vnFGT'
|
42
|
+
#
|
32
43
|
# @return [String]
|
33
44
|
#
|
34
45
|
|
@@ -1,8 +1,11 @@
|
|
1
1
|
module Watir
|
2
2
|
module UserEditable
|
3
|
+
|
3
4
|
#
|
4
5
|
# Clear the element, the type in the given value.
|
5
6
|
#
|
7
|
+
# @param [String, Symbol] *args
|
8
|
+
#
|
6
9
|
|
7
10
|
def set(*args)
|
8
11
|
assert_exists
|
@@ -14,7 +17,9 @@ module Watir
|
|
14
17
|
alias_method :value=, :set
|
15
18
|
|
16
19
|
#
|
17
|
-
#
|
20
|
+
# Appends the given value to the text in the text field.
|
21
|
+
#
|
22
|
+
# @param [String, Symbol] *args
|
18
23
|
#
|
19
24
|
|
20
25
|
def append(*args)
|
@@ -26,12 +31,13 @@ module Watir
|
|
26
31
|
alias_method :<<, :append
|
27
32
|
|
28
33
|
#
|
29
|
-
#
|
34
|
+
# Clears the text field.
|
30
35
|
#
|
31
36
|
|
32
37
|
def clear
|
33
38
|
assert_exists
|
34
39
|
@element.clear
|
35
40
|
end
|
36
|
-
|
37
|
-
end
|
41
|
+
|
42
|
+
end # UserEditable
|
43
|
+
end # Watir
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module Watir
|
2
|
-
VERSION = "0.6.
|
3
|
-
end
|
2
|
+
VERSION = "0.6.2"
|
3
|
+
end # Watir
|
data/lib/watir-webdriver/wait.rb
CHANGED
@@ -2,14 +2,20 @@
|
|
2
2
|
module Watir
|
3
3
|
module Wait
|
4
4
|
|
5
|
-
class TimeoutError < StandardError
|
6
|
-
end
|
5
|
+
class TimeoutError < StandardError ; end
|
7
6
|
|
8
7
|
INTERVAL = 0.1
|
9
8
|
|
10
9
|
class << self
|
11
10
|
#
|
12
|
-
#
|
11
|
+
# Waits until the block evaluates to true or times out.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# Watir::Wait.until { browser.a(:id => "ajaxed").visible? }
|
15
|
+
#
|
16
|
+
# @param [Fixnum] timeout How long to wait in seconds
|
17
|
+
# @param [String] message Message to raise if timeout is exceeded
|
18
|
+
# @raise [TimeoutError] if timeout is exceeded
|
13
19
|
#
|
14
20
|
|
15
21
|
def until(timeout = 30, message = nil, &block)
|
@@ -27,6 +33,13 @@ module Watir
|
|
27
33
|
#
|
28
34
|
# Wait while the block evaluates to true or times out.
|
29
35
|
#
|
36
|
+
# @example
|
37
|
+
# Watir::Wait.while { browser.a(:id => "ajaxed").visible? }
|
38
|
+
#
|
39
|
+
# @param [Fixnum] timeout How long to wait in seconds
|
40
|
+
# @param [String] message Message to raise if timeout is exceeded
|
41
|
+
# @raise [TimeoutError] if timeout is exceeded
|
42
|
+
#
|
30
43
|
|
31
44
|
def while(timeout = 30, message = nil, &block)
|
32
45
|
end_time = ::Time.now + timeout
|
@@ -47,7 +60,8 @@ module Watir
|
|
47
60
|
|
48
61
|
err
|
49
62
|
end
|
50
|
-
|
63
|
+
|
64
|
+
end # self
|
51
65
|
end # Wait
|
52
66
|
|
53
67
|
module Waitable
|
@@ -97,14 +111,15 @@ module Watir
|
|
97
111
|
#
|
98
112
|
# Waits until the element is present.
|
99
113
|
#
|
100
|
-
# @
|
114
|
+
# @example
|
115
|
+
# browser.button(:id => 'foo').when_present.click
|
116
|
+
# browser.div(:id => 'bar').when_present { |div| ... }
|
117
|
+
# browser.p(:id => 'baz').when_present(60).text
|
101
118
|
#
|
102
|
-
#
|
103
|
-
# browser.button(:id, 'foo').when_present.click
|
104
|
-
# browser.div(:id, 'bar').when_present { |div| ... }
|
105
|
-
# browser.p(:id, 'baz').when_present(60).text
|
119
|
+
# @param [Fixnum] timeout seconds to wait before timing out
|
106
120
|
#
|
107
|
-
# @
|
121
|
+
# @see Watir::Wait
|
122
|
+
# @see Watir::Element#present?
|
108
123
|
#
|
109
124
|
|
110
125
|
def when_present(timeout = 30)
|
@@ -121,7 +136,10 @@ module Watir
|
|
121
136
|
#
|
122
137
|
# Waits until the element is present.
|
123
138
|
#
|
124
|
-
# @
|
139
|
+
# @example
|
140
|
+
# browser.button(:id => 'foo').wait_until_present
|
141
|
+
#
|
142
|
+
# @param [Fixnum] timeout seconds to wait before timing out
|
125
143
|
#
|
126
144
|
# @see Watir::Wait
|
127
145
|
# @see Watir::Element#present?
|
@@ -135,6 +153,9 @@ module Watir
|
|
135
153
|
#
|
136
154
|
# Waits while the element is present.
|
137
155
|
#
|
156
|
+
# @example
|
157
|
+
# browser.button(:id => 'foo').wait_while_present
|
158
|
+
#
|
138
159
|
# @param [Integer] timeout seconds to wait before timing out
|
139
160
|
#
|
140
161
|
# @see Watir::Wait
|
@@ -21,6 +21,15 @@ module Watir
|
|
21
21
|
'#<%s:0x%x located=%s>' % [self.class, hash*2, !!@handle]
|
22
22
|
end
|
23
23
|
|
24
|
+
#
|
25
|
+
# Returns window size.
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# size = browser.window.size
|
29
|
+
# "%sx%s" % [size.width, size.height]
|
30
|
+
# #=> "1600x1200"
|
31
|
+
#
|
32
|
+
|
24
33
|
def size
|
25
34
|
size = nil
|
26
35
|
use { size = @driver.manage.window.size }
|
@@ -28,6 +37,15 @@ module Watir
|
|
28
37
|
size
|
29
38
|
end
|
30
39
|
|
40
|
+
#
|
41
|
+
# Returns window position.
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# position = browser.window.position
|
45
|
+
# "%sx%s" % [position.x, position.y]
|
46
|
+
# #=> "92x76"
|
47
|
+
#
|
48
|
+
|
31
49
|
def position
|
32
50
|
pos = nil
|
33
51
|
use { pos = @driver.manage.window.position }
|
@@ -35,6 +53,16 @@ module Watir
|
|
35
53
|
pos
|
36
54
|
end
|
37
55
|
|
56
|
+
#
|
57
|
+
# Resizes window to given width and height.
|
58
|
+
#
|
59
|
+
# @example
|
60
|
+
# browser.window.resize_to 1600, 1200
|
61
|
+
#
|
62
|
+
# @param [Fixnum] width
|
63
|
+
# @param [Fixnum] height
|
64
|
+
#
|
65
|
+
|
38
66
|
def resize_to(width, height)
|
39
67
|
dimension = Selenium::WebDriver::Dimension.new(width, height)
|
40
68
|
use { @driver.manage.window.size = dimension }
|
@@ -42,6 +70,16 @@ module Watir
|
|
42
70
|
dimension
|
43
71
|
end
|
44
72
|
|
73
|
+
#
|
74
|
+
# Moves window to given x and y coordinates.
|
75
|
+
#
|
76
|
+
# @example
|
77
|
+
# browser.window.move_to 300, 200
|
78
|
+
#
|
79
|
+
# @param [Fixnum] x
|
80
|
+
# @param [Fixnum] y
|
81
|
+
#
|
82
|
+
|
45
83
|
def move_to(x, y)
|
46
84
|
point = Selenium::WebDriver::Point.new(x, y)
|
47
85
|
use { @driver.manage.window.position = point }
|
@@ -49,6 +87,23 @@ module Watir
|
|
49
87
|
point
|
50
88
|
end
|
51
89
|
|
90
|
+
#
|
91
|
+
# Maximizes window.
|
92
|
+
#
|
93
|
+
# @example
|
94
|
+
# browser.window.maximize
|
95
|
+
#
|
96
|
+
|
97
|
+
def maximize
|
98
|
+
use { @driver.manage.window.maximize }
|
99
|
+
end
|
100
|
+
|
101
|
+
#
|
102
|
+
# Returns true if window exists.
|
103
|
+
#
|
104
|
+
# @return [Boolean]
|
105
|
+
#
|
106
|
+
|
52
107
|
def exists?
|
53
108
|
handle
|
54
109
|
true
|
@@ -56,12 +111,27 @@ module Watir
|
|
56
111
|
false
|
57
112
|
end
|
58
113
|
|
114
|
+
#
|
115
|
+
# Returns true if window is present.
|
116
|
+
#
|
117
|
+
# @return [Boolean]
|
118
|
+
#
|
119
|
+
|
59
120
|
def present?
|
60
121
|
@handle = nil # relocate
|
61
122
|
|
62
123
|
exists?
|
63
124
|
end
|
64
125
|
|
126
|
+
#
|
127
|
+
# Returns true if two windows are equal.
|
128
|
+
#
|
129
|
+
# @example
|
130
|
+
# browser.window(:index => 1) == browser.window(:index => 2)
|
131
|
+
#
|
132
|
+
# @param [Window] other
|
133
|
+
#
|
134
|
+
|
65
135
|
def ==(other)
|
66
136
|
return false unless other.kind_of?(self.class)
|
67
137
|
|
@@ -73,14 +143,32 @@ module Watir
|
|
73
143
|
handle.hash ^ self.class.hash
|
74
144
|
end
|
75
145
|
|
146
|
+
#
|
147
|
+
# Returns true if window is current.
|
148
|
+
#
|
149
|
+
# @example
|
150
|
+
# browser.window.current?
|
151
|
+
# #=> true
|
152
|
+
#
|
153
|
+
|
76
154
|
def current?
|
77
155
|
@driver.window_handle == handle
|
78
156
|
end
|
79
157
|
|
158
|
+
#
|
159
|
+
# CLoses window.
|
160
|
+
#
|
161
|
+
|
80
162
|
def close
|
81
163
|
use { @driver.close }
|
82
164
|
end
|
83
165
|
|
166
|
+
#
|
167
|
+
# Returns window title.
|
168
|
+
#
|
169
|
+
# @return [String]
|
170
|
+
#
|
171
|
+
|
84
172
|
def title
|
85
173
|
title = nil
|
86
174
|
use { title = @driver.title }
|
@@ -88,6 +176,12 @@ module Watir
|
|
88
176
|
title
|
89
177
|
end
|
90
178
|
|
179
|
+
#
|
180
|
+
# Returns window URL.
|
181
|
+
#
|
182
|
+
# @return [String]
|
183
|
+
#
|
184
|
+
|
91
185
|
def url
|
92
186
|
url = nil
|
93
187
|
use { url = @driver.current_url }
|
@@ -95,6 +189,15 @@ module Watir
|
|
95
189
|
url
|
96
190
|
end
|
97
191
|
|
192
|
+
#
|
193
|
+
# Switches to given window and executes block, then switches back.
|
194
|
+
#
|
195
|
+
# @example
|
196
|
+
# browser.window(:title => "2nd window").use do
|
197
|
+
# browser.button(:id => "close").click
|
198
|
+
# end
|
199
|
+
#
|
200
|
+
|
98
201
|
def use(&blk)
|
99
202
|
@driver.switch_to.window(handle, &blk)
|
100
203
|
self
|
@@ -135,4 +238,4 @@ module Watir
|
|
135
238
|
end
|
136
239
|
|
137
240
|
end # Window
|
138
|
-
end # Watir
|
241
|
+
end # Watir
|