watir 6.0.0.beta3 → 6.0.0.beta4
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 +4 -4
 - data/.travis.yml +1 -7
 - data/CHANGES.md +8 -0
 - data/lib/watir.rb +35 -19
 - data/lib/watir/atoms.rb +0 -1
 - data/lib/watir/browser.rb +2 -2
 - data/lib/watir/element_collection.rb +7 -7
 - data/lib/watir/elements/element.rb +33 -37
 - data/lib/watir/elements/iframe.rb +6 -6
 - data/lib/watir/elements/text_field.rb +1 -1
 - data/lib/watir/locators.rb +1 -0
 - data/lib/watir/locators/element/locator.rb +13 -13
 - data/lib/watir/locators/element/selector_builder.rb +4 -21
 - data/lib/watir/locators/row/selector_builder.rb +1 -1
 - data/lib/watir/wait.rb +18 -2
 - data/spec/browser_spec.rb +12 -14
 - data/spec/element_locator_spec.rb +21 -116
 - data/spec/element_spec.rb +1 -5
 - data/spec/spec_helper.rb +0 -8
 - data/support/travis.sh +3 -1
 - data/watir.gemspec +1 -1
 - metadata +2 -6
 - data/lib/watir/atoms/getAttribute.js +0 -18
 - data/lib/watir/locators/element/selector_builder/css.rb +0 -65
 - data/spec/always_locate_spec.rb +0 -43
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 04b089bcf4e58208a441dedb2d2404b8e20e2967
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 1994d0b6cc7f8c5c763da8558447f73bade0d3b9
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4cdae8a09deebfaab7adb7cf413d5f3a4043485d716fa52c87deadf00d6c4d46e8644d9e16c1b1c285abdc4e6f5fe3104f10ace01264b897332835169d0003d7
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: b220f0b235362602d735a17967c8e87859f864a65df54145ff87ed1a08ed4b650a07908e64513f2adaf558f1d5713dd2d35cd9e84b0e4b66b4e5edf65e2d8239
         
     | 
    
        data/.travis.yml
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ sudo: false 
     | 
|
| 
       2 
2 
     | 
    
         
             
            rvm:
         
     | 
| 
       3 
3 
     | 
    
         
             
              - 2.1
         
     | 
| 
       4 
4 
     | 
    
         
             
              - 2.2
         
     | 
| 
       5 
     | 
    
         
            -
              - 2.3. 
     | 
| 
      
 5 
     | 
    
         
            +
              - 2.3.1
         
     | 
| 
       6 
6 
     | 
    
         
             
            addons:
         
     | 
| 
       7 
7 
     | 
    
         
             
              firefox: latest
         
     | 
| 
       8 
8 
     | 
    
         
             
              apt:
         
     | 
| 
         @@ -24,12 +24,6 @@ before_script: 
     | 
|
| 
       24 
24 
     | 
    
         
             
            script: bundle exec rake $RAKE_TASK
         
     | 
| 
       25 
25 
     | 
    
         
             
            env:
         
     | 
| 
       26 
26 
     | 
    
         
             
              - RAKE_TASK=spec:firefox
         
     | 
| 
       27 
     | 
    
         
            -
              - RAKE_TASK=spec:firefox ALWAYS_LOCATE=false
         
     | 
| 
       28 
     | 
    
         
            -
              - RAKE_TASK=spec:firefox PREFER_CSS=1 SELECTOR_STATS=1
         
     | 
| 
       29 
27 
     | 
    
         
             
              - RAKE_TASK=spec:chrome
         
     | 
| 
       30 
     | 
    
         
            -
              - RAKE_TASK=spec:chrome ALWAYS_LOCATE=false
         
     | 
| 
       31 
     | 
    
         
            -
              - RAKE_TASK=spec:chrome PREFER_CSS=1 SELECTOR_STATS=1
         
     | 
| 
       32 
28 
     | 
    
         
             
              - RAKE_TASK=spec:phantomjs
         
     | 
| 
       33 
     | 
    
         
            -
              - RAKE_TASK=spec:phantomjs ALWAYS_LOCATE=false
         
     | 
| 
       34 
     | 
    
         
            -
              - RAKE_TASK=spec:phantomjs PREFER_CSS=1 SELECTOR_STATS=1
         
     | 
| 
       35 
29 
     | 
    
         
             
              - RAKE_TASK=yard:doctest
         
     | 
    
        data/CHANGES.md
    CHANGED
    
    | 
         @@ -1,3 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ### 6.0.0.beta4 (2016-09-12)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Deprecate Watir#prefer_css setting
         
     | 
| 
      
 4 
     | 
    
         
            +
            * Deprecate Watir#always_locate setting
         
     | 
| 
      
 5 
     | 
    
         
            +
            * Add `Element#stale?`
         
     | 
| 
      
 6 
     | 
    
         
            +
            * Add `Element#wait_until_stale`
         
     | 
