capybara 3.38.0 → 3.39.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/History.md +20 -0
- data/lib/capybara/node/actions.rb +4 -4
- data/lib/capybara/node/finders.rb +2 -0
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/rack_test/node.rb +18 -15
- data/lib/capybara/registrations/drivers.rb +3 -3
- data/lib/capybara/registrations/servers.rb +16 -4
- data/lib/capybara/rspec/matcher_proxies.rb +3 -3
- data/lib/capybara/rspec/matchers/base.rb +8 -6
- data/lib/capybara/rspec/matchers/compound.rb +1 -1
- data/lib/capybara/selector/definition/link.rb +2 -1
- data/lib/capybara/selenium/driver.rb +4 -4
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +8 -4
- data/lib/capybara/selenium/extensions/html5_drag.rb +3 -0
- data/lib/capybara/selenium/node.rb +8 -10
- data/lib/capybara/selenium/nodes/chrome_node.rb +5 -1
- data/lib/capybara/selenium/nodes/edge_node.rb +24 -2
- data/lib/capybara/selenium/patches/action_pauser.rb +3 -3
- data/lib/capybara/selenium/patches/atoms.rb +1 -1
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +1 -1
- data/lib/capybara/server/animation_disabler.rb +2 -3
- data/lib/capybara/spec/public/test.js +4 -0
- data/lib/capybara/spec/session/all_spec.rb +1 -1
- data/lib/capybara/spec/session/click_link_spec.rb +11 -0
- data/lib/capybara/spec/session/find_link_spec.rb +10 -0
- data/lib/capybara/spec/session/find_spec.rb +1 -1
- data/lib/capybara/spec/session/first_spec.rb +1 -1
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +2 -0
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +5 -5
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +2 -2
- data/lib/capybara/spec/session/has_current_path_spec.rb +1 -1
- data/lib/capybara/spec/session/has_link_spec.rb +5 -1
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +7 -7
- data/lib/capybara/spec/session/matches_style_spec.rb +2 -0
- data/lib/capybara/spec/session/node_spec.rb +16 -0
- data/lib/capybara/spec/session/scroll_spec.rb +3 -1
- data/lib/capybara/spec/session/window/windows_spec.rb +1 -1
- data/lib/capybara/spec/views/form.erb +4 -0
- data/lib/capybara/spec/views/with_html.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/spec/css_builder_spec.rb +1 -1
- data/spec/css_splitter_spec.rb +1 -1
- data/spec/rack_test_spec.rb +2 -2
- data/spec/rspec/scenarios_spec.rb +1 -1
- data/spec/rspec_matchers_spec.rb +25 -0
- data/spec/sauce_spec_chrome.rb +1 -1
- data/spec/selenium_spec_chrome.rb +5 -6
- data/spec/selenium_spec_chrome_remote.rb +5 -7
- data/spec/selenium_spec_edge.rb +11 -7
- data/spec/selenium_spec_firefox.rb +10 -4
- data/spec/selenium_spec_firefox_remote.rb +16 -3
- data/spec/selenium_spec_ie.rb +1 -1
- data/spec/selenium_spec_safari.rb +1 -1
- data/spec/server_spec.rb +2 -2
- data/spec/shared_selenium_session.rb +2 -1
- data/spec/spec_helper.rb +33 -0
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +1 -1
- metadata +4 -2
| @@ -281,6 +281,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode| | |
| 281 281 | 
             
                  end
         | 
| 282 282 |  | 
| 283 283 | 
             
                  it 'returns a shadow root' do
         | 
| 284 | 
            +
                    skip 'Not supported with this Selenium version' if selenium_lt?('4.1', session)
         | 
| 284 285 | 
             
                    pending "Geckodriver doesn't fully support shadow root yet" if firefox?(session)
         | 
| 285 286 | 
             
                    session.visit('/with_shadow')
         | 
| 286 287 | 
             
                    shadow = session.find(:css, '#shadow_host')
         | 
| @@ -344,7 +345,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode| | |
| 344 345 | 
             
                  it 'can attach a directory' do
         | 
| 345 346 | 
             
                    pending "Geckodriver doesn't support uploading a directory" if firefox?(session)
         | 
| 346 347 | 
             
                    pending "Selenium remote doesn't support transferring a directory" if remote?(session)
         | 
| 347 | 
            -
                    pending "Headless Chrome doesn't support directory upload - https://bugs.chromium.org/p/chromedriver/issues/detail?id=2521&q=directory%20upload&colspec=ID%20Status%20Pri%20Owner%20Summary" if chrome?(session) && ENV.fetch('HEADLESS', nil)
         | 
| 348 | 
            +
                    pending "Headless Chrome doesn't support directory upload - https://bugs.chromium.org/p/chromedriver/issues/detail?id=2521&q=directory%20upload&colspec=ID%20Status%20Pri%20Owner%20Summary" if chrome?(session) && chrome_lt?(110, session) && ENV.fetch('HEADLESS', nil)
         | 
| 348 349 | 
             
                    pending "IE doesn't support uploading a directory" if ie?(session)
         | 
| 349 350 | 
             
                    pending 'Chrome/chromedriver 73 breaks this' if chrome?(session) && chrome_gte?(73, session) && chrome_lt?(75, session)
         | 
| 350 351 |  | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -28,6 +28,18 @@ module Capybara | |
| 28 28 | 
             
                  firefox?(session) && (session.driver.browser.capabilities[:browser_version].to_f >= version)
         | 
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| 31 | 
            +
                def geckodriver_version(session)
         | 
| 32 | 
            +
                  Gem::Version.new(session.driver.browser.capabilities['moz:geckodriverVersion'])
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def geckodriver_gte?(version, session)
         | 
