From c583c9de68e69a9eb18c673ec00acb74e3e33c70 Mon Sep 17 00:00:00 2001 From: Derek Kniffin Date: Mon, 13 Apr 2020 10:15:13 -0400 Subject: [PATCH 1/2] Add Capybara::Apparition::NetworkTraffic::Request#finished? --- lib/capybara/apparition/network_traffic/request.rb | 9 +++++++++ lib/capybara/apparition/page.rb | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/lib/capybara/apparition/network_traffic/request.rb b/lib/capybara/apparition/network_traffic/request.rb index 57a8653..7e5eb69 100644 --- a/lib/capybara/apparition/network_traffic/request.rb +++ b/lib/capybara/apparition/network_traffic/request.rb @@ -10,6 +10,7 @@ def initialize(data, response_parts = []) @response_parts = response_parts @response = nil @blocked_params = nil + @finished = false end def response=(response) @@ -43,5 +44,13 @@ def blocked? def error response_parts.last&.error end + + def finished? + @finished + end + + def finish! + @finished = true + end end end diff --git a/lib/capybara/apparition/page.rb b/lib/capybara/apparition/page.rb index 1fb06af..9b1e6c3 100644 --- a/lib/capybara/apparition/page.rb +++ b/lib/capybara/apparition/page.rb @@ -552,6 +552,11 @@ def register_event_handlers end end + @session.on 'Network.loadingFinished' do |request_id:, **| + req = @network_traffic.find { |request| request.request_id == request_id } + req&.finish! + end + @session.on 'Network.loadingFailed' do |type:, request_id:, blocked_reason: nil, error_text: nil, **params| req = @network_traffic.find { |request| request.request_id == request_id } req&.blocked_params = params if blocked_reason From a7d79ae6dc290d5d495dbee451efc388b73aaa97 Mon Sep 17 00:00:00 2001 From: Derek Kniffin Date: Mon, 20 Apr 2020 10:33:15 -0400 Subject: [PATCH 2/2] Add a spec for Request#finished? --- spec/integration/driver_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/integration/driver_spec.rb b/spec/integration/driver_spec.rb index ede4dcc..72963ca 100644 --- a/spec/integration/driver_spec.rb +++ b/spec/integration/driver_spec.rb @@ -781,6 +781,14 @@ def create_screenshot(file, *args) expect(@driver.network_traffic(:blocked).length).to eq(0) end + + it 'keeps track of whether network traffic is finished' do + @driver.clear_network_traffic + @session.visit('/apparition/with_js') + expect(@driver.network_traffic.last).not_to be_finished + sleep 1 + expect(@driver.network_traffic.last).to be_finished + end end context 'memory cache clearing' do