teamcapybara / capybara

Acceptance test framework for web applications
http://teamcapybara.github.io/capybara/
MIT License
9.98k stars 1.44k forks source link

Selenium raises WebDriverError, not JavascriptError, when access is denied to clear sessionStorage #2745

Closed DanielHeath closed 1 month ago

DanielHeath commented 3 months ago

Meta

Capybara Version: 3.40.0 Driver Information (and browser if relevant): selenium-webdriver (4.17.0), chrome 121.0.6167.139

Expected Behavior

Visiting about:blank and then calling clear_storage should silently fail (thanks to the rescue JavascriptError line in lib/capybara/selenium/driver.rb:351 )

Actual Behavior

     Selenium::WebDriver::Error::WebDriverError:
       <unknown>: Failed to read the 'sessionStorage' property from 'Window': Access is denied for this document.
         (Session info: chrome-headless-shell=120.0.6099.224)
     # #0 0x5558656adf83 <unknown>
     # #1 0x555865366cf7 <unknown>
     # #2 0x55586536d2a3 <unknown>
     # #3 0x55586536fbb4 <unknown>
     # #4 0x5558653ffba3 <unknown>
     # #5 0x5558653e00b2 <unknown>
     # #6 0x5558653ff006 <unknown>
     # #7 0x5558653dfe53 <unknown>
     # #8 0x5558653a7dd4 <unknown>
     # #9 0x5558653a91de <unknown>
     # #10 0x555865672531 <unknown>
     # #11 0x555865676455 <unknown>
     # #12 0x55586565ef55 <unknown>
     # #13 0x5558656770ef <unknown>
     # #14 0x55586564299f <unknown>
     # #15 0x55586569b008 <unknown>
     # #16 0x55586569b1d7 <unknown>
     # #17 0x5558656ad124 <unknown>
     # #18 0x7fbc6bc93ac3 <unknown>
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/response.rb:55:in `assert_ok'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/http/common.rb:59:in `call'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/bridge.rb:607:in `execute'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/bridge.rb:333:in `execute_script'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/remote/bridge.rb:321:in `clear_session_storage'
     # .gem/ruby/3.2.2/gems/selenium-webdriver-4.17.0/lib/selenium/webdriver/common/html5/session_storage.rb:40:in `clear'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara/selenium/driver.rb:357:in `clear_session_storage'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara/selenium/driver.rb:349:in `clear_storage'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara/selenium/driver.rb:329:in `clear_browser_state'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara/selenium/driver.rb:485:in `reset_browser_state'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara/selenium/driver.rb:164:in `reset!'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara/session.rb:132:in `reset!'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara.rb:327:in `block in reset_sessions!'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara.rb:327:in `reverse_each'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara.rb:327:in `reset_sessions!'
     # .gem/ruby/3.2.2/gems/capybara-3.40.0/lib/capybara/rspec.rb:20:in `block (2 levels) in <top (required)>'
     # ./spec/rails_helper.rb:141:in `block (3 levels) in <top (required)>'

It looks like WebDriverError needs to be caught also?