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