watir 2.0.3 → 2.0.4
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/CHANGES +5 -0
- data/VERSION +1 -1
- data/lib/watir/ie-class.rb +50 -51
- data/lib/watir/locator.rb +1 -0
- data/unittests/css_selector_test.rb +38 -46
- data/unittests/element_collections_test.rb +6 -0
- data/unittests/ie_test.rb +11 -3
- metadata +7 -7
data/CHANGES
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== Version 2.0.4 - 2011/10/29
|
2
|
+
|
3
|
+
* IE#execute_script escapes multi-line JavaScript scripts
|
4
|
+
* allow css and xpath locators for element collection methods, fixes http://jira.openqa.org/browse/WTR-493
|
5
|
+
|
1
6
|
== Version 2.0.3 - 2011/10/21
|
2
7
|
|
3
8
|
* fix ElementCollections#[]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.4
|
data/lib/watir/ie-class.rb
CHANGED
@@ -16,38 +16,38 @@ module Watir
|
|
16
16
|
|
17
17
|
# Return the options used when creating new instances of IE.
|
18
18
|
# BUG: this interface invites misunderstanding/misuse such as IE.options[:speed] = :zippy]
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def self.options
|
20
|
+
{:speed => self.speed, :visible => self.visible, :attach_timeout => self.attach_timeout, :zero_based_indexing => self.zero_based_indexing}
|
21
|
+
end
|
22
22
|
# set values for options used when creating new instances of IE.
|
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
|
-
|
49
|
-
|
50
|
-
|
23
|
+
def self.set_options options
|
24
|
+
options.each do |name, value|
|
25
|
+
send "#{name}=", value
|
26
|
+
end
|
27
|
+
end
|
28
|
+
# The globals $FAST_SPEED and $HIDE_IE are checked both at initialization
|
29
|
+
# and later, because they
|
30
|
+
# might be set after initialization. Setting them beforehand (e.g. from
|
31
|
+
# the command line) will affect the class, otherwise it is only a temporary
|
32
|
+
# effect
|
33
|
+
@@speed = $FAST_SPEED ? :fast : :slow
|
34
|
+
def self.speed
|
35
|
+
return :fast if $FAST_SPEED
|
36
|
+
@@speed
|
37
|
+
end
|
38
|
+
def self.speed= x
|
39
|
+
$FAST_SPEED = nil
|
40
|
+
@@speed = x
|
41
|
+
end
|
42
|
+
@@visible = $HIDE_IE ? false : true
|
43
|
+
def self.visible
|
44
|
+
return false if $HIDE_IE
|
45
|
+
@@visible
|
46
|
+
end
|
47
|
+
def self.visible= x
|
48
|
+
$HIDE_IE = nil
|
49
|
+
@@visible = x
|
50
|
+
end
|
51
51
|
|
52
52
|
@@zero_based_indexing = true
|
53
53
|
def self.zero_based_indexing= enabled
|
@@ -202,20 +202,20 @@ module Watir
|
|
202
202
|
def speed= how_fast
|
203
203
|
case how_fast
|
204
204
|
when :zippy then
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
205
|
+
@typingspeed = 0
|
206
|
+
@pause_after_wait = 0.01
|
207
|
+
@type_keys = false
|
208
|
+
@speed = :fast
|
209
209
|
when :fast then
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
210
|
+
@typingspeed = 0
|
211
|
+
@pause_after_wait = 0.01
|
212
|
+
@type_keys = true
|
213
|
+
@speed = :fast
|
214
214
|
when :slow then
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
215
|
+
@typingspeed = 0.08
|
216
|
+
@pause_after_wait = 0.1
|
217
|
+
@type_keys = true
|
218
|
+
@speed = :slow
|
219
219
|
else
|
220
220
|
raise ArgumentError, "Invalid speed: #{how_fast}"
|
221
221
|
end
|
@@ -228,12 +228,12 @@ module Watir
|
|
228
228
|
|
229
229
|
# deprecated: use speed = :fast instead
|
230
230
|
def set_fast_speed
|
231
|
-
|
231
|
+
self.speed = :fast
|
232
232
|
end
|
233
233
|
|
234
234
|
# deprecated: use speed = :slow instead
|
235
235
|
def set_slow_speed
|
236
|
-
|
236
|
+
self.speed = :slow
|
237
237
|
end
|
238
238
|
|
239
239
|
def visible
|
@@ -327,7 +327,7 @@ module Watir
|
|
327
327
|
end
|
328
328
|
rescue Watir::Wait::TimeoutError
|
329
329
|
raise NoMatchingWindowFoundException,
|
330
|
-
|
330
|
+
"Unable to locate a window with #{how} of #{what}"
|
331
331
|
end
|
332
332
|
@ie = ieTemp
|
333
333
|
end
|
@@ -340,7 +340,7 @@ module Watir
|
|
340
340
|
end
|
341
341
|
attr_writer :hwnd
|
342
342
|
|
343
|
-
|
343
|
+
# Are we attached to an open browser?
|
344
344
|
def exists?
|
345
345
|
begin
|
346
346
|
!!(@ie.name =~ /Internet Explorer/)
|
@@ -419,12 +419,11 @@ module Watir
|
|
419
419
|
|
420
420
|
# Execute the given JavaScript string
|
421
421
|
def execute_script(source)
|
422
|
-
|
422
|
+
escaped_src = source.to_s.gsub(/[\r\n']/) {|m| "\\#{m}"}
|
423
|
+
document.parentWindow.eval(escaped_src)
|
423
424
|
rescue WIN32OLERuntimeError, NoMethodError #if eval fails we need to use execScript(source.to_s) which does not return a value, hence the workaround
|
424
425
|
wrapper = "_watir_helper_div_#{rand(100000)}"
|
425
|
-
|
426
|
-
escaped_src = escaped_src.gsub("'", "\\\\'")
|
427
|
-
cmd = "var e= document.createElement('DIV'); e.id='#{wrapper}'; e.innerHTML= eval('#{escaped_src}');document.body.appendChild(e);"
|
426
|
+
cmd = "var e = document.createElement('DIV'); e.id='#{wrapper}'; e.innerHTML = eval('#{escaped_src}'); document.body.appendChild(e);"
|
428
427
|
document.parentWindow.execScript(cmd)
|
429
428
|
wrapper_obj = document.getElementById(wrapper)
|
430
429
|
result_value = wrapper_obj.innerHTML
|
data/lib/watir/locator.rb
CHANGED
@@ -9,49 +9,41 @@
|
|
9
9
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') unless $SETUP_LOADED
|
10
10
|
require 'unittests/setup'
|
11
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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
def test_table
|
52
|
-
goto_page "table1.html"
|
53
|
-
assert_equal( "Header", browser.cell(:css , ".sample th").text )
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
12
|
+
class TC_CSS_Selector < Test::Unit::TestCase
|
13
|
+
include Watir::Exception
|
14
|
+
|
15
|
+
# Same test as TC_Divs_XPath::test_divs but using css selectors instead
|
16
|
+
def test_matching_queries
|
17
|
+
goto_page "div.html"
|
18
|
+
|
19
|
+
assert_raises(UnknownObjectException) {browser.div(:css , "div[id='div77']").click }
|
20
|
+
assert_raises(UnknownObjectException) {browser.div(:css , "div[title='div77']").click }
|
21
|
+
|
22
|
+
assert(browser.text_field(:css, "input[name='text1']").verify_contains("0") )
|
23
|
+
browser.div(:css , "div[id='div3']").click
|
24
|
+
assert(browser.text_field(:css, "input[ name = 'text1' ]").verify_contains("1") )
|
25
|
+
browser.div(:css , "div[id = div4]").click
|
26
|
+
assert(browser.text_field(:css, "input[name=text1]").verify_contains("0") )
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_form
|
30
|
+
goto_page "forms2.html"
|
31
|
+
assert(browser.form(:css, "#f2").action =~ /pass2.html$/)
|
32
|
+
assert_equal(browser.button(:css, "form #b2").value, "Click Me")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_image
|
36
|
+
goto_page "div.html"
|
37
|
+
assert_equal( "circle", browser.image(:css, "*[id ^= 'circ']").id )
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_link
|
41
|
+
goto_page "links1.html"
|
42
|
+
assert_equal( "link_name", browser.link(:css, "*[name *= ink_nam]").name )
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_table
|
46
|
+
goto_page "table1.html"
|
47
|
+
assert_equal( "Header", browser.cell(:css , ".sample th").text )
|
48
|
+
end
|
49
|
+
end
|
@@ -62,6 +62,12 @@ class TC_ElementCollections < Test::Unit::TestCase
|
|
62
62
|
elements.each do |element|
|
63
63
|
assert Watir::Div, element.class
|
64
64
|
end
|
65
|
+
|
66
|
+
elements = browser.elements(:css => "div")
|
67
|
+
assert 2, elements.size
|
68
|
+
elements.each do |element|
|
69
|
+
assert Watir::Div, element.class
|
70
|
+
end
|
65
71
|
end
|
66
72
|
|
67
73
|
def test_multiple_specifiers
|
data/unittests/ie_test.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# Unit Test for Internet Explorer
|
2
2
|
|
3
3
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') unless $SETUP_LOADED
|
4
|
-
require '
|
4
|
+
require 'unittests/setup'
|
5
5
|
require 'unittests/ie_mock'
|
6
|
-
require 'test/unit'
|
7
6
|
|
8
7
|
class TC_ie < Test::Unit::TestCase
|
9
8
|
include Watir::Exception
|
@@ -35,12 +34,21 @@ class TC_ie < Test::Unit::TestCase
|
|
35
34
|
@faked_ie.tagged_element_locator('A', :no_such_mechanism, "verifying error handling")
|
36
35
|
end
|
37
36
|
end
|
37
|
+
|
38
|
+
def test_execute_script
|
39
|
+
script = %q[
|
40
|
+
var x = 'something';
|
41
|
+
var y = " else";
|
42
|
+
x + y;
|
43
|
+
]
|
44
|
+
assert_equal "something else", browser.execute_script(script)
|
45
|
+
end
|
38
46
|
|
39
47
|
# is this correct?
|
40
48
|
def test_getLink_ByUrlReturnsNilOnNoLinks
|
41
49
|
assert_nil(@faked_ie.tagged_element_locator('A', :url, "whatever"))
|
42
50
|
end
|
43
|
-
|
51
|
+
|
44
52
|
# is this correct?
|
45
53
|
def test_getLink_ByTextReturnsNilOnNoLinks
|
46
54
|
assert_nil(@faked_ie.tagged_element_locator('A', :text, "whatever"))
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 4
|
10
|
+
version: 2.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bret Pettichord
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-10-
|
18
|
+
date: 2011-10-28 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: win32-process
|
@@ -57,12 +57,12 @@ dependencies:
|
|
57
57
|
requirements:
|
58
58
|
- - "="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
hash:
|
60
|
+
hash: 7
|
61
61
|
segments:
|
62
62
|
- 2
|
63
63
|
- 0
|
64
|
-
-
|
65
|
-
version: 2.0.
|
64
|
+
- 4
|
65
|
+
version: 2.0.4
|
66
66
|
type: :runtime
|
67
67
|
version_requirements: *id003
|
68
68
|
- !ruby/object:Gem::Dependency
|