SeleniumHQ / selenium

A browser automation framework and ecosystem.
https://selenium.dev
Apache License 2.0
30.58k stars 8.17k forks source link

[🐛 Bug]: Intercepting requests #12040

Closed mihael closed 1 year ago

mihael commented 1 year ago

What happened?

I am not sure this is actually a bug or a lack of a feature, so please bear this in mind.

Problem: Using page.driver.browser.intercept to intercept a request to an URL that does not exist, results in JSON parsing error when trying to continue the response:

.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools.rb:49:in `send_cmd': -32602: Invalid parameters: Failed to deserialize params.responseCode - BINDINGS: mandatory field missing at position 95 (Selenium::WebDriver::Error::WebDriverError)

I was following this tutorial: https://gist.github.com/arielj/4f52b6fcdb8035babcd3f6dac8c2dc77

a) I can intercept and mock the response for an URL that exists and is responding. b) It seems there is no way to intercept a fetch to a non-existent URL, or to an URL with CORS disallowing connections. c) It seems an intercepted request always hits the remote server?

I was under the impression I could intercept and mock requests for any fetch request originating from JS code in a Rails app. But it seems this is only partially true, since the URLs intercepted are being hit anyway?!

How can we reproduce the issue?

Please see this minimal reproduction Rails project: https://github.com/mihael/intercepted

System test examples are here: https://github.com/mihael/intercepted/blob/main/test/system/swapi_test.rb

Run with: bin/rails test test/system/swapi_test.rb

The setup: https://github.com/mihael/intercepted/blob/main/lib/interceptor.rb https://github.com/mihael/intercepted/blob/main/test/application_system_test_case.rb

Relevant log output

intercepted https://fakerapizzz.it/api/v1/companies?_quantity=5 with: my mocked response
#<Thread:0x00007fde4aea9630 /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/common/websocket_connection.rb:121 run> terminated with exception (report_on_exception is true):
/Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools.rb:49:in `send_cmd': -32602: Invalid parameters: Failed to deserialize params.responseCode - BINDINGS: mandatory field missing at position 95 (Selenium::WebDriver::Error::WebDriverError)
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-devtools-0.113.0/lib/selenium/devtools/v113/fetch.rb:56:in `fulfill_request'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:145:in `mutate_response'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:123:in `intercept_response'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:84:in `block in request_paused'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:162:in `with_cancellable_request'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:81:in `request_paused'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:48:in `block in intercept'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/common/websocket_connection.rb:131:in `block in callback_thread'

Operating System

macOS

Selenium version

Ruby 4.9.1

What are the browser(s) and version(s) where you see this issue?

Chrome 110

What are the browser driver(s) and version(s) where you see this issue?

Webdrivers chromedriver 113.0.5672.63

Are you using Selenium Grid?

No response

github-actions[bot] commented 1 year ago

@mihael, thank you for creating this issue. We will troubleshoot it as soon as we can.


Info for maintainers

Triage this issue by using labels.

If information is missing, add a helpful comment and then I-issue-template label.

If the issue is a question, add the I-question label.

If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.

If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C), add the applicable G-* label, and it will provide the correct link and auto-close the issue.

After troubleshooting the issue, please add the R-awaiting answer label.

Thank you!

