watir 6.8.4 → 6.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +11 -0
- data/README.md +1 -1
- data/lib/watir/alert.rb +1 -1
- data/lib/watir/capabilities.rb +9 -0
- data/lib/watir/cookies.rb +4 -1
- data/lib/watir/elements/element.rb +4 -0
- data/lib/watir/elements/select.rb +12 -8
- data/lib/watir/js_execution.rb +4 -2
- data/lib/watir/locators/element/locator.rb +8 -2
- data/lib/watir/user_editable.rb +3 -1
- data/lib/watirspec.rb +2 -2
- data/lib/watirspec/server/app.rb +26 -12
- data/spec/element_locator_spec.rb +36 -0
- data/spec/element_spec.rb +2 -1
- data/spec/watirspec/cookies_spec.rb +24 -10
- data/spec/watirspec/elements/element_spec.rb +5 -0
- data/spec/watirspec/elements/iframe_spec.rb +4 -0
- data/spec/watirspec/elements/select_list_spec.rb +50 -2
- data/spec/watirspec/elements/text_field_spec.rb +24 -0
- data/watir.gemspec +2 -2
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c07f7155e0844cc08be4fcdeda576a6c2748cbf8
|
4
|
+
data.tar.gz: aeb56b78fe7c0609e1449a34fff22ff3e8c8ecf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a6fb8f40775476021d6b696dff03c2fc9fd634b3b667a97851e4035821f631b2a25d80771f0cfac337273fae47abeb354b7a939c0dbc5bce7761effcbb03429
|
7
|
+
data.tar.gz: ae1c29c9a9e296b8aad4d754e7d2d075b47ca5f8a2b5b581738539939cf9e0631e41feefbbc4c74222f77bcff0b67dd7b41936fc02c17127215d9d0d051e124e
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
### 6.9.0 (2017-11-18)
|
2
|
+
|
3
|
+
* Fix bug in Element#flash
|
4
|
+
* Fix bug with w3c alert handling (thanks Lakshya Kapoor)
|
5
|
+
* Add support for passing multiple options into #select and #select_all (thanks Justin Ko)
|
6
|
+
* Add support for passing multiple parameters into Element#set! (thanks Justin Ko)
|
7
|
+
* Add support for headless Firefox (thanks Lucas Tierney)
|
8
|
+
* Add support for setting cookie expiration by String (thanks Lucas Tierney)
|
9
|
+
* Add support for new class locators to #element and #elements (thanks Justin Ko)
|
10
|
+
* Provide suggestion to look inside IFrame when element not found (thanks Justin Ko)
|
11
|
+
|
1
12
|
### 6.8.4 (2017-09-08)
|
2
13
|
|
3
14
|
* Fix bug with non-visible buttons not being waited on (#648)
|
data/README.md
CHANGED
data/lib/watir/alert.rb
CHANGED
@@ -96,7 +96,7 @@ module Watir
|
|
96
96
|
|
97
97
|
def assert_exists
|
98
98
|
@alert = @browser.driver.switch_to.alert
|
99
|
-
rescue Selenium::WebDriver::Error::NoAlertPresentError
|
99
|
+
rescue Selenium::WebDriver::Error::NoAlertPresentError, Selenium::WebDriver::Error::NoSuchAlertError
|
100
100
|
raise Exception::UnknownObjectException, 'unable to locate alert'
|
101
101
|
end
|
102
102
|
|
data/lib/watir/capabilities.rb
CHANGED
@@ -83,6 +83,11 @@ module Watir
|
|
83
83
|
@selenium_opts[:options] = browser_options
|
84
84
|
Watir.logger.deprecate 'Initializing Browser with both :profile and :option', ':profile as a key inside :option' if profile
|
85
85
|
end
|
86
|
+
if @options.delete(:headless)
|
87
|
+
browser_options ||= {}
|
88
|
+
browser_options[:args] ||= []
|
89
|
+
browser_options[:args] += ['--headless']
|
90
|
+
end
|
86
91
|
@selenium_opts[:options] ||= Selenium::WebDriver::Firefox::Options.new(browser_options)
|
87
92
|
@selenium_opts[:options].profile = profile if profile
|
88
93
|
when :safari
|
@@ -92,6 +97,10 @@ module Watir
|
|
92
97
|
args = @options.delete(:args) || @options.delete(:switches) || []
|
93
98
|
@options['chromeOptions'] = {'args' => args + ['--headless', '--disable-gpu']}
|
94
99
|
end
|
100
|
+
if @browser == :firefox && @options.delete(:headless)
|
101
|
+
args = @options.delete(:args) || @options.delete(:switches) || []
|
102
|
+
@options[Selenium::WebDriver::Firefox::Options.KEY] = {'args' => args + ['--headless']}
|
103
|
+
end
|
95
104
|
if @browser == :safari && @options.delete(:technology_preview)
|
96
105
|
@options["safari.options"] = {'technologyPreview' => true}
|
97
106
|
end
|
data/lib/watir/cookies.rb
CHANGED
@@ -59,7 +59,10 @@ module Watir
|
|
59
59
|
value: value}
|
60
60
|
cookie[:secure] = opts[:secure] if opts.key?(:secure)
|
61
61
|
cookie[:path] = opts[:path] if opts.key?(:path)
|
62
|
-
|
62
|
+
expires = opts[:expires]
|
63
|
+
if expires
|
64
|
+
cookie[:expires] = ::Time.parse(expires) if expires.is_a?(String) else expires
|
65
|
+
end
|
63
66
|
cookie[:domain] = opts[:domain] if opts.key?(:domain)
|
64
67
|
|
65
68
|
@control.add_cookie cookie
|
@@ -655,6 +655,10 @@ module Watir
|
|
655
655
|
begin
|
656
656
|
send exist_check
|
657
657
|
yield
|
658
|
+
rescue unknown_exception => ex
|
659
|
+
msg = ex.message
|
660
|
+
msg += ". Maybe look in an iframe?" if @query_scope.iframes.count > 0
|
661
|
+
raise unknown_exception, msg
|
658
662
|
rescue Selenium::WebDriver::Error::StaleElementReferenceError
|
659
663
|
retry
|
660
664
|
rescue Selenium::WebDriver::Error::ElementNotVisibleError, Selenium::WebDriver::Error::ElementNotInteractableError
|
@@ -41,8 +41,9 @@ module Watir
|
|
41
41
|
# @return [String] The text of the option selected. If multiple options match, returns the first match.
|
42
42
|
#
|
43
43
|
|
44
|
-
def select(str_or_rx)
|
45
|
-
select_by
|
44
|
+
def select(*str_or_rx)
|
45
|
+
results = str_or_rx.flatten.map { |v| select_by v}
|
46
|
+
results.first
|
46
47
|
end
|
47
48
|
|
48
49
|
#
|
@@ -53,8 +54,9 @@ module Watir
|
|
53
54
|
# @return [String] The text of the first option selected.
|
54
55
|
#
|
55
56
|
|
56
|
-
def select_all(str_or_rx)
|
57
|
-
select_all_by
|
57
|
+
def select_all(*str_or_rx)
|
58
|
+
results = str_or_rx.flatten.map { |v| select_all_by v }
|
59
|
+
results.first
|
58
60
|
end
|
59
61
|
|
60
62
|
#
|
@@ -64,8 +66,9 @@ module Watir
|
|
64
66
|
# @raise [Watir::Exception::NoValueFoundException] if the value does not exist.
|
65
67
|
#
|
66
68
|
|
67
|
-
def select!(str_or_rx)
|
68
|
-
select_by!(
|
69
|
+
def select!(*str_or_rx)
|
70
|
+
results = str_or_rx.flatten.map { |v| select_by!(v, :single) }
|
71
|
+
results.first
|
69
72
|
end
|
70
73
|
|
71
74
|
#
|
@@ -75,8 +78,9 @@ module Watir
|
|
75
78
|
# @raise [Watir::Exception::NoValueFoundException] if the value does not exist.
|
76
79
|
#
|
77
80
|
|
78
|
-
def select_all!(str_or_rx)
|
79
|
-
select_by!(
|
81
|
+
def select_all!(*str_or_rx)
|
82
|
+
results = str_or_rx.flatten.map { |v| select_by!(v, :multiple) }
|
83
|
+
results.first
|
80
84
|
end
|
81
85
|
|
82
86
|
#
|
data/lib/watir/js_execution.rb
CHANGED
@@ -43,11 +43,13 @@ module Watir
|
|
43
43
|
# @return [Watir::Element]
|
44
44
|
#
|
45
45
|
|
46
|
-
def flash(color: 'red', flashes:
|
46
|
+
def flash(color: 'red', flashes: 5, delay: 0.2)
|
47
47
|
background_color = style("backgroundColor")
|
48
|
+
background_color = 'white' if background_color.empty?
|
48
49
|
element_color = element_call { execute_js(:backgroundColor, @element) }.strip
|
50
|
+
element_color = 'white' if element_color.empty?
|
49
51
|
|
50
|
-
flashes.times do |n|
|
52
|
+
(flashes * 2).times do |n|
|
51
53
|
nextcolor = n.even? ? color : background_color
|
52
54
|
element_call { execute_js(:backgroundColor, @element, nextcolor) }
|
53
55
|
sleep(delay)
|
@@ -79,7 +79,7 @@ module Watir
|
|
79
79
|
how, what = @selector.to_a.first
|
80
80
|
selector_builder.check_type(how, what)
|
81
81
|
|
82
|
-
if
|
82
|
+
if wd_supported?(how, what)
|
83
83
|
wd_find_first_by(how, what)
|
84
84
|
else
|
85
85
|
find_first_by_multiple
|
@@ -118,7 +118,7 @@ module Watir
|
|
118
118
|
return [what] if how == :element
|
119
119
|
selector_builder.check_type how, what
|
120
120
|
|
121
|
-
if
|
121
|
+
if wd_supported?(how, what)
|
122
122
|
wd_find_all_by(how, what)
|
123
123
|
else
|
124
124
|
find_all_by_multiple
|
@@ -270,6 +270,12 @@ module Watir
|
|
270
270
|
scope.find_elements(how, what)
|
271
271
|
end
|
272
272
|
|
273
|
+
def wd_supported?(how, what)
|
274
|
+
return false unless WD_FINDERS.include?(how)
|
275
|
+
return false unless what.kind_of?(String) || what.kind_of?(Regexp)
|
276
|
+
return false if [:class, :class_name].include?(how) && what.kind_of?(String) && what.include?(' ')
|
277
|
+
true
|
278
|
+
end
|
273
279
|
end
|
274
280
|
end
|
275
281
|
end
|
data/lib/watir/user_editable.rb
CHANGED
@@ -22,7 +22,9 @@ module Watir
|
|
22
22
|
# @param [String] input_value
|
23
23
|
#
|
24
24
|
|
25
|
-
def set!(
|
25
|
+
def set!(*args)
|
26
|
+
raise ArgumentError, "#set! does not support special keys, use #set instead" if args.any? { |v| v.kind_of?(::Symbol) }
|
27
|
+
input_value = args.join
|
26
28
|
set input_value[0]
|
27
29
|
element_call { execute_js(:setValue, @element, input_value[0..-2]) }
|
28
30
|
append(input_value[-1])
|
data/lib/watirspec.rb
CHANGED
@@ -8,8 +8,8 @@ module WatirSpec
|
|
8
8
|
class << self
|
9
9
|
attr_accessor :browser_args, :unguarded, :implementation
|
10
10
|
|
11
|
-
def
|
12
|
-
@
|
11
|
+
def htmls
|
12
|
+
@htmls ||= [File.expand_path("../../spec/watirspec/html", __FILE__)]
|
13
13
|
end
|
14
14
|
|
15
15
|
def run!
|
data/lib/watirspec/server/app.rb
CHANGED
@@ -12,15 +12,15 @@ module WatirSpec
|
|
12
12
|
when %r{/set_cookie}
|
13
13
|
respond("<html>C is for cookie, it's good enough for me</html>", 'Content-Type' => 'text/html', 'Set-Cookie' => 'monster=1')
|
14
14
|
when css_file?
|
15
|
-
respond(
|
15
|
+
respond(file_read(path), 'Content-Type' => 'text/css')
|
16
16
|
when js_file?
|
17
|
-
respond(
|
17
|
+
respond(file_read(path), 'Content-Type' => 'application/javascript')
|
18
18
|
when png_file?
|
19
|
-
respond(
|
19
|
+
respond(file_binread(path), 'Content-Type' => 'image/png')
|
20
20
|
when gif_file?
|
21
|
-
respond(
|
21
|
+
respond(file_read(path), 'Content-Type' => 'image/gif')
|
22
22
|
when static_file?
|
23
|
-
respond(
|
23
|
+
respond(file_read(path))
|
24
24
|
else
|
25
25
|
respond('')
|
26
26
|
end
|
@@ -33,30 +33,44 @@ module WatirSpec
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def css_file?
|
36
|
-
proc { |path|
|
36
|
+
proc { |path| static_file(path) && path.end_with?('.css') }
|
37
37
|
end
|
38
38
|
|
39
39
|
def js_file?
|
40
|
-
proc { |path|
|
40
|
+
proc { |path| static_file(path) && path.end_with?('.js') }
|
41
41
|
end
|
42
42
|
|
43
43
|
def png_file?
|
44
|
-
proc { |path|
|
44
|
+
proc { |path| static_file(path) && path.end_with?('.png') }
|
45
45
|
end
|
46
46
|
|
47
47
|
def gif_file?
|
48
|
-
proc { |path|
|
48
|
+
proc { |path| static_file(path) && path.end_with?('.gif') }
|
49
49
|
end
|
50
50
|
|
51
51
|
def static_file?
|
52
|
-
proc { |path|
|
52
|
+
proc { |path| static_file(path) }
|
53
53
|
end
|
54
54
|
|
55
55
|
def static_files
|
56
|
-
|
57
|
-
|
56
|
+
WatirSpec.htmls.flat_map do |html|
|
57
|
+
Dir["#{html}/**/*"]
|
58
58
|
end
|
59
59
|
end
|
60
|
+
|
61
|
+
def static_file(path)
|
62
|
+
static_files.find do |file|
|
63
|
+
file.end_with?(path)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def file_read(path)
|
68
|
+
File.read(static_file(path))
|
69
|
+
end
|
70
|
+
|
71
|
+
def file_binread(path)
|
72
|
+
File.binread(static_file(path))
|
73
|
+
end
|
60
74
|
end
|
61
75
|
end
|
62
76
|
end
|
@@ -59,6 +59,24 @@ describe Watir::Locators::Element::Locator do
|
|
59
59
|
|
60
60
|
locate_one [:data_view, false]
|
61
61
|
end
|
62
|
+
|
63
|
+
it "handles selector with class attribute presence" do
|
64
|
+
expect_one :xpath, ".//*[@class]"
|
65
|
+
|
66
|
+
locate_one class: true
|
67
|
+
end
|
68
|
+
|
69
|
+
it "handles selector with multiple classes in array" do
|
70
|
+
expect_one :xpath, ".//*[(contains(concat(' ', @class, ' '), ' a ') and contains(concat(' ', @class, ' '), ' b '))]"
|
71
|
+
|
72
|
+
locate_one class: ["a", "b"]
|
73
|
+
end
|
74
|
+
|
75
|
+
it "handles selector with multiple classes in string" do
|
76
|
+
expect_one :xpath, ".//*[contains(concat(' ', @class, ' '), ' a b ')]"
|
77
|
+
|
78
|
+
locate_one class: "a b"
|
79
|
+
end
|
62
80
|
end
|
63
81
|
|
64
82
|
describe "with special cased selectors" do
|
@@ -346,6 +364,24 @@ describe Watir::Locators::Element::Locator do
|
|
346
364
|
:dir , "foo",
|
347
365
|
:title , 'bar']
|
348
366
|
end
|
367
|
+
|
368
|
+
it "handles selector with class attribute presence" do
|
369
|
+
expect_all :xpath, ".//*[@class]"
|
370
|
+
|
371
|
+
locate_all class: true
|
372
|
+
end
|
373
|
+
|
374
|
+
it "handles selector with multiple classes in array" do
|
375
|
+
expect_all :xpath, ".//*[(contains(concat(' ', @class, ' '), ' a ') and contains(concat(' ', @class, ' '), ' b '))]"
|
376
|
+
|
377
|
+
locate_all class: ["a", "b"]
|
378
|
+
end
|
379
|
+
|
380
|
+
it "handles selector with multiple classes in string" do
|
381
|
+
expect_all :xpath, ".//*[contains(concat(' ', @class, ' '), ' a b ')]"
|
382
|
+
|
383
|
+
locate_all class: "a b"
|
384
|
+
end
|
349
385
|
end
|
350
386
|
|
351
387
|
describe "with regexp selectors" do
|
data/spec/element_spec.rb
CHANGED
@@ -92,13 +92,14 @@ describe Watir::Element do
|
|
92
92
|
end
|
93
93
|
|
94
94
|
describe "#hover" do
|
95
|
-
not_compliant_on :internet_explorer, :safari
|
95
|
+
not_compliant_on :internet_explorer, :safari do
|
96
96
|
it "should hover over the element" do
|
97
97
|
browser.goto WatirSpec.url_for('hover.html')
|
98
98
|
link = browser.a
|
99
99
|
|
100
100
|
expect(link.style("font-size")).to eq "10px"
|
101
101
|
link.hover
|
102
|
+
link.wait_until { |l| l.style("font-size") == "20px" }
|
102
103
|
expect(link.style("font-size")).to eq "20px"
|
103
104
|
end
|
104
105
|
end
|
@@ -49,6 +49,18 @@ describe "Browser#cookies" do
|
|
49
49
|
browser.cookies.add 'foo', 'bar'
|
50
50
|
verify_cookies_count 2
|
51
51
|
end
|
52
|
+
|
53
|
+
it 'adds a cookie with a string expires value' do
|
54
|
+
browser.goto set_cookie_url
|
55
|
+
verify_cookies_count 1
|
56
|
+
|
57
|
+
expire_time = Time.now + 10000
|
58
|
+
|
59
|
+
browser.cookies.add 'foo', 'bar', {expires: expire_time.to_s}
|
60
|
+
|
61
|
+
cookie = browser.cookies[:foo]
|
62
|
+
expect(cookie[:expires]).to be_kind_of(Time)
|
63
|
+
end
|
52
64
|
end
|
53
65
|
|
54
66
|
# TODO - Split this up into multiple tests or figure out which parts are not compliant
|
@@ -112,18 +124,20 @@ describe "Browser#cookies" do
|
|
112
124
|
end
|
113
125
|
end
|
114
126
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
127
|
+
bug "https://github.com/mozilla/geckodriver/issues/1000", :firefox do
|
128
|
+
describe '#load' do
|
129
|
+
it 'loads cookies from file' do
|
130
|
+
browser.cookies.clear
|
131
|
+
browser.cookies.load file
|
132
|
+
expected = browser.cookies.to_a
|
133
|
+
actual = YAML.load(IO.read(file))
|
121
134
|
|
122
|
-
|
123
|
-
|
124
|
-
|
135
|
+
# https://code.google.com/p/selenium/issues/detail?id=6834
|
136
|
+
expected.each { |cookie| cookie.delete(:expires) }
|
137
|
+
actual.each { |cookie| cookie.delete(:expires) }
|
125
138
|
|
126
|
-
|
139
|
+
expect(actual).to eq(expected)
|
140
|
+
end
|
127
141
|
end
|
128
142
|
end
|
129
143
|
end
|
@@ -308,6 +308,11 @@ describe "Element" do
|
|
308
308
|
it "raises ArgumentError error if selector hash with :css has multiple entries" do
|
309
309
|
expect { browser.div(css: "div", class: "foo").exists? }.to raise_error(ArgumentError)
|
310
310
|
end
|
311
|
+
|
312
|
+
it "finds element by Selenium name locator" do
|
313
|
+
expect(browser.element(name: "new_user_first_name")).to exist
|
314
|
+
expect(browser.element(name: /new_user_first_name/)).to exist
|
315
|
+
end
|
311
316
|
end
|
312
317
|
|
313
318
|
describe '#send_keys' do
|
@@ -151,6 +151,10 @@ describe "IFrame" do
|
|
151
151
|
expect(browser.iframe(index: 0).text_field(name: 'senderElement').value).to eq "new value"
|
152
152
|
end
|
153
153
|
|
154
|
+
it 'will suggest looking in an iframe when iframes exist' do
|
155
|
+
expect {browser.text_field(name: 'senderElement').set('no') }.to raise_unknown_object_exception('Maybe look in an iframe?')
|
156
|
+
end
|
157
|
+
|
154
158
|
describe "#execute_script" do
|
155
159
|
bug "Safari does not strip text", :safari do
|
156
160
|
it "executes the given javascript in the specified frame" do
|
@@ -303,6 +303,18 @@ describe "SelectList" do
|
|
303
303
|
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "Swedish"]
|
304
304
|
end
|
305
305
|
|
306
|
+
it "selects each item in an Array" do
|
307
|
+
browser.select_list(name: "new_user_languages").clear
|
308
|
+
browser.select_list(name: "new_user_languages").select(["Danish", "Swedish"])
|
309
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "Swedish"]
|
310
|
+
end
|
311
|
+
|
312
|
+
it "selects each item in a parameter list" do
|
313
|
+
browser.select_list(name: "new_user_languages").clear
|
314
|
+
browser.select_list(name: "new_user_languages").select("Danish", "Swedish")
|
315
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "Swedish"]
|
316
|
+
end
|
317
|
+
|
306
318
|
bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1255957", :firefox do
|
307
319
|
it "selects empty options" do
|
308
320
|
browser.select_list(id: "delete_user_username").select("")
|
@@ -364,7 +376,7 @@ describe "SelectList" do
|
|
364
376
|
end
|
365
377
|
|
366
378
|
it "raises a TypeError if argument is not a String, Regexp or Numeric" do
|
367
|
-
expect { browser.select_list(id: "new_user_languages").select(
|
379
|
+
expect { browser.select_list(id: "new_user_languages").select({}) }.to raise_error(TypeError)
|
368
380
|
end
|
369
381
|
end
|
370
382
|
|
@@ -416,6 +428,18 @@ describe "SelectList" do
|
|
416
428
|
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "Swedish"]
|
417
429
|
end
|
418
430
|
|
431
|
+
it "selects each item in an Array" do
|
432
|
+
browser.select_list(name: "new_user_languages").clear
|
433
|
+
browser.select_list(name: "new_user_languages").select!(["Danish", "Swedish"])
|
434
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "Swedish"]
|
435
|
+
end
|
436
|
+
|
437
|
+
it "selects each item in a parameter list" do
|
438
|
+
browser.select_list(name: "new_user_languages").clear
|
439
|
+
browser.select_list(name: "new_user_languages").select!("Danish", "Swedish")
|
440
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "Swedish"]
|
441
|
+
end
|
442
|
+
|
419
443
|
bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1255957", :firefox do
|
420
444
|
it "selects empty options" do
|
421
445
|
browser.select_list(id: "delete_user_username").select!("")
|
@@ -452,7 +476,7 @@ describe "SelectList" do
|
|
452
476
|
|
453
477
|
it "raises a TypeError if argument is not a String, Regexp or Numeric" do
|
454
478
|
browser.select_list(id: "new_user_languages").clear
|
455
|
-
expect { browser.select_list(id: "new_user_languages").select!(
|
479
|
+
expect { browser.select_list(id: "new_user_languages").select!({}) }.to raise_error(TypeError)
|
456
480
|
end
|
457
481
|
end
|
458
482
|
|
@@ -469,6 +493,18 @@ describe "SelectList" do
|
|
469
493
|
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["EN", "NO"]
|
470
494
|
end
|
471
495
|
|
496
|
+
it "selects all options in an Array" do
|
497
|
+
browser.select_list(name: "new_user_languages").clear
|
498
|
+
browser.select_list(name: "new_user_languages").select_all([/ish/, /Latin/])
|
499
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "EN", "Swedish", "Azeri - Latin", "Latin"]
|
500
|
+
end
|
501
|
+
|
502
|
+
it "selects all options in a parameter list" do
|
503
|
+
browser.select_list(name: "new_user_languages").clear
|
504
|
+
browser.select_list(name: "new_user_languages").select_all(/ish/, /Latin/)
|
505
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "EN", "Swedish", "Azeri - Latin", "Latin"]
|
506
|
+
end
|
507
|
+
|
472
508
|
it "returns the first matching value if there are multiple matches" do
|
473
509
|
expect(browser.select_list(name: "new_user_languages").select_all(/ish/)).to eq "Danish"
|
474
510
|
end
|
@@ -493,6 +529,18 @@ describe "SelectList" do
|
|
493
529
|
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["EN", "NO"]
|
494
530
|
end
|
495
531
|
|
532
|
+
it "selects all options in an Array" do
|
533
|
+
browser.select_list(name: "new_user_languages").clear
|
534
|
+
browser.select_list(name: "new_user_languages").select_all!([/ish/, /Latin/])
|
535
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "EN", "Swedish", "Azeri - Latin", "Latin"]
|
536
|
+
end
|
537
|
+
|
538
|
+
it "selects all options in a parameter list" do
|
539
|
+
browser.select_list(name: "new_user_languages").clear
|
540
|
+
browser.select_list(name: "new_user_languages").select_all!(/ish/, /Latin/)
|
541
|
+
expect(browser.select_list(name: "new_user_languages").selected_options.map(&:text)).to eq ["Danish", "EN", "Swedish", "Azeri - Latin", "Latin"]
|
542
|
+
end
|
543
|
+
|
496
544
|
it "returns the first matching value if there are multiple matches" do
|
497
545
|
expect(browser.select_list(name: "new_user_languages").select_all!(/ish/)).to eq "Danish"
|
498
546
|
end
|
@@ -297,6 +297,16 @@ describe "TextField" do
|
|
297
297
|
expect(browser.text_field(name: "new_user_occupation").value).to eq "ijij"
|
298
298
|
end
|
299
299
|
|
300
|
+
it "sets the value to a concatenation of multiple arguments" do
|
301
|
+
browser.text_field(id: 'new_user_email').set('Bye', 'Cruel', 'World')
|
302
|
+
expect(browser.text_field(id: "new_user_email").value).to eq 'ByeCruelWorld'
|
303
|
+
end
|
304
|
+
|
305
|
+
it "sets the value to blank when no arguments are provided" do
|
306
|
+
browser.text_field(id: 'new_user_email').set
|
307
|
+
expect(browser.text_field(id: "new_user_email").value).to eq ''
|
308
|
+
end
|
309
|
+
|
300
310
|
it "raises UnknownObjectException if the text field doesn't exist" do
|
301
311
|
expect { browser.text_field(id: "no_such_id").set('secret') }.to raise_unknown_object_exception
|
302
312
|
end
|
@@ -333,6 +343,20 @@ describe "TextField" do
|
|
333
343
|
expect(browser.text_field(name: "new_user_occupation").value).to eq "ijij"
|
334
344
|
end
|
335
345
|
|
346
|
+
it "sets the value to a concatenation of multiple arguments" do
|
347
|
+
browser.text_field(id: 'new_user_email').set!('Bye', 'Cruel', 'World')
|
348
|
+
expect(browser.text_field(id: "new_user_email").value).to eq 'ByeCruelWorld'
|
349
|
+
end
|
350
|
+
|
351
|
+
it "sets the value to blank when no arguments are provided" do
|
352
|
+
browser.text_field(id: 'new_user_email').set!
|
353
|
+
expect(browser.text_field(id: "new_user_email").value).to eq ''
|
354
|
+
end
|
355
|
+
|
356
|
+
it "raises ArgumentError for special keys" do
|
357
|
+
expect { browser.text_field(id: 'new_user_email').set!('a', :tab) }.to raise_error(ArgumentError)
|
358
|
+
end
|
359
|
+
|
336
360
|
it "raises UnknownObjectException if the text field doesn't exist" do
|
337
361
|
expect { browser.text_field(id: "no_such_id").set!('secret') }.to raise_unknown_object_exception
|
338
362
|
end
|
data/watir.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'watir'
|
5
|
-
s.version = '6.
|
5
|
+
s.version = '6.9.0'
|
6
6
|
s.platform = Gem::Platform::RUBY
|
7
7
|
s.authors = ['Alex Rodionov', 'Titus Fortner']
|
8
8
|
s.email = ['p0deje@gmail.com', 'titusfortner@gmail.com']
|
@@ -29,7 +29,7 @@ It facilitates the writing of automated tests by mimicing the behavior of a user
|
|
29
29
|
s.add_development_dependency 'rake', '~> 0.9.2'
|
30
30
|
s.add_development_dependency 'fuubar'
|
31
31
|
s.add_development_dependency 'nokogiri'
|
32
|
-
s.add_development_dependency 'activesupport', '~>
|
32
|
+
s.add_development_dependency 'activesupport', '~> 4.0', '>= 4.1.11' # for pluralization during code generation
|
33
33
|
s.add_development_dependency 'pry'
|
34
34
|
s.add_development_dependency 'coveralls'
|
35
35
|
s.add_development_dependency 'yard-doctest', '>= 0.1.8'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Rodionov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-11-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: selenium-webdriver
|
@@ -121,14 +121,20 @@ dependencies:
|
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '4.0'
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 4.1.11
|
125
128
|
type: :development
|
126
129
|
prerelease: false
|
127
130
|
version_requirements: !ruby/object:Gem::Requirement
|
128
131
|
requirements:
|
129
132
|
- - "~>"
|
130
133
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
134
|
+
version: '4.0'
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 4.1.11
|
132
138
|
- !ruby/object:Gem::Dependency
|
133
139
|
name: pry
|
134
140
|
requirement: !ruby/object:Gem::Requirement
|