| 36 | 
            +
                  firefox?(session) && geckodriver_version(session) >= Gem::Version.new(version)
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def geckodriver_lt?(version, session)
         | 
| 40 | 
            +
                  firefox?(session) && geckodriver_version(session) < Gem::Version.new(version)
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 31 43 | 
             
                def chrome?(session)
         | 
| 32 44 | 
             
                  browser_name(session) == :chrome
         | 
| 33 45 | 
             
                end
         | 
| @@ -45,6 +57,27 @@ module Capybara | |
| 45 57 | 
             
                  chrome?(session) && (chrome_version(session) >= version)
         | 
| 46 58 | 
             
                end
         | 
| 47 59 |  | 
| 60 | 
            +
                def chromedriver_version(session)
         | 
| 61 | 
            +
                  Gem::Version.new(session.driver.browser.capabilities['chrome']['chromedriverVersion'].split[0])
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                def chromedriver_gte?(version, session)
         | 
| 65 | 
            +
                  chrome?(session) && chromedriver_version(session) >= Gem::Version.new(version)
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def chromedriver_lt?(version, session)
         | 
| 69 | 
            +
                  chrome?(session) && chromedriver_version(session) < Gem::Version.new(version)
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                def selenium?(session)
         | 
| 73 | 
            +
                  session.driver.is_a? Capybara::Selenium::Driver
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                def selenium_lt?(version, session)
         | 
| 77 | 
            +
                  selenium?(session) &&
         | 
| 78 | 
            +
                    Gem::Version.new(::Selenium::WebDriver::VERSION) < Gem::Version.new(version)
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 48 81 | 
             
                def edge?(session)
         | 
| 49 82 | 
             
                  browser_name(session).to_s.start_with?('edge')
         | 
| 50 83 | 
             
                end
         | 
| @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
            require 'capybara/node/whitespace_normalizer'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            RSpec.describe Capybara::Node::WhitespaceNormalizer do
         | 
| 7 | 
            +
              subject(:normalizer) do
         | 
| 8 | 
            +
                klass = Class.new do
         | 
| 9 | 
            +
                  include Capybara::Node::WhitespaceNormalizer
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                klass.new
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              let(:text_needing_correction) do
         | 
| 16 | 
            +
                <<~TEXT
         | 
| 17 | 
            +
                  Some     #{described_class::NON_BREAKING_SPACE}text
         | 
| 18 | 
            +
                  #{described_class::RIGHT_TO_LEFT_MARK}
         | 
| 19 | 
            +
                  #{described_class::ZERO_WIDTH_SPACE * 30}
         | 
| 20 | 
            +
                  #{described_class::LEFT_TO_RIGHT_MARK}
         | 
| 21 | 
            +
                  Here
         | 
| 22 | 
            +
                TEXT
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              describe '#normalize_spacing' do
         | 
| 26 | 
            +
                it 'does nothing to text not containing special characters' do
         | 
| 27 | 
            +
                  expect(normalizer.normalize_spacing('text')).to eq('text')
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                it 'compresses excess breaking spacing' do
         | 
| 31 | 
            +
                  expect(
         | 
| 32 | 
            +
                    normalizer.normalize_spacing(text_needing_correction)
         | 
| 33 | 
            +
                  ).to eq('Some  text Here')
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              describe '#normalize_visible_spacing' do
         | 
| 38 | 
            +
                it 'does nothing to text not containing special characters' do
         | 
| 39 | 
            +
                  expect(normalizer.normalize_visible_spacing('text')).to eq('text')
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                it 'compresses excess breaking visible spacing' do
         | 
| 43 | 
            +
                  expect(
         | 
| 44 | 
            +
                    normalizer.normalize_visible_spacing(text_needing_correction)
         | 
| 45 | 
            +
                  ).to eq <<~TEXT.chomp
         | 
| 46 | 
            +
                    Some  text
         | 
| 47 | 
            +
                    #{described_class::RIGHT_TO_LEFT_MARK}
         | 
| 48 | 
            +
                    #{described_class::ZERO_WIDTH_SPACE * 30}
         | 
| 49 | 
            +
                    #{described_class::LEFT_TO_RIGHT_MARK}
         | 
| 50 | 
            +
                    Here
         | 
| 51 | 
            +
                  TEXT
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
            end
         | 
    
        data/spec/xpath_builder_spec.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: capybara
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3. | 
| 4 | 
            +
              version: 3.39.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Thomas Walpole
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire:
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2023-04-03 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: addressable
         | 
| @@ -487,6 +487,7 @@ files: | |
| 487 487 | 
             
            - lib/capybara/node/finders.rb
         | 
| 488 488 | 
             
            - lib/capybara/node/matchers.rb
         | 
| 489 489 | 
             
            - lib/capybara/node/simple.rb
         | 
| 490 | 
            +
            - lib/capybara/node/whitespace_normalizer.rb
         | 
| 490 491 | 
             
            - lib/capybara/queries/active_element_query.rb
         | 
| 491 492 | 
             
            - lib/capybara/queries/ancestor_query.rb
         | 
| 492 493 | 
             
            - lib/capybara/queries/base_query.rb
         | 
| @@ -781,6 +782,7 @@ files: | |
| 781 782 | 
             
            - spec/shared_selenium_node.rb
         | 
| 782 783 | 
             
            - spec/shared_selenium_session.rb
         | 
| 783 784 | 
             
            - spec/spec_helper.rb
         | 
| 785 | 
            +
            - spec/whitespace_normalizer_spec.rb
         | 
| 784 786 | 
             
            - spec/xpath_builder_spec.rb
         | 
| 785 787 | 
             
            homepage: https://github.com/teamcapybara/capybara
         | 
| 786 788 | 
             
            licenses:
         |