titusfortner commented 1 year ago
  1. This would be easier to evaluate if you could reproduce it with just Selenium so we don't need Rails/Capybara.
  2. Can you run this with Selenium::WebDriver.logger.level = :debug so we can see what exactly is getting sent and returned? (I'm not sure if Capybara turns off Selenium logging by default, so you may have to do suggestion 1 to get this to work)
titusfortner commented 1 year ago

Ooh, the new logging documentation just landed, I can link to that now: https://www.selenium.dev/documentation/webdriver/troubleshooting/logging/

mihael commented 1 year ago
  1. Can you maybe point me to an example template project that I can quickly adapt @titusfortner?

  2. I tried here and this stands out:

    [:bidi] WebSocket <- {"id"=>7, "error"=>{"code"=>-32000, "message"=>"Can only get response body on requests captured after headers received."},

Full debug output (running example Request 2 https://github.com/mihael/intercepted/blob/main/test/system/swapi_test.rb#L18)

> bin/rails test test/system/swapi_test.rb:18

Running 3 tests in a single process (parallelization threshold is 50)
Run options: --seed 40736

# Running:

Capybara starting Puma...
* Version 5.6.5 , codename: Birdie's Version
* Min threads: 0, max threads: 4
* Listening on http://127.0.0.1:54981
2023-05-15 16:54:13 WARN Selenium [:capabilities] [DEPRECATION] The :capabilities parameter for Selenium::WebDriver::Chrome::Driver is deprecated. Use :options argument with an instance of Selenium::WebDriver::Chrome::Driver instead. 
2023-05-15 16:54:13 DEBUG Selenium [:driver_service] Executing Process ["/Users/mihael/.webdrivers/chromedriver", "--port=9517"] 
2023-05-15 16:54:13 DEBUG Selenium [:process] Starting process: ["/Users/mihael/.webdrivers/chromedriver", "--port=9517"] with {[:out, :err]=>#<IO:<STDOUT>>, :pgroup=>true} 
2023-05-15 16:54:13 DEBUG Selenium [:process]   -> pid: 52344 
2023-05-15 16:54:13 DEBUG Selenium [:driver_service] polling for socket on ["127.0.0.1", 9517] 
Starting ChromeDriver 113.0.5672.63 (0e1a4471d5ae5bf128b1bd8f4d627c8cbd55f70c-refs/branch-heads/5672@{#912}) on port 9517
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
2023-05-15 16:54:13 DEBUG Selenium [:command] -> POST session 
2023-05-15 16:54:13 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session | {"capabilities":{"alwaysMatch":{"browserName":"chrome","goog:chromeOptions":{"args":["--headless=new"]}}}} 
2023-05-15 16:54:13 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"106"} 
2023-05-15 16:54:17 DEBUG Selenium [:header]    <<<  {"content-length"=>["868"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:17 DEBUG Selenium [:command] <- {"value":{"capabilities":{"acceptInsecureCerts":false,"browserName":"chrome","browserVersion":"113.0.5672.92","chrome":{"chromedriverVersion":"113.0.5672.63 (0e1a4471d5ae5bf128b1bd8f4d627c8cbd55f70c-refs/branch-heads/5672@{#912})","userDataDir":"/var/folders/c2/rqcm87d96cx0j3v5324bd3q40000gn/T/.com.google.Chrome.AI0kLl"},"goog:chromeOptions":{"debuggerAddress":"localhost:55004"},"networkConnectionEnabled":false,"pageLoadStrategy":"normal","platformName":"mac os x","proxy":{},"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify","webauthn:extension:credBlob":true,"webauthn:extension:largeBlob":true,"webauthn:extension:minPinLength":true,"webauthn:extension:prf":true,"webauthn:virtualAuthenticators":true},"sessionId":"5529b5c8332632b101134ec637e9c956"}} 
2023-05-15 16:54:17 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/url 
2023-05-15 16:54:17 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/url | {"url":"http://127.0.0.1:54981/"} 
2023-05-15 16:54:17 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"33"} 
2023-05-15 16:54:18 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:18 DEBUG Selenium [:command] <- {"value":null} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Target.getTargets", :params=>{}, :id=>1} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket <- {"id"=>1, "result"=>{"targetInfos"=>[{"targetId"=>"7E3C57C2451D4D230718C752DC1F9D03", "type"=>"page", "title"=>"Intercepted", "url"=>"http://127.0.0.1:54981/", "attached"=>true, "canAccessOpener"=>false, "browserContextId"=>"D9168456808514B736A09DCF48EA60CC"}]}} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Target.attachToTarget", :params=>{:targetId=>"7E3C57C2451D4D230718C752DC1F9D03", :flatten=>true}, :id=>2} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket <- {"method"=>"Target.attachedToTarget", "params"=>{"sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC", "targetInfo"=>{"targetId"=>"7E3C57C2451D4D230718C752DC1F9D03", "type"=>"page", "title"=>"Intercepted", "url"=>"http://127.0.0.1:54981/", "attached"=>true, "canAccessOpener"=>false, "browserContextId"=>"D9168456808514B736A09DCF48EA60CC"}, "waitingForDebugger"=>false}} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket <- {"id"=>2, "result"=>{"sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"}} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Network.setCacheDisabled", :params=>{:cacheDisabled=>true}, :sessionId=>"79FA47BFE5DA0E99E447233B4090F6BC", :id=>3} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket <- {"id"=>3, "result"=>{}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Network.enable", :params=>{}, :sessionId=>"79FA47BFE5DA0E99E447233B4090F6BC", :id=>4} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket <- {"id"=>4, "result"=>{}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Fetch.enable", :params=>{:patterns=>[{:requestStage=>"Request"}, {:requestStage=>"Response"}]}, :sessionId=>"79FA47BFE5DA0E99E447233B4090F6BC", :id=>5} 
2023-05-15 16:54:18 DEBUG Selenium [:bidi] WebSocket <- {"id"=>5, "result"=>{}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/elements 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/elements | {"using":"xpath","value":".//input[((((./@type = 'submit') or (./@type = 'reset')) or (./@type = 'image')) or (./@type = 'button'))][(((((./@id = 'Request2') or (./@name = 'Request2')) or (./@value = 'Request2')) or (./@title = 'Request2')) or (./@id = //label[(normalize-space(string(.)) = 'Request2')]/@for))] | .//label[(normalize-space(string(.)) = 'Request2')]//*[((./self::input and ((((./@type = 'submit') or (./@type = 'reset')) or (./@type = 'image')) or (./@type = 'button'))) or ./self::button)] | .//input[(./@type = 'image')][(./@alt = 'Request2')] | .//label[(normalize-space(string(.)) = 'Request2')]//*[((./self::input and ((((./@type = 'submit') or (./@type = 'reset')) or (./@type = 'image')) or (./@type = 'button'))) or ./self::button)] | .//button[(((((((./@id = 'Request2') or (./@name = 'Request2')) or (./@value = 'Request2')) or (./@title = 'Request2')) or (./@id = //label[(normalize-space(string(.)) = 'Request2')]/@for)) or (normalize-space(string(.)) = 'Request2')) or .//img[(./@alt = 'Request2')])] | .//label[(normalize-space(string(.)) = 'Request2')]//*[((./self::input and ((((./@type = 'submit') or (./@type = 'reset')) or (./@type = 'image')) or (./@type = 'button'))) or ./self::button)] | .//input[(./@type = 'image')][(./@alt = 'Request2')] | .//label[(normalize-space(string(.)) = 'Request2')]//*[((./self::input and ((((./@type = 'submit') or (./@type = 'reset')) or (./@type = 'image')) or (./@type = 'button'))) or ./self::button)]"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"1476"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["96"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_3"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:script] Using script for :isDisplayed 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/execute/sync 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/execute/sync | {"script":"/* isDisplayed */return ((function(){function d(t,e,n){function r(t){var e=x(t);if(0<e.height&&0<e.width)return!0;if(\"PATH\"==t.tagName.toUpperCase()&&(0<e.height||0<e.width)){var n=window.getComputedStyle(t)[\"stroke-width\"];return!!n&&0<parseInt(n,10)}return\"hidden\"!=window.getComputedStyle(t).overflow&&Array.prototype.slice.call(t.childNodes).some(function(t){return t.nodeType==Node.TEXT_NODE||t.nodeType==Node.ELEMENT_NODE&&r(t)})}function i(t){return C(t)==T.HIDDEN&&Array.prototype.slice.call(t.childNodes).every(function(t){return t.nodeType!=Node.ELEMENT_NODE||i(t)||!r(t)})}var o=t.tagName.toUpperCase();if(\"BODY\"==o)return!0;if(\"OPTION\"==o||\"OPTGROUP\"==o){var a=c(t,function(t){return\"SELECT\"==t.tagName.toUpperCase()});return!!a&&d(a,!0,n)}var u=s(t);if(u)return!!u.image&&0<u.rect.width&&0<u.rect.height&&d(u.image,e,n);if(\"INPUT\"==o&&\"hidden\"==t.type.toLowerCase())return!1;if(\"NOSCRIPT\"==o)return!1;var l=window.getComputedStyle(t).visibility;return\"collapse\"!=l&&\"hidden\"!=l&&(!!n(t)&&(!(!e&&0==f(t))&&(!!r(t)&&!i(t))))}function E(t){var e=x(t);return{left:e.left,right:e.left+e.width,top:e.top,bottom:e.top+e.height}}function D(t){return t.parentElement}function C(t){function e(t){function e(t){if(t==u)return!0;var e=window.getComputedStyle(t),n=e.display;return 0!=n.indexOf(\"inline\")&&\"contents\"!=n&&(\"absolute\"!=r||\"static\"!=e.position)}var r=window.getComputedStyle(t).position;if(\"fixed\"==r)return i=!0,t==u?null:u;for(var n=D(t);n&&!e(n);)n=D(n);return n}function n(t){var e=t;if(\"visible\"==d)if(t==u&&l)e=l;else if(t==l)return{x:\"visible\",y:\"visible\"};var n=window.getComputedStyle(e),r={x:n[\"overflow-x\"],y:n[\"overflow-y\"]};return t==u&&(r.x=\"visible\"==r.x?\"auto\":r.x,r.y=\"visible\"==r.y?\"auto\":r.y),r}function r(t){return t==u?{x:window.scrollX,y:window.scrollY}:{x:t.scrollLeft,y:t.scrollTop}}for(var i,o=E(t),a=t.ownerDocument,u=a.documentElement,l=a.body,d=window.getComputedStyle(u).overflow,f=e(t);f;f=e(f)){var h=n(f);if(\"visible\"!=h.x||\"visible\"!=h.y){var s=x(f);if(0==s.width||0==s.height)return T.HIDDEN;var p=o.right<s.left,c=o.bottom<s.top;if(p&&\"hidden\"==h.x||c&&\"hidden\"==h.y)return T.HIDDEN;if(p&&\"visible\"!=h.x||c&&\"visible\"!=h.y){var v=r(f),g=o.right<s.left-v.x,w=o.bottom<s.top-v.y;return g&&\"visible\"!=h.x||w&&\"visible\"!=h.x?T.HIDDEN:C(f)==T.HIDDEN?T.HIDDEN:T.SCROLL}var N=o.left>=s.left+s.width,m=o.top>=s.top+s.height;if(N&&\"hidden\"==h.x||m&&\"hidden\"==h.y)return T.HIDDEN;if(N&&\"visible\"!=h.x||m&&\"visible\"!=h.y){if(i){var y=r(f);if(o.left>=u.scrollWidth-y.x||o.right>=u.scrollHeight-y.y)return T.HIDDEN}return C(f)==T.HIDDEN?T.HIDDEN:T.SCROLL}}}return T.NONE}function o(t){var e=t.document.documentElement;return{width:e.clientWidth,height:e.clientHeight}}function p(t,e,n,r){return{left:t,top:e,width:n,height:r}}function x(t){var e,n=s(t);if(n)return n.rect;if(\"HTML\"==t.tagName.toUpperCase()){t.ownerDocument;var r=o(window);return p(0,0,r.width,r.height)}try{e=t.getBoundingClientRect()}catch(i){return p(0,0,0,0)}return p(e.left,e.top,e.right-e.left,e.bottom-e.top)}function f(t){var e=1,n=window.getComputedStyle(t).opacity;n&&(e=Number(n));var r=D(t);return r&&r.nodeType==Node.ELEMENT_NODE&&(e*=f(r)),e}function h(t){var e=t.shape.toLowerCase(),n=t.coords.split(\",\");if(\"rect\"==e&&4==n.length){var r=n[0],i=n[1];return p(r,i,n[2]-r,n[3]-i)}if(\"circle\"==e&&3==n.length){var o=n[0],a=n[1],u=n[2];return p(o-u,a-u,2*u,2*u)}if(\"poly\"==e&&2<n.length){for(var l=n[0],d=n[1],f=l,h=d,s=2;s+1<n.length;s+=2)l=Math.min(l,n[s]),f=Math.max(f,n[s]),d=Math.min(d,n[s+1]),h=Math.max(h,n[s+1]);return p(l,d,f-l,h-d)}return p(0,0,0,0)}function s(t){var e=t.tagName.toUpperCase(),n=\"MAP\"==e;if(!n&&\"AREA\"!=e)return null;var r=n?t:\"MAP\"==D(t).tagName.toUpperCase()?D(t):null,i=null,o=null;if(r&&r.name&&((i=r.ownerDocument.querySelector(\"*[usemap='#\"+r.name+\"']\"))&&(o=x(i),!n&&\"default\"!=t.shape.toLowerCase()))){var a=h(t),u=Math.min(Math.max(a.left,0),o.width),l=Math.min(Math.max(a.top,0),o.height),d=Math.min(a.width,o.width-u),f=Math.min(a.height,o.height-l);o=p(u+o.left,l+o.top,d,f)}return{image:i,rect:o||p(0,0,0,0)}}function c(t,e){for(t&&(t=D(t));t;){if(e(t))return t;t=D(t)}return null}function r(t){var e=t.parentNode;if(e&&e.shadowRoot&&t.assignedSlot!==undefined)return t.assignedSlot?t.assignedSlot.parentNode:null;if(t.getDestinationInsertionPoints){var n=t.getDestinationInsertionPoints();if(0<n.length)return n[n.length-1]}return e}var T={NONE:\"none\",HIDDEN:\"hidden\",SCROLL:\"scroll\"};return function i(t,e){function n(t){if(\"none\"==window.getComputedStyle(t).display)return!1;var e=r(t);if(\"function\"==typeof ShadowRoot&&e instanceof ShadowRoot){if(e.host.shadowRoot!==e)return!1;e=e.host}return!(!e||e.nodeType!=Node.DOCUMENT_NODE&&e.nodeType!=Node.DOCUMENT_FRAGMENT_NODE)||!(e&&e.tagName&&\"DETAILS\"==e.tagName.toUpperCase()&&!e.open&&\"SUMMARY\"!=t.tagName)&&(e&&n(e))}return d(t,!!e,n)}})()).apply(null, arguments)","args":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_3"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"5090"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":true} 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/execute/sync 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/execute/sync | {"script":"return arguments[0].matches(':disabled, select:disabled *')","args":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_3"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"166"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["15"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":false} 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/element/5DEED0BCF704B585281ED1E6435FFE2F_element_3/click 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket <- {"method"=>"Fetch.requestPaused", "params"=>{"requestId"=>"interception-job-1.0", "request"=>{"url"=>"https://fakerapizzz.it/api/v1/companies?_quantity=5", "method"=>"GET", "headers"=>{"Accept"=>"*/*", "Origin"=>"http://127.0.0.1:54981", "Referer"=>"http://127.0.0.1:54981/", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36", "sec-ch-ua"=>"\"Google Chrome\";v=\"113\", \"Chromium\";v=\"113\", \"Not-A.Brand\";v=\"24\"", "sec-ch-ua-mobile"=>"?0", "sec-ch-ua-platform"=>"\"macOS\""}, "initialPriority"=>"High", "referrerPolicy"=>"strict-origin-when-cross-origin"}, "frameId"=>"7E3C57C2451D4D230718C752DC1F9D03", "resourceType"=>"XHR", "networkId"=>"52358.22"}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Fetch.continueRequest", :params=>{:requestId=>"interception-job-1.0"}, :sessionId=>"79FA47BFE5DA0E99E447233B4090F6BC", :id=>6} 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket <- {"method"=>"Network.requestWillBeSent", "params"=>{"requestId"=>"52358.22", "loaderId"=>"5DEED0BCF704B585281ED1E6435FFE2F", "documentURL"=>"http://127.0.0.1:54981/", "request"=>{"url"=>"https://fakerapizzz.it/api/v1/companies?_quantity=5", "method"=>"GET", "headers"=>{"sec-ch-ua"=>"\"Google Chrome\";v=\"113\", \"Chromium\";v=\"113\", \"Not-A.Brand\";v=\"24\"", "Referer"=>"http://127.0.0.1:54981/", "sec-ch-ua-mobile"=>"?0", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36", "sec-ch-ua-platform"=>"\"macOS\""}, "mixedContentType"=>"none", "initialPriority"=>"High", "referrerPolicy"=>"strict-origin-when-cross-origin", "isSameSite"=>false}, "timestamp"=>2364197.61952, "wallTime"=>1684162459.322969, "initiator"=>{"type"=>"script", "stack"=>{"callFrames"=>[{"functionName"=>"", "scriptId"=>"11", "url"=>"http://127.0.0.1:54981/assets/application-bffc7c61d63bb168ee3e1ba1adad1b44492e3d816031bba5d3e851fcd6549eda.js", "lineNumber"=>17, "columnNumber"=>4}]}}, "redirectHasExtraInfo"=>false, "type"=>"Fetch", "frameId"=>"7E3C57C2451D4D230718C752DC1F9D03", "hasUserGesture"=>true}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":null} 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/elements 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/elements | {"using":"xpath","value":"/html"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"33"} 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket <- {"id"=>6, "result"=>{}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket <- {"method"=>"Fetch.requestPaused", "params"=>{"requestId"=>"interception-job-1.0", "request"=>{"url"=>"https://fakerapizzz.it/api/v1/companies?_quantity=5", "method"=>"GET", "headers"=>{"Accept"=>"*/*", "Origin"=>"http://127.0.0.1:54981", "Referer"=>"http://127.0.0.1:54981/", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36", "sec-ch-ua"=>"\"Google Chrome\";v=\"113\", \"Chromium\";v=\"113\", \"Not-A.Brand\";v=\"24\"", "sec-ch-ua-mobile"=>"?0", "sec-ch-ua-platform"=>"\"macOS\""}, "initialPriority"=>"High", "referrerPolicy"=>"strict-origin-when-cross-origin"}, "frameId"=>"7E3C57C2451D4D230718C752DC1F9D03", "resourceType"=>"XHR", "responseErrorReason"=>"NameNotResolved", "networkId"=>"52358.22"}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Fetch.getResponseBody", :params=>{:requestId=>"interception-job-1.0"}, :sessionId=>"79FA47BFE5DA0E99E447233B4090F6BC", :id=>7} 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket <- {"id"=>7, "error"=>{"code"=>-32000, "message"=>"Can only get response body on requests captured after headers received."}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["96"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_2"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:script] Using script for :isDisplayed 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/execute/sync 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/execute/sync | {"script":"/* isDisplayed */return ((function(){function d(t,e,n){function r(t){var e=x(t);if(0<e.height&&0<e.width)return!0;if(\"PATH\"==t.tagName.toUpperCase()&&(0<e.height||0<e.width)){var n=window.getComputedStyle(t)[\"stroke-width\"];return!!n&&0<parseInt(n,10)}return\"hidden\"!=window.getComputedStyle(t).overflow&&Array.prototype.slice.call(t.childNodes).some(function(t){return t.nodeType==Node.TEXT_NODE||t.nodeType==Node.ELEMENT_NODE&&r(t)})}function i(t){return C(t)==T.HIDDEN&&Array.prototype.slice.call(t.childNodes).every(function(t){return t.nodeType!=Node.ELEMENT_NODE||i(t)||!r(t)})}var o=t.tagName.toUpperCase();if(\"BODY\"==o)return!0;if(\"OPTION\"==o||\"OPTGROUP\"==o){var a=c(t,function(t){return\"SELECT\"==t.tagName.toUpperCase()});return!!a&&d(a,!0,n)}var u=s(t);if(u)return!!u.image&&0<u.rect.width&&0<u.rect.height&&d(u.image,e,n);if(\"INPUT\"==o&&\"hidden\"==t.type.toLowerCase())return!1;if(\"NOSCRIPT\"==o)return!1;var l=window.getComputedStyle(t).visibility;return\"collapse\"!=l&&\"hidden\"!=l&&(!!n(t)&&(!(!e&&0==f(t))&&(!!r(t)&&!i(t))))}function E(t){var e=x(t);return{left:e.left,right:e.left+e.width,top:e.top,bottom:e.top+e.height}}function D(t){return t.parentElement}function C(t){function e(t){function e(t){if(t==u)return!0;var e=window.getComputedStyle(t),n=e.display;return 0!=n.indexOf(\"inline\")&&\"contents\"!=n&&(\"absolute\"!=r||\"static\"!=e.position)}var r=window.getComputedStyle(t).position;if(\"fixed\"==r)return i=!0,t==u?null:u;for(var n=D(t);n&&!e(n);)n=D(n);return n}function n(t){var e=t;if(\"visible\"==d)if(t==u&&l)e=l;else if(t==l)return{x:\"visible\",y:\"visible\"};var n=window.getComputedStyle(e),r={x:n[\"overflow-x\"],y:n[\"overflow-y\"]};return t==u&&(r.x=\"visible\"==r.x?\"auto\":r.x,r.y=\"visible\"==r.y?\"auto\":r.y),r}function r(t){return t==u?{x:window.scrollX,y:window.scrollY}:{x:t.scrollLeft,y:t.scrollTop}}for(var i,o=E(t),a=t.ownerDocument,u=a.documentElement,l=a.body,d=window.getComputedStyle(u).overflow,f=e(t);f;f=e(f)){var h=n(f);if(\"visible\"!=h.x||\"visible\"!=h.y){var s=x(f);if(0==s.width||0==s.height)return T.HIDDEN;var p=o.right<s.left,c=o.bottom<s.top;if(p&&\"hidden\"==h.x||c&&\"hidden\"==h.y)return T.HIDDEN;if(p&&\"visible\"!=h.x||c&&\"visible\"!=h.y){var v=r(f),g=o.right<s.left-v.x,w=o.bottom<s.top-v.y;return g&&\"visible\"!=h.x||w&&\"visible\"!=h.x?T.HIDDEN:C(f)==T.HIDDEN?T.HIDDEN:T.SCROLL}var N=o.left>=s.left+s.width,m=o.top>=s.top+s.height;if(N&&\"hidden\"==h.x||m&&\"hidden\"==h.y)return T.HIDDEN;if(N&&\"visible\"!=h.x||m&&\"visible\"!=h.y){if(i){var y=r(f);if(o.left>=u.scrollWidth-y.x||o.right>=u.scrollHeight-y.y)return T.HIDDEN}return C(f)==T.HIDDEN?T.HIDDEN:T.SCROLL}}}return T.NONE}function o(t){var e=t.document.documentElement;return{width:e.clientWidth,height:e.clientHeight}}function p(t,e,n,r){return{left:t,top:e,width:n,height:r}}function x(t){var e,n=s(t);if(n)return n.rect;if(\"HTML\"==t.tagName.toUpperCase()){t.ownerDocument;var r=o(window);return p(0,0,r.width,r.height)}try{e=t.getBoundingClientRect()}catch(i){return p(0,0,0,0)}return p(e.left,e.top,e.right-e.left,e.bottom-e.top)}function f(t){var e=1,n=window.getComputedStyle(t).opacity;n&&(e=Number(n));var r=D(t);return r&&r.nodeType==Node.ELEMENT_NODE&&(e*=f(r)),e}function h(t){var e=t.shape.toLowerCase(),n=t.coords.split(\",\");if(\"rect\"==e&&4==n.length){var r=n[0],i=n[1];return p(r,i,n[2]-r,n[3]-i)}if(\"circle\"==e&&3==n.length){var o=n[0],a=n[1],u=n[2];return p(o-u,a-u,2*u,2*u)}if(\"poly\"==e&&2<n.length){for(var l=n[0],d=n[1],f=l,h=d,s=2;s+1<n.length;s+=2)l=Math.min(l,n[s]),f=Math.max(f,n[s]),d=Math.min(d,n[s+1]),h=Math.max(h,n[s+1]);return p(l,d,f-l,h-d)}return p(0,0,0,0)}function s(t){var e=t.tagName.toUpperCase(),n=\"MAP\"==e;if(!n&&\"AREA\"!=e)return null;var r=n?t:\"MAP\"==D(t).tagName.toUpperCase()?D(t):null,i=null,o=null;if(r&&r.name&&((i=r.ownerDocument.querySelector(\"*[usemap='#\"+r.name+\"']\"))&&(o=x(i),!n&&\"default\"!=t.shape.toLowerCase()))){var a=h(t),u=Math.min(Math.max(a.left,0),o.width),l=Math.min(Math.max(a.top,0),o.height),d=Math.min(a.width,o.width-u),f=Math.min(a.height,o.height-l);o=p(u+o.left,l+o.top,d,f)}return{image:i,rect:o||p(0,0,0,0)}}function c(t,e){for(t&&(t=D(t));t;){if(e(t))return t;t=D(t)}return null}function r(t){var e=t.parentNode;if(e&&e.shadowRoot&&t.assignedSlot!==undefined)return t.assignedSlot?t.assignedSlot.parentNode:null;if(t.getDestinationInsertionPoints){var n=t.getDestinationInsertionPoints();if(0<n.length)return n[n.length-1]}return e}var T={NONE:\"none\",HIDDEN:\"hidden\",SCROLL:\"scroll\"};return function i(t,e){function n(t){if(\"none\"==window.getComputedStyle(t).display)return!1;var e=r(t);if(\"function\"==typeof ShadowRoot&&e instanceof ShadowRoot){if(e.host.shadowRoot!==e)return!1;e=e.host}return!(!e||e.nodeType!=Node.DOCUMENT_NODE&&e.nodeType!=Node.DOCUMENT_FRAGMENT_NODE)||!(e&&e.tagName&&\"DETAILS\"==e.tagName.toUpperCase()&&!e.open&&\"SUMMARY\"!=t.tagName)&&(e&&n(e))}return d(t,!!e,n)}})()).apply(null, arguments)","args":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_2"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"5090"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":true} 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> GET session/5529b5c8332632b101134ec637e9c956/element/5DEED0BCF704B585281ED1E6435FFE2F_element_2/text 
intercepted https://fakerapizzz.it/api/v1/companies?_quantity=5 with: my mocked response
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket -> {:method=>"Fetch.fulfillRequest", :params=>{:requestId=>"interception-job-1.0", :responseHeaders=>[], :body=>"bXkgbW9ja2VkIHJlc3BvbnNl"}, :sessionId=>"79FA47BFE5DA0E99E447233B4090F6BC", :id=>8} 
2023-05-15 16:54:19 DEBUG Selenium [:bidi] WebSocket <- {"id"=>8, "error"=>{"code"=>-32602, "message"=>"Invalid parameters", "data"=>"Failed to deserialize params.responseCode - BINDINGS: mandatory field missing at position 95"}, "sessionId"=>"79FA47BFE5DA0E99E447233B4090F6BC"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["45"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":"Request1 Request2\nRequest Kitsch"} 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/elements 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/elements | {"using":"xpath","value":"/html"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"33"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["96"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_2"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:script] Using script for :isDisplayed 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/execute/sync 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/execute/sync | {"script":"/* isDisplayed */return ((function(){function d(t,e,n){function r(t){var e=x(t);if(0<e.height&&0<e.width)return!0;if(\"PATH\"==t.tagName.toUpperCase()&&(0<e.height||0<e.width)){var n=window.getComputedStyle(t)[\"stroke-width\"];return!!n&&0<parseInt(n,10)}return\"hidden\"!=window.getComputedStyle(t).overflow&&Array.prototype.slice.call(t.childNodes).some(function(t){return t.nodeType==Node.TEXT_NODE||t.nodeType==Node.ELEMENT_NODE&&r(t)})}function i(t){return C(t)==T.HIDDEN&&Array.prototype.slice.call(t.childNodes).every(function(t){return t.nodeType!=Node.ELEMENT_NODE||i(t)||!r(t)})}var o=t.tagName.toUpperCase();if(\"BODY\"==o)return!0;if(\"OPTION\"==o||\"OPTGROUP\"==o){var a=c(t,function(t){return\"SELECT\"==t.tagName.toUpperCase()});return!!a&&d(a,!0,n)}var u=s(t);if(u)return!!u.image&&0<u.rect.width&&0<u.rect.height&&d(u.image,e,n);if(\"INPUT\"==o&&\"hidden\"==t.type.toLowerCase())return!1;if(\"NOSCRIPT\"==o)return!1;var l=window.getComputedStyle(t).visibility;return\"collapse\"!=l&&\"hidden\"!=l&&(!!n(t)&&(!(!e&&0==f(t))&&(!!r(t)&&!i(t))))}function E(t){var e=x(t);return{left:e.left,right:e.left+e.width,top:e.top,bottom:e.top+e.height}}function D(t){return t.parentElement}function C(t){function e(t){function e(t){if(t==u)return!0;var e=window.getComputedStyle(t),n=e.display;return 0!=n.indexOf(\"inline\")&&\"contents\"!=n&&(\"absolute\"!=r||\"static\"!=e.position)}var r=window.getComputedStyle(t).position;if(\"fixed\"==r)return i=!0,t==u?null:u;for(var n=D(t);n&&!e(n);)n=D(n);return n}function n(t){var e=t;if(\"visible\"==d)if(t==u&&l)e=l;else if(t==l)return{x:\"visible\",y:\"visible\"};var n=window.getComputedStyle(e),r={x:n[\"overflow-x\"],y:n[\"overflow-y\"]};return t==u&&(r.x=\"visible\"==r.x?\"auto\":r.x,r.y=\"visible\"==r.y?\"auto\":r.y),r}function r(t){return t==u?{x:window.scrollX,y:window.scrollY}:{x:t.scrollLeft,y:t.scrollTop}}for(var i,o=E(t),a=t.ownerDocument,u=a.documentElement,l=a.body,d=window.getComputedStyle(u).overflow,f=e(t);f;f=e(f)){var h=n(f);if(\"visible\"!=h.x||\"visible\"!=h.y){var s=x(f);if(0==s.width||0==s.height)return T.HIDDEN;var p=o.right<s.left,c=o.bottom<s.top;if(p&&\"hidden\"==h.x||c&&\"hidden\"==h.y)return T.HIDDEN;if(p&&\"visible\"!=h.x||c&&\"visible\"!=h.y){var v=r(f),g=o.right<s.left-v.x,w=o.bottom<s.top-v.y;return g&&\"visible\"!=h.x||w&&\"visible\"!=h.x?T.HIDDEN:C(f)==T.HIDDEN?T.HIDDEN:T.SCROLL}var N=o.left>=s.left+s.width,m=o.top>=s.top+s.height;if(N&&\"hidden\"==h.x||m&&\"hidden\"==h.y)return T.HIDDEN;if(N&&\"visible\"!=h.x||m&&\"visible\"!=h.y){if(i){var y=r(f);if(o.left>=u.scrollWidth-y.x||o.right>=u.scrollHeight-y.y)return T.HIDDEN}return C(f)==T.HIDDEN?T.HIDDEN:T.SCROLL}}}return T.NONE}function o(t){var e=t.document.documentElement;return{width:e.clientWidth,height:e.clientHeight}}function p(t,e,n,r){return{left:t,top:e,width:n,height:r}}function x(t){var e,n=s(t);if(n)return n.rect;if(\"HTML\"==t.tagName.toUpperCase()){t.ownerDocument;var r=o(window);return p(0,0,r.width,r.height)}try{e=t.getBoundingClientRect()}catch(i){return p(0,0,0,0)}return p(e.left,e.top,e.right-e.left,e.bottom-e.top)}function f(t){var e=1,n=window.getComputedStyle(t).opacity;n&&(e=Number(n));var r=D(t);return r&&r.nodeType==Node.ELEMENT_NODE&&(e*=f(r)),e}function h(t){var e=t.shape.toLowerCase(),n=t.coords.split(\",\");if(\"rect\"==e&&4==n.length){var r=n[0],i=n[1];return p(r,i,n[2]-r,n[3]-i)}if(\"circle\"==e&&3==n.length){var o=n[0],a=n[1],u=n[2];return p(o-u,a-u,2*u,2*u)}if(\"poly\"==e&&2<n.length){for(var l=n[0],d=n[1],f=l,h=d,s=2;s+1<n.length;s+=2)l=Math.min(l,n[s]),f=Math.max(f,n[s]),d=Math.min(d,n[s+1]),h=Math.max(h,n[s+1]);return p(l,d,f-l,h-d)}return p(0,0,0,0)}function s(t){var e=t.tagName.toUpperCase(),n=\"MAP\"==e;if(!n&&\"AREA\"!=e)return null;var r=n?t:\"MAP\"==D(t).tagName.toUpperCase()?D(t):null,i=null,o=null;if(r&&r.name&&((i=r.ownerDocument.querySelector(\"*[usemap='#\"+r.name+\"']\"))&&(o=x(i),!n&&\"default\"!=t.shape.toLowerCase()))){var a=h(t),u=Math.min(Math.max(a.left,0),o.width),l=Math.min(Math.max(a.top,0),o.height),d=Math.min(a.width,o.width-u),f=Math.min(a.height,o.height-l);o=p(u+o.left,l+o.top,d,f)}return{image:i,rect:o||p(0,0,0,0)}}function c(t,e){for(t&&(t=D(t));t;){if(e(t))return t;t=D(t)}return null}function r(t){var e=t.parentNode;if(e&&e.shadowRoot&&t.assignedSlot!==undefined)return t.assignedSlot?t.assignedSlot.parentNode:null;if(t.getDestinationInsertionPoints){var n=t.getDestinationInsertionPoints();if(0<n.length)return n[n.length-1]}return e}var T={NONE:\"none\",HIDDEN:\"hidden\",SCROLL:\"scroll\"};return function i(t,e){function n(t){if(\"none\"==window.getComputedStyle(t).display)return!1;var e=r(t);if(\"function\"==typeof ShadowRoot&&e instanceof ShadowRoot){if(e.host.shadowRoot!==e)return!1;e=e.host}return!(!e||e.nodeType!=Node.DOCUMENT_NODE&&e.nodeType!=Node.DOCUMENT_FRAGMENT_NODE)||!(e&&e.tagName&&\"DETAILS\"==e.tagName.toUpperCase()&&!e.open&&\"SUMMARY\"!=t.tagName)&&(e&&n(e))}return d(t,!!e,n)}})()).apply(null, arguments)","args":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_2"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"5090"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":true} 
2023-05-15 16:54:19 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/execute/sync 
2023-05-15 16:54:19 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/execute/sync | {"script":"return arguments[0].textContent","args":[{"element-6066-11e4-a52e-4f735466cecf":"5DEED0BCF704B585281ED1E6435FFE2F_element_2"}]} 
2023-05-15 16:54:19 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"138"} 
2023-05-15 16:54:19 DEBUG Selenium [:header]    <<<  {"content-length"=>["1683"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:19 DEBUG Selenium [:command] <- {"value":".turbo-progress-bar {\n  position: fixed;\n  display: block;\n  top: 0;\n  left: 0;\n  height: 3px;\n  background: #0076ff;\n  z-index: 2147483647;\n  transition:\n    width 300ms ease-out,\n    opacity 150ms 150ms ease-in;\n  transform: translate3d(0, 0, 0);\n}\n\n    Intercepted\n    \n    \n    \n\n    \n    {\n  \"imports\": {\n    \"application\": \"/assets/application-bffc7c61d63bb168ee3e1ba1adad1b44492e3d816031bba5d3e851fcd6549eda.js\",\n    \"@hotwired/turbo-rails\": \"/assets/turbo.min-f309baafa3ae5ad6ccee3e7362118b87678d792db8e8ab466c4fa284dd3a4700.js\",\n    \"@hotwired/stimulus\": \"/assets/stimulus.min-d03cf1dff41d6c5698ec2c5d6a501615a7a33754dbeef8d1edd31c928d17c652.js\",\n    \"@hotwired/stimulus-loading\": \"/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js\",\n    \"controllers/application\": \"/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js\",\n    \"controllers/hello_controller\": \"/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js\",\n    \"controllers\": \"/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js\"\n  }\n}\n\n\n\n\n\nimport \"application\"\n  \n\n  \n    \n  function callKitch(e) {\n      e.preventDefault()\n      console.log('calling kitsch')\n      const responseDiv = document.getElementById(\"kitsch-response\");\n      fetch('http://kitschmaster.com/')\n           .then((response) => response.text())\n           .then((text) => (responseDiv.innerHTML = text));\n  }\n\n\nRequest1\nRequest2\n\n\nRequest Kitsch\n\n\n\n  \n\n"} 
#<Thread:0x00007f892fee0e98 /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/common/websocket_connection.rb:121 run> terminated with exception (report_on_exception is true):
/Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools.rb:49:in `send_cmd': -32602: Invalid parameters: Failed to deserialize params.responseCode - BINDINGS: mandatory field missing at position 95 (Selenium::WebDriver::Error::WebDriverError)
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-devtools-0.113.0/lib/selenium/devtools/v113/fetch.rb:56:in `fulfill_request'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:145:in `mutate_response'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:123:in `intercept_response'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:84:in `block in request_paused'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:162:in `with_cancellable_request'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:81:in `request_paused'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:48:in `block in intercept'
    from /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/common/websocket_connection.rb:131:in `block in callback_thread'
2023-05-15 16:54:19 DEBUG Selenium [:command] -> GET session/5529b5c8332632b101134ec637e9c956/screenshot 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["40968"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":"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P33zzTfy8fGRJKWnp+vYsWO1XPXtJzc3V2PHjtWQIUOUk5NT2+XcFOW9a82bN1eXLl30r3/9S08++aQxfvfu3bVY7e3lypUrWrt2rSSpVatWWrhwoZo1a2bc79Spk8LDw43zyMjIX71GAAAAAAAAAAAAAACAG+FQ2wXYomHDhho6dKhmz54tSfr222/1wgsvWB174cIFpaam6tChQ3Jzc1P79u3l6elZaeeny5cva+/evcrKylKLFi10//33q0mTJsrLy9PZs2clSR4eHrK3L8mwmUwmnT9/Xvb29vLw8LC65vnz52UymSzmllVYWKiMjAz99NNPMplM8vf3V9u2beXs7FxhvdnZ2UpNTVVmZqYaNmyoe+65R76+vmrQoIHZuLNnzyovL884z8nJUVZWlhE8KvX73//eqFWS+vTpo5iYmApruB0NHz5cGzZskCTFxsaWuxVjfn6+Dh8+rIMHD6p+/fry9/eXr6+vHBwq/okVFhZq3759Onr0qJycnPSHP/xBnp6eKiws1KlTpyRJd911l/F/NJlMunDhguzt7eXu7m51zQsXLhj/O3d393Lfs8zMTB04cECXLl3SPffcozZt2lT6nl26dEkHDhxQRkaGpJLwVOvWrdWoUSOzcefOnTN7z86cOaPjx4/L0dFRzZo10759+4x7w4YNU/369S0+y8fHRw888IASEhKUkJCgwsJC1atXr8L6AAAAAAAAAAAAAAAAfm11MoAlyQhBSdLVq1ct7l+8eFFTpkzRqlWrLO516NBBn3zyidq1a2d17UWLFmnWrFlmASRJCg4OVmBgoIKDgyVJGRkZRvBkzZo1ev311yVJe/bsUdu2bS3W/eCDD/TRRx9ZzC0VExOjMWPGWO049eabb2rChAkWgZ68vDyNHz9eX3zxhdVnmTFjhsaOHWvMmzRpktatW2fc3759uzp16iRJOn36tBwdHSXJePaAgAAtXLhQmZmZv8kA1vnz543j/Px8i/uFhYVasmSJ3nnnHYt7Li4umj9/vv74xz9aXfvbb7/V5MmTjTBTqYCAAP3tb3/TI488IklasWKFcfzll1/qr3/9q6SS/52/v7/FuvPnz9fHH38sSTp48KAaNmxodn/79u167bXXdObMGYu5kyZNMntfygoLC1NoaKjVZxk8eLDeeecdNW7cWJI0bdo0RUVFGfd37typLl26SCrp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REREGN9V3759FRoaatYtCyXGjRtntn2lJH322WeaNGmSJGns2LGqX7++nnjiCYu5ZQNY0dHRio6OrvTzMjMz1bZtWyPAV3ZLw+u1aNHihp7hRh07dsw4PnDggFmgrzxl38158+apsLBQ33zzjXFt69atxjaB7dq109tvv62ePXvaVN8vv/yiP//5z9q5c6ekknDaypUra7zjHAAAAAAAAAAAAAAAQE275QJY1jg6OiosLEyXL19WZGSkTCaTnnvuOW3bts3q1m+lBg0adMOf4ezsbBwXFxdXWIutCgsLLa6V3TLw3nvvVevWrStdp02bNsaxj4+PYmNjFR0drS1btmjDhg3G1niStGXLFn3//feKioqyur0hzL3wwgu6evWqpk2bJkl6+eWXtXXrVrVv395sXNn/28MPP1zhe1iqadOmkqSGDRvKZDJZfR9KVWfLvbK1lSr7WZ06dbIaXrzePffcYxw7Oztr8eLFiouL09atWxUdHW3WVevAgQMaOnSo5s6dq2HDhlWp3lOnTul//ud/jFCYu7u7Vq9eLT8/vyqtAwAAAAAAAAAAAAAAUBvqRABLkurVq6d58+Zp7969OnHihH7++WeNHj1aERERZtsFtmnTxujcs3DhQjk5Od3Q+mUDNGW7BV3v+PHjla517do1q9fPnz9vcc3b29s4fvLJJzVx4sRK17+es7OzBg4cqIEDByosLEzJycnavn27lixZopycHJlMJi1btowA1g0aMWKEvvvuO6Pb04svvqht27apcePGxhhfX1/jeNy4ceratesNr9+2bVudPHnSbLvM6506dcrq9bLvelXes5YtWxrHTzzxhMaPH3+j5Rrs7e3VvXt3de/eXW+//bYOHz6s3bt36/PPPze2bvzwww+rFMDKzMzU008/rZMnT0qSOnfurPDwcDVr1qzK9QEAAAAAAAAAAAAAANQG+9ouoCoaN26sBQsWGOebN2/W2rVrzcaU7doTFxdX7lp/+ctfNHbsWM2ZM0cFBQWqV6+e/P39JUk7d+406yJV1u7du61eL9sZ6+LFi1bHJCYmWlwrG+Qp3c7Nmj179uill17Sm2++qT179kiSPv/8c40fP15DhgzRlStXJJV0Trr//vs1adIkbd682Zhf9risirp9/VbZ2dkpJCRELi4ukqSTJ0/q3XffNRtT9v9W3jshScuXL9eYMWM0e/ZsZWVlSZJZZydr74QkY5vC65XtjPXLL79YHbNv3z6La2W3oNy+fXu59cbHx+uVV17RzJkzFR8fL0n697//rbfeekvPP/+82RafrVu31ksvvaTIyEgjSHjy5EmzzlilrL1n58+fNwtfBQUF6YsvviB8BQAAAAAAAAAAAAAA6pQ6FcCSpN69e2v48OHG+cSJE3XmzBnjvE+fPsbx5MmTlZ+fb7HGhg0bFB4eroiICH333XdGqOX555+XJJlMJi1atMhiXmxsbLlhmyZNmhjHERERFveXLVum1NRUi+t33nmn0T0pPj5e69atsxhz5coVTZs2TevXr9fChQuNLkhxcXFasWKFYmJitHLlSot5d9xxh3F8/XZupeGic+fOWX2e37pmzZopJCTEOF+1apW+//574/y+++4zvsMPP/zQaugoKytLU6dOVVRUlMLDw4135KmnnjLGzJ0712IrwnPnzumf//yn1brKvmeff/65xf2VK1da7azVtGlTPfDAA5JKwl1RUVEWY/Lz8/XOO+9o06ZNWrx4sfGeHT9+XP/6178UGxurDz/80GKeg4ODfve73xnnrq6uxnFF71loaKgRvurfv78WL15sthUoAAAAAAAAAAAAAABAXVDnAliSNHPmTCPYYTKZNG3aNONe79691b9/f0lSamqqgoKClJCQoPz8fKWlpSksLEwvvviiMX7cuHHG8ejRo+Xh4SFJmjVrlkJCQpSdna3Lly9r3bp1GjBgQLk1PfTQQ8bxmjVrNGfOHB04cEDJycmaO3euXnvttXLnhoaGGscjR47UvHnzjM/dvHmzhg0bZnRKCggIULdu3SRJgwYNMvtOFixYoLS0NBUXFysjI0Ovv/66cb9s6Ef675aLMTExCg8P14YNG8rd0u63atCgQerdu7dx/vrrrysvL0+SdNddd2nKlCnGvb59++rrr7/WL7/8otOnT+vzzz/Xs88+a9wfMWKE8c4GBATomWeekVQS6gsODtbhw4d17do1JSYmasCAAeV2YCv930vSF198ob///e86ePCgfvjhB82bN0+TJ08u93nKdvEaM2aMFixYoNOnT+vy5cvaunWrRowYYWwl2LlzZ3Xp0kWS9MgjjxjzNm3apJCQECUkJKigoEAXLlzQvHnzdODAAUklXazKBv8aNmwoSdqxY4dWrFihr7/+WteuXVNSUpKWL19u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AGAjAlgAAAAAAAAAAAAAAAAAYCMCWAAAAAAAAAAAAAAAAABgIwJYAAAAAAAAAAAAAAAAAGAjAlgAAAAAAAAAAAAAAAAAYCMCWAAAAAAAAAAAAAAAAABgIwJYAAAAAAAAAAAAAAAAAGAjAlgAAAAAAAAAAAAAAAAAYCMCWAAAAAAAAAAAAAAAAABgIwJYAAAAAAAAAAAAAAAAAGAjAlgAAAAAAAAAAAAAAAAAYCMCWAAAAAAAAAAAAAAAAABgIwJYAAAAAAAAAAAAAAAAAGAjAlgAAAAAAAAAAAAAAAAAYCMCWAAAAAAAAAAAAAAAAABgIwJYAAAAAAAAAAAAAAAA/8+uHQsAAAAADPK3nsPu4ghgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAA8dKGYAAAIABJREFUAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAAJgELAAAAAAAAAABgErAAAAAAAAAAAAAmAQsAAAAAAAAAAGASsAAAAAAAAAAAACYBCwAAAAAAAAAAYBKwAAAAAAAAAAAApti1YwEAAACAQf7Wc9hdHAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABQAAAAAAAAAAMAlYAAAAAAAAAAAAk4AFAAAAAAAAAAAwCVgAAAAAAAAAAACTgAUAAAAAAAAAADAJWAAAAAAAAAAAAJOABRC7diwAAAAAMMjfeg67iyMAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAACmRBFmAAAWY0lEQVQAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAAAAAAAAAAJgELAAAAAAAAAAAgEnAAgAAAAAAAAAAmAQsAAAAAAAAAACAScACAAAAAAAAAACYBCwAAAAAAAAAAIBJwAIAoHbtWAAAAABgkL/1HHYXRwAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAIWAAAAAAAAAADAJGABAAAAAAAAAABMAhYAAAAAAAAAAMAkYAEAAAAAAAAAAEwCFgAAAAAAAAAAwCRgAQAAAAAAAAAATAE3+kdnoYpzNQAAAABJRU5ErkJggg=="} 
[Screenshot Image]: /Users/mihael/NadineWest/intercepted/tmp/screenshots/failures_test_Non_existent_URL_intercept.png
2023-05-15 16:54:20 DEBUG Selenium [:command] -> GET session/5529b5c8332632b101134ec637e9c956/window/handles 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["46"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":["7E3C57C2451D4D230718C752DC1F9D03"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/window 
2023-05-15 16:54:20 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/window | {"handle":"7E3C57C2451D4D230718C752DC1F9D03"} 
2023-05-15 16:54:20 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"45"} 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":null} 
2023-05-15 16:54:20 DEBUG Selenium [:command] -> GET session/5529b5c8332632b101134ec637e9c956/window/handles 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["46"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":["7E3C57C2451D4D230718C752DC1F9D03"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/url 
2023-05-15 16:54:20 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/url | {"url":"about:blank"} 
2023-05-15 16:54:20 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"21"} 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":null} 
2023-05-15 16:54:20 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/elements 
2023-05-15 16:54:20 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/elements | {"using":"xpath","value":"/html/body/*"} 
2023-05-15 16:54:20 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"40"} 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["12"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":[]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] -> POST session/5529b5c8332632b101134ec637e9c956/goog/cdp/execute 
2023-05-15 16:54:20 DEBUG Selenium [:command]    >>> http://127.0.0.1:9517/session/5529b5c8332632b101134ec637e9c956/goog/cdp/execute | {"cmd":"Storage.clearDataForOrigin","params":{"origin":"*","storageTypes":"cookies,local_storage"}} 
2023-05-15 16:54:20 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.9.1 (ruby macosx)", "Content-Length"=>"99"} 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["12"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":{}} 
E

Error:
IndexTest#test_Non_existent_URL_intercept:
Selenium::WebDriver::Error::WebDriverError: -32602: Invalid parameters: Failed to deserialize params.responseCode - BINDINGS: mandatory field missing at position 95
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools.rb:49:in `send_cmd'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-devtools-0.113.0/lib/selenium/devtools/v113/fetch.rb:56:in `fulfill_request'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:145:in `mutate_response'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:123:in `intercept_response'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:84:in `block in request_paused'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:162:in `with_cancellable_request'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:81:in `request_paused'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/devtools/network_interceptor.rb:48:in `block in intercept'
    /Users/mihael/.rvm/gems/ruby-3.0.1/gems/selenium-webdriver-4.9.1/lib/selenium/webdriver/common/websocket_connection.rb:131:in `block in callback_thread'

rails test test/system/swapi_test.rb:18

Finished in 7.605741s, 0.1315 runs/s, 0.1315 assertions/s.
1 runs, 1 assertions, 0 failures, 1 errors, 0 skips
2023-05-15 16:54:20 DEBUG Selenium [:command] -> DELETE session/5529b5c8332632b101134ec637e9c956 
2023-05-15 16:54:20 DEBUG Selenium [:header]    <<<  {"content-length"=>["14"], "content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"]} 
2023-05-15 16:54:20 DEBUG Selenium [:command] <- {"value":null} 
2023-05-15 16:54:20 DEBUG Selenium [:process] Checking if 52344 is exited: 
2023-05-15 16:54:20 DEBUG Selenium [:process] Polling 20 seconds for exit of 52344 
2023-05-15 16:54:20 DEBUG Selenium [:process] Checking if 52344 is exited: 
2023-05-15 16:54:20 DEBUG Selenium [:process] Checking if 52344 is exited: 
2023-05-15 16:54:20 DEBUG Selenium [:process]   -> exit code is 0 
2023-05-15 16:54:20 DEBUG Selenium [:process] Checking if 52344 is exited: 
2023-05-15 16:54:20 DEBUG Selenium [:process]   -> exit code is 0 
2023-05-15 16:54:20 DEBUG Selenium [:process] Checking if 52344 is exited: 
2023-05-15 16:54:20 DEBUG Selenium [:process]   -> exit code is 0 
2023-05-15 16:54:20 DEBUG Selenium [:process] Checking if 52344 is exited: 
2023-05-15 16:54:20 DEBUG Selenium [:process]   -> exit code is 0 
2023-05-15 16:54:20 DEBUG Selenium [:process] Checking if 52344 is exited: 
2023-05-15 16:54:20 DEBUG Selenium [:process]   -> exit code is 0
titusfortner commented 1 year ago

@p0deje do you see what's going on with this?

p0deje commented 1 year ago

I just tried running the reproduction test case, but I don't see any errors raised from the DevTools thread. I get failures in the tests because likely some requests/response are not mocked, but nothing like what's being reported:

Failure:
IndexTest#test_The_Star_Wars_API_request [/Users/p0deje/Development/intercepted/test/system/swapi_test.rb:13]:
expected to find text "my mocked response" in "Request1 Request2\nRequest Kitsch"

The test also hangs, does it make sense @mihael?

mihael commented 1 year ago

Thanks for checking @p0deje

Not sure why it's hanging, it only hangs when running the whole example file. I think we can ignore this.

Can you please try running each example separately, like this:

First example should pass (all good, intercepted a valid and existing URL request, the URL is reachable):

bin/rails test test/system/swapi_test.rb:8

Second one should not pass (demonstrating issue 1: mocking an URL that is not reachable will hit the remote URL and fail):

bin/rails test test/system/swapi_test.rb:18

Third one should not pass (demonstrating issue 2: mocking an URL that is protected by CORS):

bin/rails test test/system/swapi_test.rb:29
p0deje commented 1 year ago

Second one should not pass (demonstrating issue 1: mocking an URL that is not reachable will hit the remote URL and fail):

Even though the error is cryptic - it actually makes sense. Since the URL is not reachable and fails on DNS resolution - there is no response code that can be provided for a mock. You should take care of setting a response code manually in this case. The following fix the test:

diff --git a/lib/interceptor.rb b/lib/interceptor.rb
index 90bface..00108de 100644
--- a/lib/interceptor.rb
+++ b/lib/interceptor.rb
@@ -23,6 +23,7 @@ def start_intercepting
         # set mocked body if there's an interception for the url and method
         continue.call(request) do |response|
           puts "intercepted #{url} with: #{interception[:response]}"
+          response.code ||= 200
           response.body = interception[:response]
         end
       elsif allowed_request?(url, method)

Third one should not pass (demonstrating issue 2: mocking an URL that is protected by CORS):

Likewise, since you only change the body and response is missing necessary CORS headers, you need to provide them manually:

diff --git a/lib/interceptor.rb b/lib/interceptor.rb
index 90bface..2aa61b1 100644
--- a/lib/interceptor.rb
+++ b/lib/interceptor.rb
@@ -23,6 +23,7 @@ def start_intercepting
         # set mocked body if there's an interception for the url and method
         continue.call(request) do |response|
           puts "intercepted #{url} with: #{interception[:response]}"
+          response.headers['Access-Control-Allow-Origin'] = '*'
           response.body = interception[:response]
         end
       elsif allowed_request?(url, method)
mihael commented 1 year ago

@p0deje fantastic! Thank you very much for the fix examples!

I'll close this, as it's not a bug and the feature works as expected, it was just my blindness... 👍🏻

github-actions[bot] commented 10 months ago

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.