| 
      
 7 
     | 
    
         
            +
            * Allow locating date/time/etc. input types with `#text_field` (#295)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       1 
9 
     | 
    
         
             
            ### 6.0.0.beta3 (2016-08-07)
         
     | 
| 
       2 
10 
     | 
    
         | 
| 
       3 
11 
     | 
    
         
             
            * Deprecate `require "watir-webdriver"` in favor of `require "watir"`
         
     | 
    
        data/lib/watir.rb
    CHANGED
    
    | 
         @@ -14,45 +14,61 @@ require 'watir/screenshot' 
     | 
|
| 
       14 
14 
     | 
    
         
             
            require 'watir/after_hooks'
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
            module Watir
         
     | 
| 
       17 
     | 
    
         
            -
              @always_locate = true
         
     | 
| 
       18 
17 
     | 
    
         | 
| 
       19 
18 
     | 
    
         
             
              class << self
         
     | 
| 
       20 
     | 
    
         
            -
                def always_locate?
         
     | 
| 
       21 
     | 
    
         
            -
                  @always_locate
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
19 
     | 
    
         | 
| 
       24 
20 
     | 
    
         
             
                #
         
     | 
| 
       25 
     | 
    
         
            -
                # Whether or not Watir should  
     | 
| 
       26 
     | 
    
         
            -
                # Defaults to true.
         
     | 
| 
      
 21 
     | 
    
         
            +
                # Whether or not Watir should re-locate a stale Element on use.
         
     | 
| 
       27 
22 
     | 
    
         
             
                #
         
     | 
| 
       28 
23 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
                def always_locate 
     | 
| 
       30 
     | 
    
         
            -
                   
     | 
| 
      
 24 
     | 
    
         
            +
                def always_locate?
         
     | 
| 
      
 25 
     | 
    
         
            +
                  always_locate_message
         
     | 
| 
      
 26 
     | 
    
         
            +
                  true
         
     | 
| 
       31 
27 
     | 
    
         
             
                end
         
     | 
| 
       32 
28 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                def  
     | 
| 
       34 
     | 
    
         
            -
                   
     | 
| 
      
 29 
     | 
    
         
            +
                def always_locate=(_bool)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  always_locate_message
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def always_locate_message
         
     | 
| 
      
 34 
     | 
    
         
            +
                  warn <<-EOS
         
     | 
| 
      
 35 
     | 
    
         
            +
            Watir#always_locate is deprecated; elements are always cached and will always
         
     | 
| 
      
 36 
     | 
    
         
            +
            be re-located if they go stale before use.
         
     | 
| 
      
 37 
     | 
    
         
            +
            Use Element#stale? or Element#wait_until_stale if needed for flow control.
         
     | 
| 
      
 38 
     | 
    
         
            +
                  EOS
         
     | 
| 
       35 
39 
     | 
    
         
             
                end
         
     | 
| 
       36 
40 
     | 
    
         | 
| 
       37 
41 
     | 
    
         
             
                #
         
     | 
| 
       38 
     | 
    
         
            -
                #  
     | 
| 
      
 42 
     | 
    
         
            +
                # Whether or not Watir should prefer CSS when translating the Watir selectors to Selenium.
         
     | 
| 
       39 
43 
     | 
    
         
             
                #
         
     | 
| 
       40 
44 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                def  
     | 
| 
       42 
     | 
    
         
            -
                   
     | 
| 
      
 45 
     | 
    
         
            +
                def prefer_css?
         
     | 
| 
      
 46 
     | 
    
         
            +
                  prefer_css_message
         
     | 
| 
      
 47 
     | 
    
         
            +
                  false
         
     | 
| 
       43 
48 
     | 
    
         
             
                end
         
     | 
| 
       44 
49 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                def prefer_css 
     | 
| 
       46 
     | 
    
         
            -
                   
     | 
| 
      
 50 
     | 
    
         
            +
                def prefer_css=(_bool)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  prefer_css_message
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                def prefer_css_message
         
     | 
| 
      
 55 
     | 
    
         
            +
                  warn <<-EOS
         
     | 
| 
      
 56 
     | 
    
         
            +
            Watir#prefer_css is deprecated; all elements that can not be passed directly
         
     | 
| 
      
 57 
     | 
    
         
            +
            as Selenium locators will be translated to XPath. To continue using CSS Selectors
         
     | 
| 
      
 58 
     | 
    
         
            +
            require the watir_css gem - https://github.com/watir/watir_css
         
     | 
| 
      
 59 
     | 
    
         
            +
                  EOS
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                def default_timeout
         
     | 
| 
      
 63 
     | 
    
         
            +
                  @default_timeout ||= 30
         
     | 
| 
       47 
64 
     | 
    
         
             
                end
         
     | 
| 
       48 
65 
     | 
    
         | 
| 
       49 
66 
     | 
    
         
             
                #
         
     | 
| 
       50 
     | 
    
         
            -
                #  
     | 
| 
       51 
     | 
    
         
            -
                # Defaults to false.
         
     | 
| 
      
 67 
     | 
    
         
            +
                # Default wait time for wait methods.
         
     | 
| 
       52 
68 
     | 
    
         
             
                #
         
     | 
| 
       53 
69 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                def  
     | 
| 
       55 
     | 
    
         
            -
                  @ 
     | 
| 
      
 70 
     | 
    
         
            +
                def default_timeout=(value)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @default_timeout = value
         
     | 
| 
       56 
72 
     | 
    
         
             
                end
         
     | 
| 
       57 
73 
     | 
    
         | 
| 
       58 
74 
     | 
    
         
             
                def locator_namespace
         
     | 
    
        data/lib/watir/atoms.rb
    CHANGED
    
    
    
        data/lib/watir/browser.rb
    CHANGED
    
    
| 
         @@ -7,8 +7,8 @@ module Watir 
     | 
|
| 
       7 
7 
     | 
    
         
             
              class ElementCollection
         
     | 
| 
       8 
8 
     | 
    
         
             
                include Enumerable
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
                def initialize( 
     | 
| 
       11 
     | 
    
         
            -
                  @ 
     | 
| 
      
 10 
     | 
    
         
            +
                def initialize(query_scope, selector)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @query_scope = query_scope
         
     | 
| 
       12 
12 
     | 
    
         
             
                  @selector = selector
         
     | 
| 
       13 
13 
     | 
    
         
             
                end
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
         @@ -50,7 +50,7 @@ module Watir 
     | 
|
| 
       50 
50 
     | 
    
         
             
                #
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                def [](idx)
         
     | 
| 
       53 
     | 
    
         
            -
                  to_a[idx] || element_class.new(@ 
     | 
| 
      
 53 
     | 
    
         
            +
                  to_a[idx] || element_class.new(@query_scope, @selector.merge(index: idx))
         
     | 
| 
       54 
54 
     | 
    
         
             
                end
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
                #
         
     | 
| 
         @@ -81,17 +81,17 @@ module Watir 
     | 
|
| 
       81 
81 
     | 
    
         | 
| 
       82 
82 
     | 
    
         
             
                def to_a
         
     | 
| 
       83 
83 
     | 
    
         
             
                  # TODO: optimize - lazy element_class instance?
         
     | 
| 
       84 
     | 
    
         
            -
                  @to_a ||= elements.map { |e| element_class.new(@ 
     | 
| 
      
 84 
     | 
    
         
            +
                  @to_a ||= elements.map { |e| element_class.new(@query_scope, element: e) }
         
     | 
| 
       85 
85 
     | 
    
         
             
                end
         
     | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
87 
     | 
    
         
             
                private
         
     | 
| 
       88 
88 
     | 
    
         | 
| 
       89 
89 
     | 
    
         
             
                def elements
         
     | 
| 
       90 
     | 
    
         
            -
                  @ 
     | 
| 
      
 90 
     | 
    
         
            +
                  @query_scope.is_a?(IFrame) ? @query_scope.switch_to! : @query_scope.send(:assert_exists)
         
     | 
| 
       91 
91 
     | 
    
         | 
| 
       92 
92 
     | 
    
         
             
                  element_validator = element_validator_class.new
         
     | 
| 
       93 
     | 
    
         
            -
                  selector_builder = selector_builder_class.new(@ 
     | 
| 
       94 
     | 
    
         
            -
                  locator = locator_class.new(@ 
     | 
| 
      
 93 
     | 
    
         
            +
                  selector_builder = selector_builder_class.new(@query_scope, @selector, element_class.attribute_list)
         
     | 
| 
      
 94 
     | 
    
         
            +
                  locator = locator_class.new(@query_scope, @selector, selector_builder, element_validator)
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
       96 
96 
     | 
    
         
             
                  @elements ||= locator.locate_all
         
     | 
| 
       97 
97 
     | 
    
         
             
                end
         
     | 
| 
         @@ -22,10 +22,10 @@ module Watir 
     | 
|
| 
       22 
22 
     | 
    
         
             
                attribute String, :id, :id
         
     | 
| 
       23 
23 
     | 
    
         
             
                attribute String, :class_name, :className
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                def initialize( 
     | 
| 
       26 
     | 
    
         
            -
                  @ 
     | 
| 
      
 25 
     | 
    
         
            +
                def initialize(query_scope, selector)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @query_scope = query_scope
         
     | 
| 
       27 
27 
     | 
    
         
             
                  @selector = selector
         
     | 
| 
       28 
     | 
    
         
            -
                  @element 
     | 
| 
      
 28 
     | 
    
         
            +
                  @element = nil
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  unless @selector.kind_of? Hash
         
     | 
| 
       31 
31 
     | 
    
         
             
                    raise ArgumentError, "invalid argument: #{selector.inspect}"
         
     | 
| 
         @@ -371,7 +371,7 @@ module Watir 
     | 
|
| 
       371 
371 
     | 
    
         
             
                  e = element_call { execute_atom :getParentElement, @element }
         
     | 
| 
       372 
372 
     | 
    
         | 
| 
       373 
373 
     | 
    
         
             
                  if e.kind_of?(Selenium::WebDriver::Element)
         
     | 
| 
       374 
     | 
    
         
            -
                    Watir.element_class_for(e.tag_name.downcase).new(@ 
     | 
| 
      
 374 
     | 
    
         
            +
                    Watir.element_class_for(e.tag_name.downcase).new(@query_scope, element: e)
         
     | 
| 
       375 
375 
     | 
    
         
             
                  end
         
     | 
| 
       376 
376 
     | 
    
         
             
                end
         
     | 
| 
       377 
377 
     | 
    
         | 
| 
         @@ -380,7 +380,7 @@ module Watir 
     | 
|
| 
       380 
380 
     | 
    
         
             
                #
         
     | 
| 
       381 
381 
     | 
    
         | 
| 
       382 
382 
     | 
    
         
             
                def driver
         
     | 
| 
       383 
     | 
    
         
            -
                  @ 
     | 
| 
      
 383 
     | 
    
         
            +
                  @query_scope.driver
         
     | 
| 
       384 
384 
     | 
    
         
             
                end
         
     | 
| 
       385 
385 
     | 
    
         | 
| 
       386 
386 
     | 
    
         
             
                #
         
     | 
| 
         @@ -407,6 +407,7 @@ module Watir 
     | 
|
| 
       407 
407 
     | 
    
         
             
                # Returns true if this element is present and enabled on the page.
         
     | 
| 
       408 
408 
     | 
    
         
             
                #
         
     | 
| 
       409 
409 
     | 
    
         
             
                # @return [Boolean]
         
     | 
| 
      
 410 
     | 
    
         
            +
                # @see Watir::Wait
         
     | 
| 
       410 
411 
     | 
    
         
             
                #
         
     | 
| 
       411 
412 
     | 
    
         | 
| 
       412 
413 
     | 
    
         
             
                def enabled?
         
     | 
| 
         @@ -480,7 +481,7 @@ module Watir 
     | 
|
| 
       480 
481 
     | 
    
         
             
                    klass = Watir.element_class_for(tag_name)
         
     | 
| 
       481 
482 
     | 
    
         
             
                  end
         
     | 
| 
       482 
483 
     | 
    
         | 
| 
       483 
     | 
    
         
            -
                  klass.new(@ 
     | 
| 
      
 484 
     | 
    
         
            +
                  klass.new(@query_scope, element: elem)
         
     | 
| 
       484 
485 
     | 
    
         
             
                end
         
     | 
| 
       485 
486 
     | 
    
         | 
| 
       486 
487 
     | 
    
         
             
                #
         
     | 
| 
         @@ -490,7 +491,22 @@ module Watir 
     | 
|
| 
       490 
491 
     | 
    
         
             
                #
         
     | 
| 
       491 
492 
     | 
    
         | 
| 
       492 
493 
     | 
    
         
             
                def browser
         
     | 
| 
       493 
     | 
    
         
            -
                  @ 
     | 
| 
      
 494 
     | 
    
         
            +
                  @query_scope.browser
         
     | 
| 
      
 495 
     | 
    
         
            +
                end
         
     | 
| 
      
 496 
     | 
    
         
            +
             
     | 
| 
      
 497 
     | 
    
         
            +
                #
         
     | 
| 
      
 498 
     | 
    
         
            +
                # Returns true if a previously located element is no longer attached to DOM.
         
     | 
| 
      
 499 
     | 
    
         
            +
                #
         
     | 
| 
      
 500 
     | 
    
         
            +
                # @return [Boolean]
         
     | 
| 
      
 501 
     | 
    
         
            +
                # @see Watir::Wait
         
     | 
| 
      
 502 
     | 
    
         
            +
                #
         
     | 
| 
      
 503 
     | 
    
         
            +
             
     | 
| 
      
 504 
     | 
    
         
            +
                def stale?
         
     | 
| 
      
 505 
     | 
    
         
            +
                  raise Watir::Exception::Error, "Can not check staleness of unused element" unless @element
         
     | 
| 
      
 506 
     | 
    
         
            +
                  @element.enabled? # any wire call will check for staleness
         
     | 
| 
      
 507 
     | 
    
         
            +
                  false
         
     | 
| 
      
 508 
     | 
    
         
            +
                rescue Selenium::WebDriver::Error::ObsoleteElementError
         
     | 
| 
      
 509 
     | 
    
         
            +
                  true
         
     | 
| 
       494 
510 
     | 
    
         
             
                end
         
     | 
| 
       495 
511 
     | 
    
         | 
| 
       496 
512 
     | 
    
         
             
                protected
         
     | 
| 
         @@ -508,29 +524,16 @@ module Watir 
     | 
|
| 
       508 
524 
     | 
    
         
             
                  assert_element_found
         
     | 
| 
       509 
525 
     | 
    
         
             
                end
         
     | 
| 
       510 
526 
     | 
    
         | 
| 
       511 
     | 
    
         
            -
                # Ensure that the element isn't stale, by relocating if it is 
     | 
| 
      
 527 
     | 
    
         
            +
                # Ensure that the element isn't stale, by relocating if it is
         
     | 
| 
       512 
528 
     | 
    
         
             
                def ensure_not_stale
         
     | 
| 
      
 529 
     | 
    
         
            +
                  ensure_context
         
     | 
| 
      
 530 
     | 
    
         
            +
             
     | 
| 
       513 
531 
     | 
    
         
             
                  # Performance shortcut; only need recursive call to ensure context if stale in current context
         
     | 
| 
       514 
532 
     | 
    
         
             
                  return unless stale?
         
     | 
| 
       515 
     | 
    
         
            -
             
     | 
| 
       516 
     | 
    
         
            -
                  ensure_context
         
     | 
| 
       517 
     | 
    
         
            -
                  if stale?
         
     | 
| 
       518 
     | 
    
         
            -
                    if Watir.always_locate? && !@selector[:element]
         
     | 
| 
       519 
     | 
    
         
            -
                      @element = locate
         
     | 
| 
       520 
     | 
    
         
            -
                    else
         
     | 
| 
       521 
     | 
    
         
            -
                      reset!
         
     | 
| 
       522 
     | 
    
         
            -
                    end
         
     | 
| 
       523 
     | 
    
         
            -
                  end
         
     | 
| 
      
 533 
     | 
    
         
            +
                  @element = @selector.key?(:element) ? nil : locate
         
     | 
| 
       524 
534 
     | 
    
         
             
                  assert_element_found
         
     | 
| 
       525 
535 
     | 
    
         
             
                end
         
     | 
| 
       526 
536 
     | 
    
         | 
| 
       527 
     | 
    
         
            -
                def stale?
         
     | 
| 
       528 
     | 
    
         
            -
                  @element.enabled? # any wire call will check for staleness
         
     | 
| 
       529 
     | 
    
         
            -
                  false
         
     | 
| 
       530 
     | 
    
         
            -
                rescue Selenium::WebDriver::Error::ObsoleteElementError
         
     | 
| 
       531 
     | 
    
         
            -
                  true
         
     | 
| 
       532 
     | 
    
         
            -
                end
         
     | 
| 
       533 
     | 
    
         
            -
             
     | 
| 
       534 
537 
     | 
    
         
             
                def assert_element_found
         
     | 
| 
       535 
538 
     | 
    
         
             
                  unless @element
         
     | 
| 
       536 
539 
     | 
    
         
             
                    raise UnknownObjectException, "unable to locate element, using #{selector_string}"
         
     | 
| 
         @@ -545,8 +548,8 @@ module Watir 
     | 
|
| 
       545 
548 
     | 
    
         
             
                  ensure_context
         
     | 
| 
       546 
549 
     | 
    
         | 
| 
       547 
550 
     | 
    
         
             
                  element_validator = element_validator_class.new
         
     | 
| 
       548 
     | 
    
         
            -
                  selector_builder = selector_builder_class.new(@ 
     | 
| 
       549 
     | 
    
         
            -
                  locator = locator_class.new(@ 
     | 
| 
      
 551 
     | 
    
         
            +
                  selector_builder = selector_builder_class.new(@query_scope, @selector, self.class.attribute_list)
         
     | 
| 
      
 552 
     | 
    
         
            +
                  locator = locator_class.new(@query_scope, @selector, selector_builder, element_validator)
         
     | 
| 
       550 
553 
     | 
    
         | 
| 
       551 
554 
     | 
    
         
             
                  locator.locate
         
     | 
| 
       552 
555 
     | 
    
         
             
                end
         
     | 
| 
         @@ -581,14 +584,11 @@ module Watir 
     | 
|
| 
       581 
584 
     | 
    
         | 
| 
       582 
585 
     | 
    
         
             
                # Ensure the driver is in the desired browser context
         
     | 
| 
       583 
586 
     | 
    
         
             
                def ensure_context
         
     | 
| 
       584 
     | 
    
         
            -
                  @ 
     | 
| 
      
 587 
     | 
    
         
            +
                  @query_scope.is_a?(IFrame) ? @query_scope.switch_to! : @query_scope.assert_exists
         
     | 
| 
       585 
588 
     | 
    
         
             
                end
         
     | 
| 
       586 
589 
     | 
    
         | 
| 
       587 
     | 
    
         
            -
                def attribute?( 
     | 
| 
       588 
     | 
    
         
            -
                   
     | 
| 
       589 
     | 
    
         
            -
                  element_call do
         
     | 
| 
       590 
     | 
    
         
            -
                    !!execute_atom(:getAttribute, @element, attribute.to_s.downcase)
         
     | 
| 
       591 
     | 
    
         
            -
                  end
         
     | 
| 
      
 590 
     | 
    
         
            +
                def attribute?(attribute_name)
         
     | 
| 
      
 591 
     | 
    
         
            +
                  !attribute_value(attribute_name).nil?
         
     | 
| 
       592 
592 
     | 
    
         
             
                end
         
     | 
| 
       593 
593 
     | 
    
         | 
| 
       594 
594 
     | 
    
         
             
                def assert_enabled
         
     | 
| 
         @@ -620,11 +620,7 @@ module Watir 
     | 
|
| 
       620 
620 
     | 
    
         
             
                def element_call
         
     | 
| 
       621 
621 
     | 
    
         
             
                  yield
         
     | 
| 
       622 
622 
     | 
    
         
             
                rescue Selenium::WebDriver::Error::StaleElementReferenceError
         
     | 
| 
       623 
     | 
    
         
            -
                   
     | 
| 
       624 
     | 
    
         
            -
                    @element = locate
         
     | 
| 
       625 
     | 
    
         
            -
                  else
         
     | 
| 
       626 
     | 
    
         
            -
                    reset!
         
     | 
| 
       627 
     | 
    
         
            -
                  end
         
     | 
| 
      
 623 
     | 
    
         
            +
                  @element = @selector.key?(:element) ? nil : locate
         
     | 
| 
       628 
624 
     | 
    
         
             
                  assert_element_found
         
     | 
| 
       629 
625 
     | 
    
         
             
                  retry
         
     | 
| 
       630 
626 
     | 
    
         
             
                end
         
     | 
| 
         @@ -2,12 +2,12 @@ module Watir 
     | 
|
| 
       2 
2 
     | 
    
         
             
              class IFrame < HTMLElement
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
                def locate
         
     | 
| 
       5 
     | 
    
         
            -
                  @ 
     | 
| 
      
 5 
     | 
    
         
            +
                  @query_scope.assert_exists
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                  selector = @selector.merge(tag_name: frame_tag)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  element_validator = element_validator_class.new
         
     | 
| 
       9 
     | 
    
         
            -
                  selector_builder = selector_builder_class.new(@ 
     | 
| 
       10 
     | 
    
         
            -
                  locator = locator_class.new(@ 
     | 
| 
      
 9 
     | 
    
         
            +
                  selector_builder = selector_builder_class.new(@query_scope, selector, self.class.attribute_list)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  locator = locator_class.new(@query_scope, selector, selector_builder, element_validator)
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                  element = locator.locate
         
     | 
| 
       13 
13 
     | 
    
         
             
                  element or raise UnknownFrameException, "unable to locate #{@selector[:tag_name]} using #{selector_string}"
         
     | 
| 
         @@ -69,7 +69,7 @@ module Watir 
     | 
|
| 
       69 
69 
     | 
    
         
             
                  # index will return nil. That's why `#all_elements` should always
         
     | 
| 
       70 
70 
     | 
    
         
             
                  # be called after `#elements.`
         
     | 
| 
       71 
71 
     | 
    
         
             
                  element_indexes = elements.map { |el| all_elements.index(el) }
         
     | 
| 
       72 
     | 
    
         
            -
                  element_indexes.map { |idx| element_class.new(@ 
     | 
| 
      
 72 
     | 
    
         
            +
                  element_indexes.map { |idx| element_class.new(@query_scope, tag_name: @selector[:tag_name], index: idx) }
         
     | 
| 
       73 
73 
     | 
    
         
             
                end
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
       75 
75 
     | 
    
         
             
                private
         
     | 
| 
         @@ -78,8 +78,8 @@ module Watir 
     | 
|
| 
       78 
78 
     | 
    
         
             
                  selector = { tag_name: @selector[:tag_name] }
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
                  element_validator = element_validator_class.new
         
     | 
| 
       81 
     | 
    
         
            -
                  selector_builder = selector_builder_class.new(@ 
     | 
| 
       82 
     | 
    
         
            -
                  locator = locator_class.new(@ 
     | 
| 
      
 81 
     | 
    
         
            +
                  selector_builder = selector_builder_class.new(@query_scope, selector, element_class.attribute_list)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  locator = locator_class.new(@query_scope, selector, selector_builder, element_validator)
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
84 
     | 
    
         
             
                  locator.locate_all
         
     | 
| 
       85 
85 
     | 
    
         
             
                end
         
     | 
| 
         @@ -2,7 +2,7 @@ module Watir 
     | 
|
| 
       2 
2 
     | 
    
         
             
              class TextField < Input
         
     | 
| 
       3 
3 
     | 
    
         
             
                include UserEditable
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                NON_TEXT_TYPES = %w[file radio checkbox submit reset image button hidden  
     | 
| 
      
 5 
     | 
    
         
            +
                NON_TEXT_TYPES = %w[file radio checkbox submit reset image button hidden range color]
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                inherit_attributes_from Watir::TextArea
         
     | 
| 
       8 
8 
     | 
    
         
             
                remove_method :type # we want Input#type here, which was overriden by TextArea's attributes
         
     | 
    
        data/lib/watir/locators.rb
    CHANGED
    
    
| 
         @@ -28,8 +28,8 @@ module Watir 
     | 
|
| 
       28 
28 
     | 
    
         
             
                      \z
         
     | 
| 
       29 
29 
     | 
    
         
             
                    }x
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                    def initialize( 
     | 
| 
       32 
     | 
    
         
            -
                      @ 
     | 
| 
      
 31 
     | 
    
         
            +
                    def initialize(query_scope, selector, selector_builder, element_validator)
         
     | 
| 
      
 32 
     | 
    
         
            +
                      @query_scope = query_scope # either element or browser
         
     | 
| 
       33 
33 
     | 
    
         
             
                      @selector = selector.dup
         
     | 
| 
       34 
34 
     | 
    
         
             
                      @selector_builder = selector_builder
         
     | 
| 
       35 
35 
     | 
    
         
             
                      @element_validator = element_validator
         
     | 
| 
         @@ -72,7 +72,7 @@ module Watir 
     | 
|
| 
       72 
72 
     | 
    
         
             
                      tag_name = selector.delete(:tag_name)
         
     | 
| 
       73 
73 
     | 
    
         
             
                      return unless selector.empty? # multiple attributes
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                      element = @ 
     | 
| 
      
 75 
     | 
    
         
            +
                      element = @query_scope.wd.find_element(:id, id)
         
     | 
| 
       76 
76 
     | 
    
         
             
                      return if tag_name && !element_validator.validate(element, selector)
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
       78 
78 
     | 
    
         
             
                      element
         
     | 
| 
         @@ -98,9 +98,9 @@ module Watir 
     | 
|
| 
       98 
98 
     | 
    
         
             
                      if how
         
     | 
| 
       99 
99 
     | 
    
         
             
                        # could build xpath/css for selector
         
     | 
| 
       100 
100 
     | 
    
         
             
                        if idx
         
     | 
| 
       101 
     | 
    
         
            -
                          @ 
     | 
| 
      
 101 
     | 
    
         
            +
                          @query_scope.wd.find_elements(how, what)[idx]
         
     | 
| 
       102 
102 
     | 
    
         
             
                        else
         
     | 
| 
       103 
     | 
    
         
            -
                          @ 
     | 
| 
      
 103 
     | 
    
         
            +
                          @query_scope.wd.find_element(how, what)
         
     | 
| 
       104 
104 
     | 
    
         
             
                        end
         
     | 
| 
       105 
105 
     | 
    
         
             
                      else
         
     | 
| 
       106 
106 
     | 
    
         
             
                        # can't use xpath, probably a regexp in there
         
     | 
| 
         @@ -132,7 +132,7 @@ module Watir 
     | 
|
| 
       132 
132 
     | 
    
         | 
| 
       133 
133 
     | 
    
         
             
                      how, what = selector_builder.build(selector)
         
     | 
| 
       134 
134 
     | 
    
         
             
                      if how
         
     | 
| 
       135 
     | 
    
         
            -
                        @ 
     | 
| 
      
 135 
     | 
    
         
            +
                        @query_scope.wd.find_elements(how, what)
         
     | 
| 
       136 
136 
     | 
    
         
             
                      else
         
     | 
| 
       137 
137 
     | 
    
         
             
                        wd_find_by_regexp_selector(selector, :select)
         
     | 
| 
       138 
138 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -140,7 +140,7 @@ module Watir 
     | 
|
| 
       140 
140 
     | 
    
         | 
| 
       141 
141 
     | 
    
         
             
                    def wd_find_all_by(how, what)
         
     | 
| 
       142 
142 
     | 
    
         
             
                      if what.is_a? String
         
     | 
| 
       143 
     | 
    
         
            -
                        @ 
     | 
| 
      
 143 
     | 
    
         
            +
                        @query_scope.wd.find_elements(how, what)
         
     | 
| 
       144 
144 
     | 
    
         
             
                      else
         
     | 
| 
       145 
145 
     | 
    
         
             
                        all_elements.select { |element| fetch_value(element, how) =~ what }
         
     | 
| 
       146 
146 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -160,19 +160,19 @@ module Watir 
     | 
|
| 
       160 
160 
     | 
    
         
             
                    end
         
     | 
| 
       161 
161 
     | 
    
         | 
| 
       162 
162 
     | 
    
         
             
                    def all_elements
         
     | 
| 
       163 
     | 
    
         
            -
                      @ 
     | 
| 
      
 163 
     | 
    
         
            +
                      @query_scope.wd.find_elements(xpath: ".//*")
         
     | 
| 
       164 
164 
     | 
    
         
             
                    end
         
     | 
| 
       165 
165 
     | 
    
         | 
| 
       166 
166 
     | 
    
         
             
                    def wd_find_first_by(how, what)
         
     | 
| 
       167 
167 
     | 
    
         
             
                      if what.is_a? String
         
     | 
| 
       168 
     | 
    
         
            -
                        @ 
     | 
| 
      
 168 
     | 
    
         
            +
                        @query_scope.wd.find_element(how, what)
         
     | 
| 
       169 
169 
     | 
    
         
             
                      else
         
     | 
| 
       170 
170 
     | 
    
         
             
                        all_elements.find { |element| fetch_value(element, how) =~ what }
         
     | 
| 
       171 
171 
     | 
    
         
             
                      end
         
     | 
| 
       172 
172 
     | 
    
         
             
                    end
         
     | 
| 
       173 
173 
     | 
    
         | 
| 
       174 
174 
     | 
    
         
             
                    def wd_find_by_regexp_selector(selector, method = :find)
         
     | 
| 
       175 
     | 
    
         
            -
                       
     | 
| 
      
 175 
     | 
    
         
            +
                      query_scope = @query_scope.wd
         
     | 
| 
       176 
176 
     | 
    
         
             
                      rx_selector = delete_regexps_from(selector)
         
     | 
| 
       177 
177 
     | 
    
         | 
| 
       178 
178 
     | 
    
         
             
                      if rx_selector.key?(:label) && selector_builder.should_use_label_element?
         
     | 
| 
         @@ -180,7 +180,7 @@ module Watir 
     | 
|
| 
       180 
180 
     | 
    
         
             
                        if (id = label.attribute(:for))
         
     | 
| 
       181 
181 
     | 
    
         
             
                          selector[:id] = id
         
     | 
| 
       182 
182 
     | 
    
         
             
                        else
         
     | 
| 
       183 
     | 
    
         
            -
                           
     | 
| 
      
 183 
     | 
    
         
            +
                          query_scope = label
         
     | 
| 
       184 
184 
     | 
    
         
             
                        end
         
     | 
| 
       185 
185 
     | 
    
         
             
                      end
         
     | 
| 
       186 
186 
     | 
    
         | 
| 
         @@ -199,7 +199,7 @@ module Watir 
     | 
|
| 
       199 
199 
     | 
    
         
             
                        end
         
     | 
| 
       200 
200 
     | 
    
         
             
                      end
         
     | 
| 
       201 
201 
     | 
    
         | 
| 
       202 
     | 
    
         
            -
                      elements =  
     | 
| 
      
 202 
     | 
    
         
            +
                      elements = query_scope.find_elements(how, what)
         
     | 
| 
       203 
203 
     | 
    
         
             
                      elements.__send__(method) { |el| matches_selector?(el, rx_selector) }
         
     | 
| 
       204 
204 
     | 
    
         
             
                    end
         
     | 
| 
       205 
205 
     | 
    
         | 
| 
         @@ -217,7 +217,7 @@ module Watir 
     | 
|
| 
       217 
217 
     | 
    
         | 
| 
       218 
218 
     | 
    
         
             
                    def label_from_text(label_exp)
         
     | 
| 
       219 
219 
     | 
    
         
             
                      # TODO: this won't work correctly if @wd is a sub-element
         
     | 
| 
       220 
     | 
    
         
            -
                      @ 
     | 
| 
      
 220 
     | 
    
         
            +
                      @query_scope.wd.find_elements(:tag_name, 'label').find do |el|
         
     | 
| 
       221 
221 
     | 
    
         
             
                        matches_selector?(el, text: label_exp)
         
     | 
| 
       222 
222 
     | 
    
         
             
                      end
         
     | 
| 
       223 
223 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1,6 +1,3 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'watir/locators/element/selector_builder/css'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'watir/locators/element/selector_builder/xpath'
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
1 
     | 
    
         
             
            module Watir
         
     | 
| 
       5 
2 
     | 
    
         
             
              module Locators
         
     | 
| 
       6 
3 
     | 
    
         
             
                class Element
         
     | 
| 
         @@ -8,8 +5,8 @@ module Watir 
     | 
|
| 
       8 
5 
     | 
    
         
             
                    VALID_WHATS = [String, Regexp]
         
     | 
| 
       9 
6 
     | 
    
         
             
                    WILDCARD_ATTRIBUTE = /^(aria|data)_(.+)$/
         
     | 
| 
       10 
7 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
                    def initialize( 
     | 
| 
       12 
     | 
    
         
            -
                      @ 
     | 
| 
      
 8 
     | 
    
         
            +
                    def initialize(query_scope, selector, valid_attributes)
         
     | 
| 
      
 9 
     | 
    
         
            +
                      @query_scope = query_scope # either element or browser
         
     | 
| 
       13 
10 
     | 
    
         
             
                      @selector = selector
         
     | 
| 
       14 
11 
     | 
    
         
             
                      @valid_attributes = valid_attributes
         
     | 
| 
       15 
12 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -98,9 +95,8 @@ module Watir 
     | 
|
| 
       98 
95 
     | 
    
         
             
                    end
         
     | 
| 
       99 
96 
     | 
    
         | 
| 
       100 
97 
     | 
    
         
             
                    def build_wd_selector(selectors)
         
     | 
| 
       101 
     | 
    
         
            -
                       
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                      end
         
     | 
| 
      
 98 
     | 
    
         
            +
                      return if selectors.values.any? { |e| e.is_a? Regexp }
         
     | 
| 
      
 99 
     | 
    
         
            +
                      build_xpath(selectors)
         
     | 
| 
       104 
100 
     | 
    
         
             
                    end
         
     | 
| 
       105 
101 
     | 
    
         | 
| 
       106 
102 
     | 
    
         
             
                    def valid_attribute?(attribute)
         
     | 
| 
         @@ -122,25 +118,12 @@ module Watir 
     | 
|
| 
       122 
118 
     | 
    
         
             
                      xpath_builder.build(selectors)
         
     | 
| 
       123 
119 
     | 
    
         
             
                    end
         
     | 
| 
       124 
120 
     | 
    
         | 
| 
       125 
     | 
    
         
            -
                    def build_css(selectors)
         
     | 
| 
       126 
     | 
    
         
            -
                      css_builder.build(selectors)
         
     | 
| 
       127 
     | 
    
         
            -
                    end
         
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
121 
     | 
    
         
             
                    def xpath_builder_class
         
     | 
| 
       130 
122 
     | 
    
         
             
                      Kernel.const_get("#{self.class.name}::XPath")
         
     | 
| 
       131 
123 
     | 
    
         
             
                    rescue
         
     | 
| 
       132 
124 
     | 
    
         
             
                      XPath
         
     | 
| 
       133 
125 
     | 
    
         
             
                    end
         
     | 
| 
       134 
126 
     | 
    
         | 
| 
       135 
     | 
    
         
            -
                    def css_builder
         
     | 
| 
       136 
     | 
    
         
            -
                      @css_builder ||= css_builder_class.new
         
     | 
| 
       137 
     | 
    
         
            -
                    end
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
                    def css_builder_class
         
     | 
| 
       140 
     | 
    
         
            -
                      Kernel.const_get("#{self.class.name}::CSS")
         
     | 
| 
       141 
     | 
    
         
            -
                    rescue
         
     | 
| 
       142 
     | 
    
         
            -
                      CSS
         
     | 
| 
       143 
     | 
    
         
            -
                    end
         
     | 
| 
       144 
127 
     | 
    
         
             
                  end
         
     | 
| 
       145 
128 
     | 
    
         
             
                end
         
     | 
| 
       146 
129 
     | 
    
         
             
              end
         
     | 
| 
         @@ -7,7 +7,7 @@ module Watir 
     | 
|
| 
       7 
7 
     | 
    
         
             
                      selectors.delete(:tag_name) || raise("internal error: no tag_name?!")
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                      expressions = %w[./tr]
         
     | 
| 
       10 
     | 
    
         
            -
                      unless %w[tbody tfoot thead].include?(@ 
     | 
| 
      
 10 
     | 
    
         
            +
                      unless %w[tbody tfoot thead].include?(@query_scope.tag_name.downcase)
         
     | 
| 
       11 
11 
     | 
    
         
             
                        expressions += %w[./tbody/tr ./thead/tr ./tfoot/tr]
         
     | 
| 
       12 
12 
     | 
    
         
             
                      end
         
     | 
| 
       13 
13 
     | 
    
         | 
    
        data/lib/watir/wait.rb
    CHANGED
    
    | 
         @@ -242,8 +242,24 @@ module Watir 
     | 
|
| 
       242 
242 
     | 
    
         
             
                  timeout ||= Watir.default_timeout
         
     | 
| 
       243 
243 
     | 
    
         
             
                  message = "waiting for #{selector_string} to disappear"
         
     | 
| 
       244 
244 
     | 
    
         
             
                  Watir::Wait.while(timeout, message) { present? }
         
     | 
| 
       245 
     | 
    
         
            -
                 
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
      
 245 
     | 
    
         
            +
                end
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
      
 247 
     | 
    
         
            +
                #
         
     | 
| 
      
 248 
     | 
    
         
            +
                # Waits until the element is stale.
         
     | 
| 
      
 249 
     | 
    
         
            +
                #
         
     | 
| 
      
 250 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 251 
     | 
    
         
            +
                #   browser.text_field(name: "abrakadbra").wait_until_stale
         
     | 
| 
      
 252 
     | 
    
         
            +
                #
         
     | 
| 
      
 253 
     | 
    
         
            +
                # @param [Fixnum] timeout seconds to wait before timing out
         
     | 
| 
      
 254 
     | 
    
         
            +
                #
         
     | 
| 
      
 255 
     | 
    
         
            +
                # @see Watir::Wait
         
     | 
| 
      
 256 
     | 
    
         
            +
                # @see Watir::Element#stale?
         
     | 
| 
      
 257 
     | 
    
         
            +
                #
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
                def wait_until_stale(timeout = nil)
         
     | 
| 
      
 260 
     | 
    
         
            +
                  timeout ||= Watir.default_timeout
         
     | 
| 
      
 261 
     | 
    
         
            +
                  message = "waiting for #{selector_string} to become stale"
         
     | 
| 
      
 262 
     | 
    
         
            +
                  Watir::Wait.until(timeout, message) { stale? }
         
     | 
| 
       247 
263 
     | 
    
         
             
                end
         
     | 
| 
       248 
264 
     | 
    
         | 
| 
       249 
265 
     | 
    
         
             
              end # EventuallyPresent
         
     | 
    
        data/spec/browser_spec.rb
    CHANGED
    
    | 
         @@ -46,24 +46,22 @@ describe Watir::Browser do 
     | 
|
| 
       46 
46 
     | 
    
         
             
                end
         
     | 
| 
       47 
47 
     | 
    
         
             
              end
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
               
     | 
| 
       50 
     | 
    
         
            -
                 
     | 
| 
       51 
     | 
    
         
            -
                   
     | 
| 
       52 
     | 
    
         
            -
                    browser.goto WatirSpec.url_for "forms_with_input_elements.html"
         
     | 
| 
      
 49 
     | 
    
         
            +
              describe "#send_key{,s}" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                it "sends keystrokes to the active element" do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  browser.goto WatirSpec.url_for "forms_with_input_elements.html"
         
     | 
| 
       53 
52 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
      
 53 
     | 
    
         
            +
                  browser.send_keys "hello"
         
     | 
| 
      
 54 
     | 
    
         
            +
                  expect(browser.text_field(id: "new_user_first_name").value).to eq "hello"
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
       57 
56 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
      
 57 
     | 
    
         
            +
                it "sends keys to a frame" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  browser.goto WatirSpec.url_for "frames.html"
         
     | 
| 
      
 59 
     | 
    
         
            +
                  tf = browser.frame.text_field(id: "senderElement")
         
     | 
| 
      
 60 
     | 
    
         
            +
                  tf.clear
         
     | 
| 
       62 
61 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
      
 62 
     | 
    
         
            +
                  browser.frame.send_keys "hello"
         
     | 
| 
       64 
63 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  expect(tf.value).to eq "hello"
         
     | 
| 
       67 
65 
     | 
    
         
             
                end
         
     | 
| 
       68 
66 
     | 
    
         
             
              end
         
     | 
| 
       69 
67 
     | 
    
         | 
| 
         @@ -15,42 +15,26 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                describe "with selectors not supported by Selenium" do
         
     | 
| 
       17 
17 
     | 
    
         
             
                  it "handles selector with tag name and a single attribute" do
         
     | 
| 
       18 
     | 
    
         
            -
                     
     | 
| 
       19 
     | 
    
         
            -
                      expect_one :css, 'div[title="foo"]'
         
     | 
| 
       20 
     | 
    
         
            -
                    else
         
     | 
| 
       21 
     | 
    
         
            -
                      expect_one :xpath, ".//div[@title='foo']"
         
     | 
| 
       22 
     | 
    
         
            -
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                    expect_one :xpath, ".//div[@title='foo']"
         
     | 
| 
       23 
19 
     | 
    
         | 
| 
       24 
20 
     | 
    
         
             
                    locate_one tag_name: "div",
         
     | 
| 
       25 
21 
     | 
    
         
             
                               title: "foo"
         
     | 
| 
       26 
22 
     | 
    
         
             
                  end
         
     | 
| 
       27 
23 
     | 
    
         | 
| 
       28 
24 
     | 
    
         
             
                  it "handles selector with no tag name and and a single attribute" do
         
     | 
| 
       29 
     | 
    
         
            -
                     
     | 
| 
       30 
     | 
    
         
            -
                      expect_one :css, '[title="foo"]'
         
     | 
| 
       31 
     | 
    
         
            -
                    else
         
     | 
| 
       32 
     | 
    
         
            -
                      expect_one :xpath, ".//*[@title='foo']"
         
     | 
| 
       33 
     | 
    
         
            -
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                    expect_one :xpath, ".//*[@title='foo']"
         
     | 
| 
       34 
26 
     | 
    
         | 
| 
       35 
27 
     | 
    
         
             
                    locate_one title: "foo"
         
     | 
| 
       36 
28 
     | 
    
         
             
                  end
         
     | 
| 
       37 
29 
     | 
    
         | 
| 
       38 
30 
     | 
    
         
             
                  it "handles single quotes in the attribute string" do
         
     | 
| 
       39 
     | 
    
         
            -
                     
     | 
| 
       40 
     | 
    
         
            -
                      expect_one :css, %{[title="foo and 'bar'"]}
         
     | 
| 
       41 
     | 
    
         
            -
                    else
         
     | 
| 
       42 
     | 
    
         
            -
                      expect_one :xpath, %{.//*[@title=concat('foo and ',"'",'bar',"'",'')]}
         
     | 
| 
       43 
     | 
    
         
            -
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
                    expect_one :xpath, %{.//*[@title=concat('foo and ',"'",'bar',"'",'')]}
         
     | 
| 
       44 
32 
     | 
    
         | 
| 
       45 
33 
     | 
    
         
             
                    locate_one title: "foo and 'bar'"
         
     | 
| 
       46 
34 
     | 
    
         
             
                  end
         
     | 
| 
       47 
35 
     | 
    
         | 
| 
       48 
36 
     | 
    
         
             
                  it "handles selector with tag name and multiple attributes" do
         
     | 
| 
       49 
     | 
    
         
            -
                     
     | 
| 
       50 
     | 
    
         
            -
                      expect_one :css, 'div[title="foo"][dir="bar"]'
         
     | 
| 
       51 
     | 
    
         
            -
                    else
         
     | 
| 
       52 
     | 
    
         
            -
                      expect_one :xpath, ".//div[@title='foo' and @dir='bar']"
         
     | 
| 
       53 
     | 
    
         
            -
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                    expect_one :xpath, ".//div[@title='foo' and @dir='bar']"
         
     | 
| 
       54 
38 
     | 
    
         | 
| 
       55 
39 
     | 
    
         
             
                    locate_one [:tag_name, "div",
         
     | 
| 
       56 
40 
     | 
    
         
             
                                :title   , "foo",
         
     | 
| 
         @@ -58,11 +42,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       58 
42 
     | 
    
         
             
                  end
         
     | 
| 
       59 
43 
     | 
    
         | 
| 
       60 
44 
     | 
    
         
             
                  it "handles selector with no tag name and multiple attributes" do
         
     | 
| 
       61 
     | 
    
         
            -
                     
     | 
| 
       62 
     | 
    
         
            -
                      expect_one :css, '[dir="foo"][title="bar"]'
         
     | 
| 
       63 
     | 
    
         
            -
                    else
         
     | 
| 
       64 
     | 
    
         
            -
                      expect_one :xpath, ".//*[@dir='foo' and @title='bar']"
         
     | 
| 
       65 
     | 
    
         
            -
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                    expect_one :xpath, ".//*[@dir='foo' and @title='bar']"
         
     | 
| 
       66 
46 
     | 
    
         | 
| 
       67 
47 
     | 
    
         
             
                    locate_one [:dir,   "foo",
         
     | 
| 
       68 
48 
     | 
    
         
             
                                :title, "bar"]
         
     | 
| 
         @@ -84,44 +64,28 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       84 
64 
     | 
    
         
             
                  end
         
     | 
| 
       85 
65 
     | 
    
         | 
| 
       86 
66 
     | 
    
         
             
                  it "translates :class_name to :class" do
         
     | 
| 
       87 
     | 
    
         
            -
                     
     | 
| 
       88 
     | 
    
         
            -
                      expect_one :css, "div.foo"
         
     | 
| 
       89 
     | 
    
         
            -
                    else
         
     | 
| 
       90 
     | 
    
         
            -
                      expect_one :xpath, ".//div[contains(concat(' ', @class, ' '), ' foo ')]"
         
     | 
| 
       91 
     | 
    
         
            -
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    expect_one :xpath, ".//div[contains(concat(' ', @class, ' '), ' foo ')]"
         
     | 
| 
       92 
68 
     | 
    
         | 
| 
       93 
69 
     | 
    
         
             
                    locate_one tag_name: "div",
         
     | 
| 
       94 
70 
     | 
    
         
             
                               class_name: "foo"
         
     | 
| 
       95 
71 
     | 
    
         
             
                  end
         
     | 
| 
       96 
72 
     | 
    
         | 
| 
       97 
73 
     | 
    
         
             
                  it "handles data-* attributes" do
         
     | 
| 
       98 
     | 
    
         
            -
                     
     | 
| 
       99 
     | 
    
         
            -
                      expect_one :css, 'div[data-name="foo"]'
         
     | 
| 
       100 
     | 
    
         
            -
                    else
         
     | 
| 
       101 
     | 
    
         
            -
                      expect_one :xpath, ".//div[@data-name='foo']"
         
     | 
| 
       102 
     | 
    
         
            -
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
                    expect_one :xpath, ".//div[@data-name='foo']"
         
     | 
| 
       103 
75 
     | 
    
         | 
| 
       104 
76 
     | 
    
         
             
                    locate_one tag_name: "div",
         
     | 
| 
       105 
77 
     | 
    
         
             
                               data_name: "foo"
         
     | 
| 
       106 
78 
     | 
    
         
             
                  end
         
     | 
| 
       107 
79 
     | 
    
         | 
| 
       108 
80 
     | 
    
         
             
                  it "handles aria-* attributes" do
         
     | 
| 
       109 
     | 
    
         
            -
                     
     | 
| 
       110 
     | 
    
         
            -
                      expect_one :css, 'div[aria-label="foo"]'
         
     | 
| 
       111 
     | 
    
         
            -
                    else
         
     | 
| 
       112 
     | 
    
         
            -
                      expect_one :xpath, ".//div[@aria-label='foo']"
         
     | 
| 
       113 
     | 
    
         
            -
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
                    expect_one :xpath, ".//div[@aria-label='foo']"
         
     | 
| 
       114 
82 
     | 
    
         | 
| 
       115 
83 
     | 
    
         
             
                    locate_one tag_name: "div",
         
     | 
| 
       116 
84 
     | 
    
         
             
                               aria_label: "foo"
         
     | 
| 
       117 
85 
     | 
    
         
             
                  end
         
     | 
| 
       118 
86 
     | 
    
         | 
| 
       119 
87 
     | 
    
         
             
                  it "normalizes space for the :href attribute" do
         
     | 
| 
       120 
     | 
    
         
            -
                     
     | 
| 
       121 
     | 
    
         
            -
                      expect_one :css, 'a[href~="foo"]'
         
     | 
| 
       122 
     | 
    
         
            -
                    else
         
     | 
| 
       123 
     | 
    
         
            -
                      expect_one :xpath, ".//a[normalize-space(@href)='foo']"
         
     | 
| 
       124 
     | 
    
         
            -
                    end
         
     | 
| 
      
 88 
     | 
    
         
            +
                    expect_one :xpath, ".//a[normalize-space(@href)='foo']"
         
     | 
| 
       125 
89 
     | 
    
         | 
| 
       126 
90 
     | 
    
         
             
                    selector = {
         
     | 
| 
       127 
91 
     | 
    
         
             
                      tag_name: "a",
         
     | 
| 
         @@ -164,11 +128,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       164 
128 
     | 
    
         
             
                  end
         
     | 
| 
       165 
129 
     | 
    
         | 
| 
       166 
130 
     | 
    
         
             
                  it "translates ruby attribute names to content attribute names" do
         
     | 
| 
       167 
     | 
    
         
            -
                     
     | 
| 
       168 
     | 
    
         
            -
                      expect_one :css, 'meta[http-equiv="foo"]'
         
     | 
| 
       169 
     | 
    
         
            -
                    else
         
     | 
| 
       170 
     | 
    
         
            -
                      expect_one :xpath, ".//meta[@http-equiv='foo']"
         
     | 
| 
       171 
     | 
    
         
            -
                    end
         
     | 
| 
      
 131 
     | 
    
         
            +
                    expect_one :xpath, ".//meta[@http-equiv='foo']"
         
     | 
| 
       172 
132 
     | 
    
         | 
| 
       173 
133 
     | 
    
         
             
                    selector = {
         
     | 
| 
       174 
134 
     | 
    
         
             
                      tag_name: "meta",
         
     | 
| 
         @@ -188,11 +148,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       188 
148 
     | 
    
         
             
                      element(tag_name: "div", attributes: { class: "foob"})
         
     | 
| 
       189 
149 
     | 
    
         
             
                    ]
         
     | 
| 
       190 
150 
     | 
    
         | 
| 
       191 
     | 
    
         
            -
                     
     | 
| 
       192 
     | 
    
         
            -
                      expect_all(:css, "div").and_return(elements)
         
     | 
| 
       193 
     | 
    
         
            -
                    else
         
     | 
| 
       194 
     | 
    
         
            -
                      expect_all(:xpath, "(.//div)[contains(@class, 'oob')]").and_return(elements)
         
     | 
| 
       195 
     | 
    
         
            -
                    end
         
     | 
| 
      
 151 
     | 
    
         
            +
                    expect_all(:xpath, "(.//div)[contains(@class, 'oob')]").and_return(elements)
         
     | 
| 
       196 
152 
     | 
    
         | 
| 
       197 
153 
     | 
    
         
             
                    expect(locate_one(tag_name: "div", class: /oob/)).to eq elements[1]
         
     | 
| 
       198 
154 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -203,11 +159,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       203 
159 
     | 
    
         
             
                      element(tag_name: "div", attributes: { class: "foo" })
         
     | 
| 
       204 
160 
     | 
    
         
             
                    ]
         
     | 
| 
       205 
161 
     | 
    
         | 
| 
       206 
     | 
    
         
            -
                     
     | 
| 
       207 
     | 
    
         
            -
                      expect_all(:css, "div").and_return(elements)
         
     | 
| 
       208 
     | 
    
         
            -
                    else
         
     | 
| 
       209 
     | 
    
         
            -
                      expect_all(:xpath, "(.//div)[contains(@class, 'foo')]").and_return(elements)
         
     | 
| 
       210 
     | 
    
         
            -
                    end
         
     | 
| 
      
 162 
     | 
    
         
            +
                    expect_all(:xpath, "(.//div)[contains(@class, 'foo')]").and_return(elements)
         
     | 
| 
       211 
163 
     | 
    
         | 
| 
       212 
164 
     | 
    
         
             
                    selector = {
         
     | 
| 
       213 
165 
     | 
    
         
             
                      tag_name: "div",
         
     | 
| 
         @@ -256,11 +208,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       256 
208 
     | 
    
         
             
                      element(tag_name: "div", attributes: { dir: "foo", title: "baz" })
         
     | 
| 
       257 
209 
     | 
    
         
             
                    ]
         
     | 
| 
       258 
210 
     | 
    
         | 
| 
       259 
     | 
    
         
            -
                     
     | 
| 
       260 
     | 
    
         
            -
                      expect_all(:css, 'div[dir="foo"]').and_return(elements)
         
     | 
| 
       261 
     | 
    
         
            -
                    else
         
     | 
| 
       262 
     | 
    
         
            -
                      expect_all(:xpath, "(.//div[@dir='foo'])[contains(@title, 'baz')]").and_return(elements)
         
     | 
| 
       263 
     | 
    
         
            -
                    end
         
     | 
| 
      
 211 
     | 
    
         
            +
                    expect_all(:xpath, "(.//div[@dir='foo'])[contains(@title, 'baz')]").and_return(elements)
         
     | 
| 
       264 
212 
     | 
    
         | 
| 
       265 
213 
     | 
    
         
             
                    selector = {
         
     | 
| 
       266 
214 
     | 
    
         
             
                      tag_name: "div",
         
     | 
| 
         @@ -277,12 +225,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       277 
225 
     | 
    
         
             
                      element(tag_name: "div", attributes: { :'data-automation-id' => "bar" })
         
     | 
| 
       278 
226 
     | 
    
         
             
                    ]
         
     | 
| 
       279 
227 
     | 
    
         | 
| 
       280 
     | 
    
         
            -
                     
     | 
| 
       281 
     | 
    
         
            -
                      expect_all(:css, 'div').and_return(elements)
         
     | 
| 
       282 
     | 
    
         
            -
                    else
         
     | 
| 
       283 
     | 
    
         
            -
                      expect_all(:xpath, "(.//div)[contains(@data-automation-id, 'bar')]").and_return(elements)
         
     | 
| 
       284 
     | 
    
         
            -
                    end
         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
      
 228 
     | 
    
         
            +
                    expect_all(:xpath, "(.//div)[contains(@data-automation-id, 'bar')]").and_return(elements)
         
     | 
| 
       286 
229 
     | 
    
         | 
| 
       287 
230 
     | 
    
         
             
                    selector = {
         
     | 
| 
       288 
231 
     | 
    
         
             
                      tag_name: "div",
         
     | 
| 
         @@ -300,13 +243,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       300 
243 
     | 
    
         
             
                    div_elements = [element(tag_name: "div")]
         
     | 
| 
       301 
244 
     | 
    
         | 
| 
       302 
245 
     | 
    
         
             
                    expect_all(:tag_name, "label").ordered.and_return(label_elements)
         
     | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
       304 
     | 
    
         
            -
                    if Watir.prefer_css?
         
     | 
| 
       305 
     | 
    
         
            -
                      expect_all(:css, 'div[id="baz"]').ordered.and_return(div_elements)
         
     | 
| 
       306 
     | 
    
         
            -
                    else
         
     | 
| 
       307 
     | 
    
         
            -
                      expect_all(:xpath, ".//div[@id='baz']").ordered.and_return(div_elements)
         
     | 
| 
       308 
     | 
    
         
            -
                    end
         
     | 
| 
       309 
     | 
    
         
            -
             
     | 
| 
      
 246 
     | 
    
         
            +
                    expect_all(:xpath, ".//div[@id='baz']").ordered.and_return(div_elements)
         
     | 
| 
       310 
247 
     | 
    
         
             
                    expect(locate_one(tag_name: "div", label: /oob/)).to eq div_elements.first
         
     | 
| 
       311 
248 
     | 
    
         
             
                  end
         
     | 
| 
       312 
249 
     | 
    
         | 
| 
         @@ -323,11 +260,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       323 
260 
     | 
    
         
             
                    element(tag_name: "div")
         
     | 
| 
       324 
261 
     | 
    
         
             
                  ]
         
     | 
| 
       325 
262 
     | 
    
         | 
| 
       326 
     | 
    
         
            -
                   
     | 
| 
       327 
     | 
    
         
            -
                    expect_all(:css, 'div[dir="foo"]').and_return(elements)
         
     | 
| 
       328 
     | 
    
         
            -
                  else
         
     | 
| 
       329 
     | 
    
         
            -
                    expect_all(:xpath, ".//div[@dir='foo']").and_return(elements)
         
     | 
| 
       330 
     | 
    
         
            -
                  end
         
     | 
| 
      
 263 
     | 
    
         
            +
                  expect_all(:xpath, ".//div[@dir='foo']").and_return(elements)
         
     | 
| 
       331 
264 
     | 
    
         | 
| 
       332 
265 
     | 
    
         
             
                  selector = {
         
     | 
| 
       333 
266 
     | 
    
         
             
                    tag_name: "div",
         
     | 
| 
         @@ -382,35 +315,20 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       382 
315 
     | 
    
         | 
| 
       383 
316 
     | 
    
         
             
                describe "with an empty selector" do
         
     | 
| 
       384 
317 
     | 
    
         
             
                  it "finds all when an empty selctor is given" do
         
     | 
| 
       385 
     | 
    
         
            -
                     
     | 
| 
       386 
     | 
    
         
            -
                      expect_all :css, '*'
         
     | 
| 
       387 
     | 
    
         
            -
                    else
         
     | 
| 
       388 
     | 
    
         
            -
                      expect_all :xpath, './/*'
         
     | 
| 
       389 
     | 
    
         
            -
                    end
         
     | 
| 
       390 
     | 
    
         
            -
             
     | 
| 
      
 318 
     | 
    
         
            +
                    expect_all :xpath, './/*'
         
     | 
| 
       391 
319 
     | 
    
         
             
                    locate_all({})
         
     | 
| 
       392 
320 
     | 
    
         
             
                  end
         
     | 
| 
       393 
321 
     | 
    
         
             
                end
         
     | 
| 
       394 
322 
     | 
    
         | 
| 
       395 
323 
     | 
    
         
             
                describe "with selectors not supported by Selenium" do
         
     | 
| 
       396 
324 
     | 
    
         
             
                  it "handles selector with tag name and a single attribute" do
         
     | 
| 
       397 
     | 
    
         
            -
                     
     | 
| 
       398 
     | 
    
         
            -
                      expect_all :css, 'div[dir="foo"]'
         
     | 
| 
       399 
     | 
    
         
            -
                    else
         
     | 
| 
       400 
     | 
    
         
            -
                      expect_all :xpath, ".//div[@dir='foo']"
         
     | 
| 
       401 
     | 
    
         
            -
                    end
         
     | 
| 
       402 
     | 
    
         
            -
             
     | 
| 
      
 325 
     | 
    
         
            +
                    expect_all :xpath, ".//div[@dir='foo']"
         
     | 
| 
       403 
326 
     | 
    
         
             
                    locate_all tag_name: "div",
         
     | 
| 
       404 
327 
     | 
    
         
             
                               dir: "foo"
         
     | 
| 
       405 
328 
     | 
    
         
             
                  end
         
     | 
| 
       406 
329 
     | 
    
         | 
| 
       407 
330 
     | 
    
         
             
                  it "handles selector with tag name and multiple attributes" do
         
     | 
| 
       408 
     | 
    
         
            -
                     
     | 
| 
       409 
     | 
    
         
            -
                      expect_all :css, 'div[dir="foo"][title="bar"]'
         
     | 
| 
       410 
     | 
    
         
            -
                    else
         
     | 
| 
       411 
     | 
    
         
            -
                      expect_all :xpath, ".//div[@dir='foo' and @title='bar']"
         
     | 
| 
       412 
     | 
    
         
            -
                    end
         
     | 
| 
       413 
     | 
    
         
            -
             
     | 
| 
      
 331 
     | 
    
         
            +
                    expect_all :xpath, ".//div[@dir='foo' and @title='bar']"
         
     | 
| 
       414 
332 
     | 
    
         
             
                    locate_all [:tag_name, "div",
         
     | 
| 
       415 
333 
     | 
    
         
             
                                :dir     , "foo",
         
     | 
| 
       416 
334 
     | 
    
         
             
                                :title   , 'bar']
         
     | 
| 
         @@ -426,12 +344,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       426 
344 
     | 
    
         
             
                      element(tag_name: "div", attributes: { class: "noob"})
         
     | 
| 
       427 
345 
     | 
    
         
             
                    ]
         
     | 
| 
       428 
346 
     | 
    
         | 
| 
       429 
     | 
    
         
            -
                     
     | 
| 
       430 
     | 
    
         
            -
                      expect_all(:css, "div").and_return(elements)
         
     | 
| 
       431 
     | 
    
         
            -
                    else
         
     | 
| 
       432 
     | 
    
         
            -
                      expect_all(:xpath, "(.//div)[contains(@class, 'oob')]").and_return(elements)
         
     | 
| 
       433 
     | 
    
         
            -
                    end
         
     | 
| 
       434 
     | 
    
         
            -
             
     | 
| 
      
 347 
     | 
    
         
            +
                    expect_all(:xpath, "(.//div)[contains(@class, 'oob')]").and_return(elements)
         
     | 
| 
       435 
348 
     | 
    
         
             
                    expect(locate_all(tag_name: "div", class: /oob/)).to eq elements.last(3)
         
     | 
| 
       436 
349 
     | 
    
         
             
                  end
         
     | 
| 
       437 
350 
     | 
    
         | 
| 
         @@ -442,11 +355,7 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       442 
355 
     | 
    
         
             
                      element(tag_name: "div", attributes: { dir: "foo", title: "bazt"})
         
     | 
| 
       443 
356 
     | 
    
         
             
                    ]
         
     | 
| 
       444 
357 
     | 
    
         | 
| 
       445 
     | 
    
         
            -
                     
     | 
| 
       446 
     | 
    
         
            -
                      expect_all(:css, 'div[dir="foo"]').and_return(elements)
         
     | 
| 
       447 
     | 
    
         
            -
                    else
         
     | 
| 
       448 
     | 
    
         
            -
                      expect_all(:xpath, "(.//div[@dir='foo'])[contains(@title, 'baz')]").and_return(elements)
         
     | 
| 
       449 
     | 
    
         
            -
                    end
         
     | 
| 
      
 358 
     | 
    
         
            +
                    expect_all(:xpath, "(.//div[@dir='foo'])[contains(@title, 'baz')]").and_return(elements)
         
     | 
| 
       450 
359 
     | 
    
         | 
| 
       451 
360 
     | 
    
         
             
                    selector = {
         
     | 
| 
       452 
361 
     | 
    
         
             
                      tag_name: "div",
         
     | 
| 
         @@ -458,10 +367,6 @@ describe Watir::Locators::Element::Locator do 
     | 
|
| 
       458 
367 
     | 
    
         
             
                  end
         
     | 
| 
       459 
368 
     | 
    
         | 
| 
       460 
369 
     | 
    
         
             
                  context "and xpath" do
         
     | 
| 
       461 
     | 
    
         
            -
                    before do
         
     | 
| 
       462 
     | 
    
         
            -
                      expect(Watir).to receive(:prefer_css?).and_return(false)
         
     | 
| 
       463 
     | 
    
         
            -
                    end
         
     | 
| 
       464 
     | 
    
         
            -
             
     | 
| 
       465 
370 
     | 
    
         
             
                    it "converts a leading run of regexp literals to a contains() expression" do
         
     | 
| 
       466 
371 
     | 
    
         
             
                      elements = [
         
     | 
| 
       467 
372 
     | 
    
         
             
                        element(tag_name: "div", attributes: { class: "foo" }),
         
     | 
    
        data/spec/element_spec.rb
    CHANGED
    
    | 
         @@ -93,11 +93,7 @@ describe Watir::Element do 
     | 
|
| 
       93 
93 
     | 
    
         
             
                    watir_element.send(:element_call) { watir_element.instance_variable_get('@element').text }
         
     | 
| 
       94 
94 
     | 
    
         
             
                  end
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
                   
     | 
| 
       97 
     | 
    
         
            -
                    expect { watir_element.text }.to_not raise_error
         
     | 
| 
       98 
     | 
    
         
            -
                  else
         
     | 
| 
       99 
     | 
    
         
            -
                    expect { watir_element.text }.to raise_error Watir::Exception::UnknownObjectException
         
     | 
| 
       100 
     | 
    
         
            -
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
                  expect { watir_element.text }.to_not raise_error
         
     | 
| 
       101 
97 
     | 
    
         
             
                end
         
     | 
| 
       102 
98 
     | 
    
         | 
| 
       103 
99 
     | 
    
         
             
              end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -11,14 +11,6 @@ require 'rspec' 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            include Watir
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            if ENV['ALWAYS_LOCATE'] == "false"
         
     | 
| 
       15 
     | 
    
         
            -
              Watir.always_locate = false
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            if ENV['PREFER_CSS']
         
     | 
| 
       19 
     | 
    
         
            -
              Watir.prefer_css = true
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
14 
     | 
    
         
             
            SELENIUM_SELECTORS = %i(class class_name css id tag_name xpath)
         
     | 
| 
       23 
15 
     | 
    
         | 
| 
       24 
16 
     | 
    
         
             
            if ENV['TRAVIS']
         
     | 
    
        data/support/travis.sh
    CHANGED
    
    | 
         @@ -14,7 +14,9 @@ fi 
     | 
|
| 
       14 
14 
     | 
    
         
             
            if [[ "$RAKE_TASK" = "spec:chrome" ]] || [[ "$RAKE_TASK" = "yard:doctest" ]]; then
         
     | 
| 
       15 
15 
     | 
    
         
             
              # https://omahaproxy.appspot.com
         
     | 
| 
       16 
16 
     | 
    
         
             
              # https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/
         
     | 
| 
       17 
     | 
    
         
            -
              CHROME_REVISION 
     | 
| 
      
 17 
     | 
    
         
            +
              # CHROME_REVISION=`curl -s http://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/LAST_CHANGE`
         
     | 
| 
      
 18 
     | 
    
         
            +
              CHROME_REVISION=417841
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       18 
20 
     | 
    
         
             
              curl -L -O "http://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/${CHROME_REVISION}/chrome-linux.zip"
         
     | 
| 
       19 
21 
     | 
    
         
             
              unzip chrome-linux.zip
         
     | 
| 
       20 
22 
     | 
    
         | 
    
        data/watir.gemspec
    CHANGED
    
    
    
        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.0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 6.0.0.beta4
         
     | 
| 
       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: 2016- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2016-09-13 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: selenium-webdriver
         
     | 
| 
         @@ -206,7 +206,6 @@ files: 
     | 
|
| 
       206 
206 
     | 
    
         
             
            - lib/watir/atoms.rb
         
     | 
| 
       207 
207 
     | 
    
         
             
            - lib/watir/atoms/README
         
     | 
| 
       208 
208 
     | 
    
         
             
            - lib/watir/atoms/fireEvent.js
         
     | 
| 
       209 
     | 
    
         
            -
            - lib/watir/atoms/getAttribute.js
         
     | 
| 
       210 
209 
     | 
    
         
             
            - lib/watir/atoms/getInnerHtml.js
         
     | 
| 
       211 
210 
     | 
    
         
             
            - lib/watir/atoms/getOuterHtml.js
         
     | 
| 
       212 
211 
     | 
    
         
             
            - lib/watir/atoms/getParentElement.js
         
     | 
| 
         @@ -271,7 +270,6 @@ files: 
     | 
|
| 
       271 
270 
     | 
    
         
             
            - lib/watir/locators/cell/selector_builder.rb
         
     | 
| 
       272 
271 
     | 
    
         
             
            - lib/watir/locators/element/locator.rb
         
     | 
| 
       273 
272 
     | 
    
         
             
            - lib/watir/locators/element/selector_builder.rb
         
     | 
| 
       274 
     | 
    
         
            -
            - lib/watir/locators/element/selector_builder/css.rb
         
     | 
| 
       275 
273 
     | 
    
         
             
            - lib/watir/locators/element/selector_builder/xpath.rb
         
     | 
| 
       276 
274 
     | 
    
         
             
            - lib/watir/locators/element/validator.rb
         
     | 
| 
       277 
275 
     | 
    
         
             
            - lib/watir/locators/row/locator.rb
         
     | 
| 
         @@ -289,7 +287,6 @@ files: 
     | 
|
| 
       289 
287 
     | 
    
         
             
            - lib/watir/wait/timer.rb
         
     | 
| 
       290 
288 
     | 
    
         
             
            - lib/watir/window.rb
         
     | 
| 
       291 
289 
     | 
    
         
             
            - lib/watir/xpath_support.rb
         
     | 
| 
       292 
     | 
    
         
            -
            - spec/always_locate_spec.rb
         
     | 
| 
       293 
290 
     | 
    
         
             
            - spec/browser_spec.rb
         
     | 
| 
       294 
291 
     | 
    
         
             
            - spec/click_spec.rb
         
     | 
| 
       295 
292 
     | 
    
         
             
            - spec/container_spec.rb
         
     | 
| 
         @@ -329,7 +326,6 @@ signing_key: 
     | 
|
| 
       329 
326 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       330 
327 
     | 
    
         
             
            summary: Watir powered by Selenium
         
     | 
| 
       331 
328 
     | 
    
         
             
            test_files:
         
     | 
| 
       332 
     | 
    
         
            -
            - spec/always_locate_spec.rb
         
     | 
| 
       333 
329 
     | 
    
         
             
            - spec/browser_spec.rb
         
     | 
| 
       334 
330 
     | 
    
         
             
            - spec/click_spec.rb
         
     | 
| 
       335 
331 
     | 
    
         
             
            - spec/container_spec.rb
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            // Copyright 2011 Software Freedom Conservatory
         
     | 
| 
       2 
     | 
    
         
            -
            // Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
       3 
     | 
    
         
            -
            // you may not use this file except in compliance with the License.
         
     | 
| 
       4 
     | 
    
         
            -
            // You may obtain a copy of the License at
         
     | 
| 
       5 
     | 
    
         
            -
            //
         
     | 
| 
       6 
     | 
    
         
            -
            //     http://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
       7 
     | 
    
         
            -
            //
         
     | 
| 
       8 
     | 
    
         
            -
            // Unless required by applicable law or agreed to in writing, software
         
     | 
| 
       9 
     | 
    
         
            -
            // distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
       10 
     | 
    
         
            -
            // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
       11 
     | 
    
         
            -
            // See the License for the specific language governing permissions and
         
     | 
| 
       12 
     | 
    
         
            -
            // limitations under the License.
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            function(){return function(){var d=null,e=this;function f(b,a){function c(){}c.prototype=a.prototype;b.g=a.prototype;b.prototype=new c};function g(b){for(var a=1;a<arguments.length;a++)var c=String(arguments[a]).replace(/\$/g,"$$$$"),b=b.replace(/\%s/,c);return b}function i(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")}function j(b,a){if(b<a)return-1;else if(b>a)return 1;return 0};var k,l,m,p;function q(){return e.navigator?e.navigator.userAgent:d}p=m=l=k=!1;var r;if(r=q()){var s=e.navigator;k=r.indexOf("Opera")==0;l=!k&&r.indexOf("MSIE")!=-1;m=!k&&r.indexOf("WebKit")!=-1;p=!k&&!m&&s.product=="Gecko"}var t=l,u=p,x=m,y;
         
     | 
| 
       15 
     | 
    
         
            -
            a:{var z="",A;if(k&&e.opera)var B=e.opera.version,z=typeof B=="function"?B():B;else if(u?A=/rv\:([^\);]+)(\)|;)/:t?A=/MSIE\s+([^\);]+)(\)|;)/:x&&(A=/WebKit\/(\S+)/),A)var C=A.exec(q()),z=C?C[1]:"";if(t){var D,E=e.document;D=E?E.documentMode:void 0;if(D>parseFloat(z)){y=String(D);break a}}y=z}var F={};
         
     | 
| 
       16 
     | 
    
         
            -
            function G(b){var a;if(!(a=F[b])){a=0;for(var c=i(String(y)).split("."),h=i(String(b)).split("."),v=Math.max(c.length,h.length),w=0;a==0&&w<v;w++){var U=c[w]||"",V=h[w]||"",W=RegExp("(\\d*)(\\D*)","g"),X=RegExp("(\\d*)(\\D*)","g");do{var n=W.exec(U)||["","",""],o=X.exec(V)||["","",""];if(n[0].length==0&&o[0].length==0)break;a=j(n[1].length==0?0:parseInt(n[1],10),o[1].length==0?0:parseInt(o[1],10))||j(n[2].length==0,o[2].length==0)||j(n[2],o[2])}while(a==0)}a=F[b]=a>=0}return a};function H(b){this.stack=Error().stack||"";if(b)this.message=String(b)}f(H,Error);H.prototype.name="CustomError";function I(b,a){H.call(this,a);this.code=b;this.name=J[b]||J[13]}f(I,H);
         
     | 
| 
       17 
     | 
    
         
            -
            var J,K={NoSuchElementError:7,NoSuchFrameError:8,UnknownCommandError:9,StaleElementReferenceError:10,ElementNotVisibleError:11,InvalidElementStateError:12,UnknownError:13,ElementNotSelectableError:15,XPathLookupError:19,NoSuchWindowError:23,InvalidCookieDomainError:24,UnableToSetCookieError:25,ModalDialogOpenedError:26,NoModalDialogOpenError:27,ScriptTimeoutError:28,InvalidSelectorError:32,SqlDatabaseError:33,MoveTargetOutOfBoundsError:34},L={},M;for(M in K)L[K[M]]=M;J=L;
         
     | 
| 
       18 
     | 
    
         
            -
            I.prototype.toString=function(){return"["+this.name+"] "+this.message};function N(b,a){a.unshift(b);H.call(this,g.apply(d,a));a.shift();this.f=b}f(N,H);N.prototype.name="AssertionError";function O(b){var a=P;if(typeof a=="string"){if(typeof b!="string"||b.length!=1)return-1;return a.indexOf(b,0)}for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};!t||G("9");!u&&!t||t&&G("9")||u&&G("1.9.1");t&&G("9");function Q(b,a,c,h,v){this.b=!!a;if(b&&(this.a=b))this.c=typeof h=="number"?h:this.a.nodeType!=1?0:this.b?-1:1;this.d=v!=void 0?v:this.c||0;this.b&&(this.d*=-1);this.e=!c}f(Q,function(){});Q.prototype.a=d;Q.prototype.c=0;f(function(b,a,c,h){Q.call(this,b,a,c,d,h)},Q);var P=["async","autofocus","autoplay","checked","compact","complete","controls","declare","defaultchecked","defaultselected","defer","disabled","draggable","ended","formnovalidate","hidden","indeterminate","iscontenteditable","ismap","itemscope","loop","multiple","muted","nohref","noresize","noshade","novalidate","nowrap","open","paused","pubdate","readonly","required","reversed","scoped","seamless","seeking","selected","spellcheck","truespeed","willvalidate"];function R(b,a){if(8==b.nodeType)return d;a=a.toLowerCase();if(a=="style"){var c=i(b.style.cssText).toLowerCase();return c.charAt(c.length-1)==";"?c:c+";"}c=b.getAttributeNode(a);t&&!c&&G(8)&&O(a)>=0&&(c=b[a]);if(!c)return d;if(O(a)>=0)return t&&c.value=="false"?d:"true";return c.specified?c.value:d}var S="_".split("."),T=e;!(S[0]in T)&&T.execScript&&T.execScript("var "+S[0]);for(var Y;S.length&&(Y=S.shift());)!S.length&&R!==void 0?T[Y]=R:T=T[Y]?T[Y]:T[Y]={};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null}, arguments);}
         
     | 
| 
         @@ -1,65 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Watir
         
     | 
| 
       2 
     | 
    
         
            -
              module Locators
         
     | 
| 
       3 
     | 
    
         
            -
                class Element
         
     | 
| 
       4 
     | 
    
         
            -
                  class SelectorBuilder
         
     | 
| 
       5 
     | 
    
         
            -
                    class CSS
         
     | 
| 
       6 
     | 
    
         
            -
                      def build(selectors)
         
     | 
| 
       7 
     | 
    
         
            -
                        return unless use_css?(selectors)
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                        if selectors.empty?
         
     | 
| 
       10 
     | 
    
         
            -
                          css = '*'
         
     | 
| 
       11 
     | 
    
         
            -
                        else
         
     | 
| 
       12 
     | 
    
         
            -
                          css = ''
         
     | 
| 
       13 
     | 
    
         
            -
                          css << (selectors.delete(:tag_name) || '')
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                          klass = selectors.delete(:class)
         
     | 
| 
       16 
     | 
    
         
            -
                          if klass
         
     | 
| 
       17 
     | 
    
         
            -
                            if klass.include? ' '
         
     | 
| 
       18 
     | 
    
         
            -
                              css << %([class="#{css_escape klass}"])
         
     | 
| 
       19 
     | 
    
         
            -
                            else
         
     | 
| 
       20 
     | 
    
         
            -
                              css << ".#{klass}"
         
     | 
| 
       21 
     | 
    
         
            -
                            end
         
     | 
| 
       22 
     | 
    
         
            -
                          end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                          href = selectors.delete(:href)
         
     | 
| 
       25 
     | 
    
         
            -
                          if href
         
     | 
| 
       26 
     | 
    
         
            -
                            css << %([href~="#{css_escape href}"])
         
     | 
| 
       27 
     | 
    
         
            -
                          end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                          selectors.each do |key, value|
         
     | 
| 
       30 
     | 
    
         
            -
                            key = key.to_s.tr("_", "-")
         
     | 
| 
       31 
     | 
    
         
            -
                            css << %([#{key}="#{css_escape value}"]) # TODO: proper escaping
         
     | 
| 
       32 
     | 
    
         
            -
                          end
         
     | 
| 
       33 
     | 
    
         
            -
                        end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                        [:css, css]
         
     | 
| 
       36 
     | 
    
         
            -
                      end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                      private
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                      def use_css?(selectors)
         
     | 
| 
       41 
     | 
    
         
            -
                        return false unless Watir.prefer_css?
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                        if selectors.key?(:text) || selectors.key?(:label) || selectors.key?(:index)
         
     | 
| 
       44 
     | 
    
         
            -
                          return false
         
     | 
| 
       45 
     | 
    
         
            -
                        end
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                        if selectors[:tag_name] == 'input' && selectors.key?(:type)
         
     | 
| 
       48 
     | 
    
         
            -
                          return false
         
     | 
| 
       49 
     | 
    
         
            -
                        end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                        if selectors.key?(:class) && selectors[:class] !~ /^[\w-]+$/ui
         
     | 
| 
       52 
     | 
    
         
            -
                          return false
         
     | 
| 
       53 
     | 
    
         
            -
                        end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                        true
         
     | 
| 
       56 
     | 
    
         
            -
                      end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                      def css_escape(str)
         
     | 
| 
       59 
     | 
    
         
            -
                        str.gsub('"', '\\"')
         
     | 
| 
       60 
     | 
    
         
            -
                      end
         
     | 
| 
       61 
     | 
    
         
            -
                    end
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
     | 
    
         
            -
              end
         
     | 
| 
       65 
     | 
    
         
            -
            end
         
     | 
    
        data/spec/always_locate_spec.rb
    DELETED
    
    | 
         @@ -1,43 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require File.expand_path('watirspec/spec_helper', File.dirname(__FILE__))
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            describe 'Watir' do
         
     | 
| 
       4 
     | 
    
         
            -
              describe '#always_locate?' do
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                before do
         
     | 
| 
       7 
     | 
    
         
            -
                  browser.goto WatirSpec.url_for('removed_element.html')
         
     | 
| 
       8 
     | 
    
         
            -
                end
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                it 'determines whether #exist? returns false for stale element' do
         
     | 
| 
       11 
     | 
    
         
            -
                  element = browser.div(id: "text")
         
     | 
| 
       12 
     | 
    
         
            -
                  expect(element.exists?).to be true
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  browser.refresh
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                  expect(element.exists?).to be Watir.always_locate?
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                it 'allows using cached elements regardless of setting, when element is not stale' do
         
     | 
| 
       20 
     | 
    
         
            -
                  element = browser.div(id: "text")
         
     | 
| 
       21 
     | 
    
         
            -
                  expect(element.exists?).to be true
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  # exception raised if element is re-looked up
         
     | 
| 
       24 
     | 
    
         
            -
                  allow(browser.driver).to receive(:find_element).with(:id, 'text') { raise }
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  expect { element.exists? }.to_not raise_error
         
     | 
| 
       27 
     | 
    
         
            -
                end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                it 'determines whether an exception is raised when taking an action on a stale element' do
         
     | 
| 
       30 
     | 
    
         
            -
                  element = browser.div(id: "text")
         
     | 
| 
       31 
     | 
    
         
            -
                  expect(element.exists?).to be true
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                  browser.refresh
         
     | 
| 
       34 
     | 
    
         
            -
                  browser.div(id: "text").wait_until_present
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                  if Watir.always_locate?
         
     | 
| 
       37 
     | 
    
         
            -
                    expect { element.text }.to_not raise_error
         
     | 
| 
       38 
     | 
    
         
            -
                  else
         
     | 
| 
       39 
     | 
    
         
            -
                    expect { element.text }.to raise_error Watir::Exception::UnknownObjectException
         
     | 
| 
       40 
     | 
    
         
            -
                  end
         
     | 
| 
       41 
     | 
    
         
            -
                end
         
     | 
| 
       42 
     | 
    
         
            -
              end
         
     | 
| 
       43 
     | 
    
         
            -
            end
         
     |