watir 6.3.0 → 6.4.0.rc1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d3a0cb0525118548da109542afb75980a1d42cf
4
- data.tar.gz: 0bc02ea05b55da8b92650cecfd3a3a3fe98ab39b
3
+ metadata.gz: 9b67d137fb553725a3560f0a319874cc5306ccb4
4
+ data.tar.gz: 94a5b69d2a27b360ba506e974553fec6f5b7dcf8
5
5
  SHA512:
6
- metadata.gz: 03f724ca3a53ec63b963d76bc6f36f727003d52b484032ac3790f1962ad2b5a8f5e90e9864a18cd644fd51451030715a13d0d3805077749e79fce4f00d48b6cc
7
- data.tar.gz: 66cf35ca15c505bc84dec52bc9b42303c7ba6c3473703a8edc91ea80882f1e48d6ff8d17de888ee5dcab3633dd0e7573de46d81bdafd7bba923fa851fc44a045
6
+ metadata.gz: 57eff53b2276128e6b44b27c840159aabe135e24b0fb76d255ab67d656de25e525ff90f1a9ff99ae8059410870fd424ddb53db3dab41495f177246d8f1410590
7
+ data.tar.gz: '08692e0b7d43a2b9aa9092ce1a2009f72d1bce025bf5f8918a6d7167353c08c9a23808230179694267d62c94962c5bfb97d0d45bebf8e1f2cd75a04d21f4b489'
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 6.4.0.rc1 (2017-06-21)
2
+
3
+ * Significant performance updates
4
+
1
5
  ### 6.3.0 (2017-06-20)
2
6
 
3
7
  * Allow locating elements by attribute presence/absence (#345)
data/lib/watir/browser.rb CHANGED
@@ -9,6 +9,7 @@ module Watir
9
9
  include HasWindow
10
10
  include Waitable
11
11
 
12
+ attr_writer :default_context
12
13
  attr_reader :driver
13
14
  attr_reader :after_hooks
14
15
  alias_method :wd, :driver # ensures duck typing with Watir::Element
@@ -51,8 +52,8 @@ module Watir
51
52
  end
52
53
 
53
54
  @after_hooks = AfterHooks.new(self)
54
- @current_frame = nil
55
55
  @closed = false
56
+ @default_context = true
56
57
  end
57
58
 
58
59
  def inspect
@@ -292,10 +293,7 @@ module Watir
292
293
  #
293
294
 
294
295
  def exist?
295
- assert_exists
296
- true
297
- rescue Exception::NoMatchingWindowFoundException, Exception::Error
298
- false
296
+ !@closed && window.present?
299
297
  end
300
298
  alias_method :exists?, :exist?
301
299
 
@@ -306,17 +304,16 @@ module Watir
306
304
  #
307
305
 
308
306
  def assert_exists
309
- if @closed
310
- raise Exception::Error, "browser was closed"
311
- elsif !window.present?
312
- raise Exception::NoMatchingWindowFoundException, "browser window was closed"
313
- else
314
- driver.switch_to.default_content
315
- true
316
- end
307
+ ensure_context
308
+ return if window.present?
309
+ raise Exception::NoMatchingWindowFoundException, "browser window was closed"
310
+ end
311
+
312
+ def ensure_context
313
+ raise Exception::Error, "browser was closed" if @closed
314
+ driver.switch_to.default_content unless @default_context
315
+ @default_context = true
317
316
  end
318
- alias_method :wait_for_exists, :assert_exists
319
- alias_method :wait_for_present, :assert_exists
320
317
 
321
318
  def browser
322
319
  self
@@ -114,7 +114,7 @@ module Watir
114
114
  private
115
115
 
116
116
  def elements
117
- @query_scope.is_a?(IFrame) ? @query_scope.switch_to! : @query_scope.send(:assert_exists)
117
+ @query_scope.send :ensure_context
118
118
 
119
119
  element_validator = element_validator_class.new
120
120
  selector_builder = selector_builder_class.new(@query_scope, @selector, element_class.attribute_list)
@@ -364,7 +364,8 @@ module Watir
364
364
  #
365
365
 
366
366
  def wd
367
- assert_exists
367
+ return driver if @element.is_a? FramedDriver
368
+ assert_exists if @element.nil?
368
369
  @element
369
370
  end
370
371
 
@@ -439,17 +440,17 @@ module Watir
439
440
 
440
441
  if tag_name == "input"
441
442
  klass = case elem.attribute(:type)
442
- when *Button::VALID_TYPES
443
- Button
444
- when 'checkbox'
445
- CheckBox
446
- when 'radio'
447
- Radio
448
- when 'file'
449
- FileField
450
- else
451
- TextField
452
- end
443
+ when *Button::VALID_TYPES
444
+ Button
445
+ when 'checkbox'
446
+ CheckBox
447
+ when 'radio'
448
+ Radio
449
+ when 'file'
450
+ FileField
451
+ else
452
+ TextField
453
+ end
453
454
  else
454
455
  klass = Watir.element_class_for(tag_name)
455
456
  end
@@ -500,42 +501,30 @@ module Watir
500
501
  return if exists? # Performance shortcut
501
502
 
502
503
  begin
503
- @query_scope.wait_for_exists
504
+ @query_scope.wait_for_exists unless @query_scope.is_a? Browser
504
505
  wait_until(&:exists?)
505
506
  rescue Watir::Wait::TimeoutError
506
- unless Watir.default_timeout == 0
507
- message = "This code has slept for the duration of the default timeout "
508
- message << "waiting for an Element to exist. If the test is still passing, "
509
- message << "consider using Element#exists? instead of rescuing UnknownObjectException"
510
- warn message
511
- end
512
- raise unknown_exception, "timed out after #{Watir.default_timeout} seconds, "\
513
- "waiting for #{inspect} to be located"
507
+ msg = "timed out after #{Watir.default_timeout} seconds, waiting for #{inspect} to be located"
508
+ raise unknown_exception, msg
514
509
  end
515
510
  end
516
511
 
517
512
  def wait_for_present
518
- return assert_exists unless Watir.relaxed_locate?
513
+ return visible? unless Watir.relaxed_locate?
514
+ return if present?
519
515
 
520
- wait_for_exists
521
516
  begin
522
517
  @query_scope.wait_for_present
523
518
  wait_until_present
524
- rescue Watir::Wait::TimeoutError => ex
525
- unless Watir.default_timeout == 0
526
- message = "This code has slept for the duration of the default timeout "
527
- message << "waiting for an Element to be present. If the test is still passing, "
528
- message << "consider using Element#exists? instead of rescuing UnknownObjectException"
529
- warn message
530
- end
531
- raise unknown_exception, "element located, but #{ex.message}"
519
+ rescue Watir::Wait::TimeoutError
520
+ msg = "element located, but timed out after #{Watir.default_timeout} seconds, waiting for #{inspect} to be present"
521
+ raise unknown_exception, msg
532
522
  end
533
523
  end
534
524
 
535
525
  def wait_for_enabled
536
526
  return assert_enabled unless Watir.relaxed_locate?
537
527
 
538
- wait_for_present
539
528
  begin
540
529
  wait_until(&:enabled?)
541
530
  rescue Watir::Wait::TimeoutError
@@ -545,9 +534,12 @@ module Watir
545
534
  end
546
535
 
547
536
  def wait_for_writable
548
- return assert_writable unless Watir.relaxed_locate?
549
-
537
+ wait_for_exists
550
538
  wait_for_enabled
539
+ unless Watir.relaxed_locate?
540
+ raise_writable unless !respond_to?(:readonly?) || !readonly?
541
+ end
542
+
551
543
  begin
552
544
  wait_until { !respond_to?(:readonly?) || !readonly? }
553
545
  rescue Watir::Wait::TimeoutError
@@ -559,7 +551,7 @@ module Watir
559
551
  # Ensure that the element exists, making sure that it is not stale and located if necessary
560
552
  def assert_exists
561
553
  if @element && @selector.empty?
562
- ensure_context
554
+ @query_scope.ensure_context
563
555
  reset! if stale?
564
556
  elsif @element && !stale?
565
557
  return
@@ -577,13 +569,13 @@ module Watir
577
569
  end
578
570
 
579
571
  def locate
580
- ensure_context
572
+ @query_scope.ensure_context
581
573
 
582
574
  element_validator = element_validator_class.new
583
575
  selector_builder = selector_builder_class.new(@query_scope, @selector, self.class.attribute_list)
584
576
  locator = locator_class.new(@query_scope, @selector, selector_builder, element_validator)
585
577
 
586
- locator.locate
578
+ @element = locator.locate
587
579
  end
588
580
 
589
581
  def selector_string
@@ -591,12 +583,31 @@ module Watir
591
583
  "#{@query_scope.selector_string} --> #{@selector.inspect}"
592
584
  end
593
585
 
586
+ # Ensure the driver is in the desired browser context
587
+ def ensure_context
588
+ assert_exists
589
+ end
590
+
594
591
  private
595
592
 
596
593
  def unknown_exception
597
594
  Watir::Exception::UnknownObjectException
598
595
  end
599
596
 
597
+ def raise_writable
598
+ message = "element present and enabled, but timed out after #{Watir.default_timeout} seconds, waiting for #{inspect} to not be readonly"
599
+ raise ObjectReadOnlyException, message
600
+ end
601
+
602
+ def raise_disabled
603
+ message = "element present and enabled, but timed out after #{Watir.default_timeout} seconds, waiting for #{inspect} to not be disabled"
604
+ raise ObjectDisabledException, message
605
+ end
606
+
607
+ def raise_present
608
+ raise unknown_exception, "element located, but timed out after #{Watir.default_timeout} seconds, waiting for #{inspect} to be present"
609
+ end
610
+
600
611
  def locator_class
601
612
  Kernel.const_get("#{Watir.locator_namespace}::#{element_class_name}::Locator")
602
613
  rescue NameError
@@ -619,11 +630,6 @@ module Watir
619
630
  self.class.name.split('::').last
620
631
  end
621
632
 
622
- # Ensure the driver is in the desired browser context
623
- def ensure_context
624
- @query_scope.is_a?(IFrame) ? @query_scope.switch_to! : @query_scope.assert_exists
625
- end
626
-
627
633
  def attribute?(attribute_name)
628
634
  !attribute_value(attribute_name).nil?
629
635
  end
@@ -634,14 +640,6 @@ module Watir
634
640
  end
635
641
  end
636
642
 
637
- def assert_writable
638
- assert_enabled
639
-
640
- if respond_to?(:readonly?) && readonly?
641
- raise ObjectReadOnlyException, "object is read only #{inspect}"
642
- end
643
- end
644
-
645
643
  def assert_is_element(obj)
646
644
  unless obj.kind_of? Watir::Element
647
645
  raise TypeError, "execpted Watir::Element, got #{obj.inspect}:#{obj.class}"
@@ -652,10 +650,30 @@ module Watir
652
650
  already_locked = Wait.timer.locked?
653
651
  Wait.timer = Wait::Timer.new(timeout: Watir.default_timeout) unless already_locked
654
652
  begin
655
- send exist_check
653
+ if exist_check == :wait_for_enabled
654
+ if self.is_a?(Input) || self.is_a?(Button) || self.is_a?(Select) || self.is_a?(Option)
655
+ wait_for_enabled
656
+ else
657
+ wait_for_exists
658
+ end
659
+ else
660
+ send(exist_check)
661
+ end
662
+
656
663
  yield
657
664
  rescue Selenium::WebDriver::Error::StaleElementReferenceError
658
665
  retry
666
+ rescue Selenium::WebDriver::Error::ElementNotVisibleError, Selenium::WebDriver::Error::ElementNotInteractableError
667
+ raise_present unless Wait.timer.remaining_time > 0
668
+ raise_present unless exist_check == :wait_for_present || exist_check == :wait_for_enabled
669
+ retry
670
+ rescue Selenium::WebDriver::Error::InvalidElementStateError => ex
671
+ raise_disabled unless Wait.timer.remaining_time > 0
672
+ raise_disabled unless exist_check == :wait_for_writable || exist_check == :wait_for_enabled
673
+ raise_disabled unless ex.message.include?('user-editable')
674
+ retry
675
+ rescue Selenium::WebDriver::Error::NoSuchWindowError
676
+ raise Exception::NoMatchingWindowFoundException, "browser window was closed"
659
677
  ensure
660
678
  Wait.timer.reset! unless already_locked
661
679
  end
@@ -3,7 +3,7 @@ module Watir
3
3
 
4
4
  def locate
5
5
  return if @selector.empty?
6
- @query_scope.assert_exists
6
+ @query_scope.ensure_context
7
7
 
8
8
  selector = @selector.merge(tag_name: frame_tag)
9
9
  element_validator = element_validator_class.new
@@ -13,7 +13,7 @@ module Watir
13
13
  element = locator.locate
14
14
  element or raise unknown_exception, "unable to locate #{@selector[:tag_name]} using #{selector_string}"
15
15
 
16
- FramedDriver.new(element, driver)
16
+ @element = FramedDriver.new(element, browser)
17
17
  end
18
18
 
19
19
  def ==(other)
@@ -51,7 +51,7 @@ module Watir
51
51
 
52
52
  def html
53
53
  wait_for_exists
54
- wd.page_source
54
+ @element.page_source
55
55
  end
56
56
 
57
57
  #
@@ -67,6 +67,10 @@ module Watir
67
67
  browser.send :wrap_elements_in, self, returned
68
68
  end
69
69
 
70
+ def ensure_context
71
+ switch_to!
72
+ end
73
+
70
74
  private
71
75
 
72
76
  def frame_tag
@@ -118,9 +122,10 @@ module Watir
118
122
  #
119
123
 
120
124
  class FramedDriver
121
- def initialize(element, driver)
125
+ def initialize(element, browser)
122
126
  @element = element
123
- @driver = driver
127
+ @browser = browser
128
+ @driver = browser.driver
124
129
  end
125
130
 
126
131
  def ==(other)
@@ -152,6 +157,7 @@ module Watir
152
157
 
153
158
  def switch!
154
159
  @driver.switch_to.frame @element
160
+ @browser.default_context = false
155
161
  rescue Selenium::WebDriver::Error::NoSuchFrameError => e
156
162
  raise Exception::UnknownFrameException, e.message
157
163
  end
@@ -44,10 +44,8 @@ module Watir
44
44
  find_first_by_multiple
45
45
  end
46
46
 
47
- # This actually only applies when finding by xpath/css - browser.text_field(:xpath, "//input[@type='radio']")
48
- # We don't need to validate the element if we built the xpath ourselves.
49
- # It is also used to alter behavior of methods locating more than one type of element
50
- # (e.g. text_field locates both input and textarea)
47
+ # Validation not necessary if Watir builds the xpath
48
+ return element unless @selector.key?(:xpath) || @selector.key?(:css)
51
49
  element_validator.validate(element, @selector) if element
52
50
  rescue Selenium::WebDriver::Error::NoSuchElementError, Selenium::WebDriver::Error::StaleElementReferenceError
53
51
  nil
@@ -10,11 +10,6 @@ module Watir
10
10
  return unless selector_tag_name === element_tag_name
11
11
  end
12
12
 
13
- if element_tag_name == 'input'
14
- # TODO - Verify this is desired behavior based on https://bugzilla.mozilla.org/show_bug.cgi?id=1290963
15
- return if selector[:type] && selector[:type] != element.attribute(:type).downcase
16
- end
17
-
18
13
  element
19
14
  end
20
15
  end
@@ -2,8 +2,11 @@ module Watir
2
2
  module Wait
3
3
  class Timer
4
4
 
5
+ attr_reader :remaining_time
6
+
5
7
  def initialize(timeout: nil)
6
8
  @end_time = current_time + timeout if timeout
9
+ @remaining_time = @end_time - current_time if @end_time
7
10
  end
8
11
 
9
12
  #
@@ -17,7 +20,8 @@ module Watir
17
20
  end_time = @end_time || current_time + timeout
18
21
  loop do
19
22
  yield(block)
20
- break if current_time > end_time
23
+ @remaining_time = end_time - current_time
24
+ break if @remaining_time < 0
21
25
  end
22
26
  end
23
27
 
@@ -57,9 +57,14 @@ describe 'Alert API' do
57
57
  end
58
58
 
59
59
  it 'raises error if alert is not present after timeout' do
60
- expect {
61
- browser.alert.wait_until_present.ok
62
- }.to raise_error(Watir::Wait::TimeoutError)
60
+ begin
61
+ Watir.default_timeout = 2
62
+ expect {
63
+ browser.alert.wait_until_present.ok
64
+ }.to raise_error(Watir::Wait::TimeoutError)
65
+ ensure
66
+ Watir.default_timeout = 30
67
+ end
63
68
  end
64
69
  end
65
70
  end
@@ -226,6 +226,10 @@ describe "Button" do
226
226
  it "raises UnknownObjectException if the button doesn't exist" do
227
227
  expect { browser.button(name: "no_such_name").enabled? }.to raise_unknown_object_exception
228
228
  end
229
+
230
+ it "raises ObjectDisabledException if disabled button is clicked" do
231
+ expect { browser.button(name: "new_user_submit_disabled").click }.to raise_object_disabled_exception
232
+ end
229
233
  end
230
234
 
231
235
  describe "#disabled?" do
@@ -197,6 +197,10 @@ describe "TextField" do
197
197
  it "raises UnknownObjectException if the text field doesn't exist" do
198
198
  expect { browser.text_field(id: 'no_such_id').readonly? }.to raise_unknown_object_exception
199
199
  end
200
+
201
+ it "raises UnknownReadOnlyException if sending keys to readonly element" do
202
+ expect { browser.text_field(id: 'new_user_code').set 'foo' }.to raise_object_read_only_exception
203
+ end
200
204
  end
201
205
 
202
206
  # Manipulation methods
@@ -50,108 +50,6 @@ describe 'Watir#relaxed_locate?' do
50
50
  end
51
51
  end
52
52
 
53
- context 'when evaluating order of failure precedence' do
54
- it 'fails first for parent not existing' do
55
- begin
56
- Watir.default_timeout = 0
57
- inspected = '#<Watir::Div: located: false; {:id=>"no_parent", :tag_name=>"div"}>'
58
- element = browser.div(id: 'no_parent').div(id: 'no_child')
59
- error = Watir::Exception::UnknownObjectException
60
- message = "timed out after #{Watir.default_timeout} seconds, waiting for #{inspected} to be located"
61
- expect { element.click }.to raise_exception(error, message)
62
- ensure
63
- Watir.default_timeout = 30
64
- end
65
- end
66
-
67
- it 'fails for child not existing if parent exists' do
68
- begin
69
- Watir.default_timeout = 0
70
- inspected = '#<Watir::Div: located: false; {:id=>"buttons", :tag_name=>"div"} --> {:id=>"no_child", :tag_name=>"div"}>'
71
- element = browser.div(id: 'buttons').div(id: 'no_child')
72
- error = Watir::Exception::UnknownObjectException
73
- message = "timed out after #{Watir.default_timeout} seconds, waiting for #{inspected} to be located"
74
- expect { element.click }.to raise_exception(error, message)
75
- ensure
76
- Watir.default_timeout = 30
77
- end
78
- end
79
-
80
- it 'fails for parent not present if child exists' do
81
- begin
82
- Watir.default_timeout = 0.5
83
- inspected = '#<Watir::Div: located: true; {:id=>"also_hidden", :tag_name=>"div"}>'
84
- element = browser.div(id: 'also_hidden').div(id: 'hidden_child')
85
- error = Watir::Exception::UnknownObjectException
86
- message = "element located, but timed out after #{Watir.default_timeout} seconds, waiting for true condition on #{inspected}"
87
- allow($stderr).to receive(:write).twice
88
- expect { element.click }.to raise_exception(error, message)
89
- ensure
90
- Watir.default_timeout = 30
91
- end
92
- end
93
-
94
- it 'fails for child not present if parent is present' do
95
- begin
96
- Watir.default_timeout = 0.5
97
- inspected = '#<Watir::Button: located: true; {:id=>"buttons", :tag_name=>"div"} --> {:id=>"btn2", :tag_name=>"button"}>'
98
- element = browser.div(id: 'buttons').button(id: 'btn2')
99
- error = Watir::Exception::UnknownObjectException
100
- message = "element located, but timed out after #{Watir.default_timeout} seconds, waiting for true condition on #{inspected}"
101
- allow($stderr).to receive(:write).twice
102
- expect { element.click }.to raise_exception(error, message)
103
- ensure
104
- Watir.default_timeout = 30
105
- end
106
- end
107
-
108
- it 'fails for element not enabled if present' do
109
- browser.goto(WatirSpec.url_for("forms_with_input_elements.html"))
110
- begin
111
- Watir.default_timeout = 0.5
112
- inspected = '#<Watir::TextField: located: true; {:id=>"new_user", :tag_name=>"form"} --> {:id=>"good_luck", :tag_name=>"input or textarea", :type=>"(any text type)"}>'
113
- element = browser.form(id: 'new_user').text_field(id: 'good_luck')
114
- error = Watir::Exception::ObjectDisabledException
115
- message = "element present, but timed out after #{Watir.default_timeout} seconds, waiting for #{inspected} to be enabled"
116
- expect { element.set('foo') }.to raise_exception(error, message)
117
- ensure
118
- Watir.default_timeout = 30
119
- end
120
- end
121
-
122
- it 'fails for element being readonly if enabled' do
123
- browser.goto(WatirSpec.url_for("forms_with_input_elements.html"))
124
- begin
125
- Watir.default_timeout = 0.5
126
- inspected = '#<Watir::TextField: located: true; {:id=>"new_user", :tag_name=>"form"} --> {:id=>"new_user_code", :tag_name=>"input or textarea", :type=>"(any text type)"}>'
127
- element = browser.form(id: 'new_user').text_field(id: 'new_user_code')
128
- error = Watir::Exception::ObjectReadOnlyException
129
- message = "element present and enabled, but timed out after #{Watir.default_timeout} seconds, waiting for #{inspected} to not be readonly"
130
- expect { element.set('foo') }.to raise_exception(error, message)
131
- ensure
132
- Watir.default_timeout = 30
133
- end
134
- end
135
- end
136
-
137
- it 'gives warning when rescuing for flow control' do
138
- begin
139
- Watir.default_timeout = 1
140
- element = browser.link(id: 'not_there')
141
- message = "This code has slept for the duration of the default timeout "
142
- message << "waiting for an Element to exist. If the test is still passing, "
143
- message << "consider using Element#exists? instead of rescuing UnknownObjectException\n"
144
- expect do
145
- begin
146
- element.click
147
- rescue Watir::Exception::UnknownObjectException
148
- end
149
- end.to output(message).to_stderr
150
- ensure
151
- Watir.default_timeout = 30
152
- end
153
- end
154
-
155
53
  it 'ensures all checks happen once even if time has expired' do
156
54
  begin
157
55
  Watir.default_timeout = -1
@@ -160,19 +58,6 @@ describe 'Watir#relaxed_locate?' do
160
58
  Watir.default_timeout = 30
161
59
  end
162
60
  end
163
-
164
- it 'ensures that the same timeout is used for all of the calls' do
165
- begin
166
- Watir.default_timeout = 1.1
167
- browser.a(id: 'add_foobar').click
168
- allow($stderr).to receive(:write).twice
169
- # Element created after 1 second, and displays after 2 seconds
170
- # Click will only raise this exception if the timer is not reset between #wait_for_exists and #wait_for_present
171
- expect { browser.div(id: 'foobar').click }.to raise_exception Watir::Exception::UnknownObjectException
172
- ensure
173
- Watir.default_timeout = 30
174
- end
175
- end
176
61
  end
177
62
  end
178
63
 
@@ -202,12 +87,7 @@ describe 'Watir#relaxed_locate?' do
202
87
  start_time = ::Time.now
203
88
  browser.a(id: 'show_bar').click
204
89
 
205
- compliant_on :firefox do
206
- expect { browser.div(id: 'bar').click }.to raise_exception(Selenium::WebDriver::Error::ElementNotInteractableError)
207
- end
208
- not_compliant_on :firefox do
209
- expect { browser.div(id: 'bar').click }.to raise_exception(Selenium::WebDriver::Error::ElementNotVisibleError)
210
- end
90
+ expect { browser.div(id: 'bar').click }.to raise_unknown_object_exception
211
91
 
212
92
  expect(::Time.now - start_time).to be < 1
213
93
  end
@@ -239,7 +239,7 @@ not_compliant_on :safari do
239
239
  describe "#wait_while_present" do
240
240
  it "waits until the element disappears" do
241
241
  browser.a(id: 'hide_foo').click
242
- expect { browser.div(id: 'foo').wait_while_present(timeout: 1) }.to_not raise_exception
242
+ expect { browser.div(id: 'foo').wait_while_present(timeout: 2) }.to_not raise_exception
243
243
  end
244
244
 
245
245
  it "times out if the element doesn't disappear" do
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.3.0'
5
+ s.version = '6.4.0.rc1'
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']
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.3.0
4
+ version: 6.4.0.rc1
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-06-20 00:00:00.000000000 Z
12
+ date: 2017-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: selenium-webdriver
@@ -476,9 +476,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
476
476
  version: '0'
477
477
  required_rubygems_version: !ruby/object:Gem::Requirement
478
478
  requirements:
479
- - - ">="
479
+ - - ">"
480
480
  - !ruby/object:Gem::Version
481
- version: '0'
481
+ version: 1.3.1
482
482
  requirements: []
483
483
  rubyforge_project: watir
484
484
  rubygems_version: 2.5.2