From 4092cfdab85d9fdb2c64d22175a191db20af82ef Mon Sep 17 00:00:00 2001 From: TamsilAmani Date: Tue, 20 Jun 2023 03:03:25 +0530 Subject: [PATCH 1/7] [rb][bidi] network module events --- rb/lib/selenium/webdriver/bidi.rb | 1 + .../webdriver/bidi/network_inspector.rb | 60 +++++++++++++++++ .../webdriver/bidi/network_inspector_spec.rb | 66 +++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 rb/lib/selenium/webdriver/bidi/network_inspector.rb create mode 100644 rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb diff --git a/rb/lib/selenium/webdriver/bidi.rb b/rb/lib/selenium/webdriver/bidi.rb index 21a78b0361a4e..ec7f4e3c5fae2 100644 --- a/rb/lib/selenium/webdriver/bidi.rb +++ b/rb/lib/selenium/webdriver/bidi.rb @@ -23,6 +23,7 @@ class BiDi autoload :Session, 'selenium/webdriver/bidi/session' autoload :LogInspector, 'selenium/webdriver/bidi/log_inspector' autoload :BrowsingContext, 'selenium/webdriver/bidi/browsing_context' + autoload :NetworkInspector, 'selenium/webdriver/bidi/network_inspector' def initialize(url:) @ws = WebSocketConnection.new(url: url) diff --git a/rb/lib/selenium/webdriver/bidi/network_inspector.rb b/rb/lib/selenium/webdriver/bidi/network_inspector.rb new file mode 100644 index 0000000000000..7158231dab659 --- /dev/null +++ b/rb/lib/selenium/webdriver/bidi/network_inspector.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +module Selenium + module WebDriver + class BiDi + class NetworkInspector + EVENTS = { + before_request_sent: 'beforeRequestSent', + fetch_error: 'fetchError', + response_completed: 'responseCompleted', + response_started: 'responseStarted' + }.freeze + + def initialize(driver, browsing_context_ids = nil) + unless driver.capabilities.web_socket_url + raise Error::WebDriverError, + 'WebDriver instance must support BiDi protocol' + end + + @bidi = driver.bidi + @bidi.session.subscribe('network.beforeRequestSent', browsing_context_ids) + end + + def before_request_sent(&block) + on(:before_request_sent) do |params| + before_request_sent_event(params, &block) + end + end + + private + + def on(event, &block) + event = EVENTS[event] if event.is_a?(Symbol) + @bidi.callbacks["network.#{event}"] << block + end + + def before_request_sent_event(params) + yield(params) + end + end # NetworkInspector + end # Bidi + end # WebDriver +end # Selenium diff --git a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb new file mode 100644 index 0000000000000..2ac995b486339 --- /dev/null +++ b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +require_relative '../spec_helper' + +module Selenium + module WebDriver + class BiDi + describe NetworkInspector, only: {browser: %i[chrome edge firefox]} do + let(:empty_page) { '/bidi/emptyPage.html' } + let(:empty_text) { '/bidi/emptyText.txt' } + let(:redirected_http_equiv) { '/bidi/redirected_http_equiv.html' } + + it 'can listen to event before request is sent' do + reset_driver!(web_socket_url: true) do |driver| + before_request_event = [] + inspector = described_class.new(driver) + inspector.before_request_sent { |event| before_request_event.push(event) } + + driver.navigate.to url_for(empty_page) + + wait.until { !before_request_event.nil? } + + expect(before_request_event[0].dig('request', 'method')).to eq 'GET' + url = before_request_event[0].dig('request', 'url') + expect(url).to eq driver.current_url + end + end + + it 'can request cookies' do + reset_driver!(web_socket_url: true) do |driver| + before_request_event = [] + inspector = described_class.new(driver) + inspector.before_request_sent { |event| before_request_event.push(event) } + + driver.navigate.to url_for(empty_text) + driver.manage.add_cookie name: 'north', + value: 'biryani' + driver.navigate.refresh + wait.until { !before_request_event.nil? } + + cookies = before_request_event[0]['request']['cookies'] + puts "cookies = \n", cookies # prints nil + expect(before_request_event[0].dig('request', 'method')).to eq 'GET' + end + end + end + end + end +end From aa93fe72a8d3b2600254470c4d14628279e04733 Mon Sep 17 00:00:00 2001 From: TamsilAmani Date: Tue, 20 Jun 2023 15:24:34 +0530 Subject: [PATCH 2/7] [rb][bidi] completed events with tests --- .../webdriver/bidi/network_inspector.rb | 18 ++- .../webdriver/bidi/network_inspector_spec.rb | 133 ++++++++++++++++-- 2 files changed, 134 insertions(+), 17 deletions(-) diff --git a/rb/lib/selenium/webdriver/bidi/network_inspector.rb b/rb/lib/selenium/webdriver/bidi/network_inspector.rb index 7158231dab659..0904e403af540 100644 --- a/rb/lib/selenium/webdriver/bidi/network_inspector.rb +++ b/rb/lib/selenium/webdriver/bidi/network_inspector.rb @@ -36,12 +36,20 @@ def initialize(driver, browsing_context_ids = nil) @bidi = driver.bidi @bidi.session.subscribe('network.beforeRequestSent', browsing_context_ids) + @bidi.session.subscribe('network.responseStarted', browsing_context_ids) + @bidi.session.subscribe('network.responseCompleted', browsing_context_ids) end def before_request_sent(&block) - on(:before_request_sent) do |params| - before_request_sent_event(params, &block) - end + on(:before_request_sent, &block) + end + + def response_started(&block) + on(:response_started, &block) + end + + def response_completed(&block) + on(:response_started, &block) end private @@ -50,10 +58,6 @@ def on(event, &block) event = EVENTS[event] if event.is_a?(Symbol) @bidi.callbacks["network.#{event}"] << block end - - def before_request_sent_event(params) - yield(params) - end end # NetworkInspector end # Bidi end # WebDriver diff --git a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb index 2ac995b486339..6773609f9d921 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb @@ -29,25 +29,23 @@ class BiDi it 'can listen to event before request is sent' do reset_driver!(web_socket_url: true) do |driver| - before_request_event = [] + before_request_event = nil inspector = described_class.new(driver) - inspector.before_request_sent { |event| before_request_event.push(event) } + inspector.before_request_sent { |event| before_request_event = event } driver.navigate.to url_for(empty_page) - wait.until { !before_request_event.nil? } - expect(before_request_event[0].dig('request', 'method')).to eq 'GET' - url = before_request_event[0].dig('request', 'url') - expect(url).to eq driver.current_url + expect(before_request_event.dig('request', 'method')).to eq 'GET' + expect(before_request_event.dig('request', 'url')).to eq driver.current_url end end it 'can request cookies' do reset_driver!(web_socket_url: true) do |driver| - before_request_event = [] + before_request_event = nil inspector = described_class.new(driver) - inspector.before_request_sent { |event| before_request_event.push(event) } + inspector.before_request_sent { |event| before_request_event = event } driver.navigate.to url_for(empty_text) driver.manage.add_cookie name: 'north', @@ -55,9 +53,124 @@ class BiDi driver.navigate.refresh wait.until { !before_request_event.nil? } - cookies = before_request_event[0]['request']['cookies'] - puts "cookies = \n", cookies # prints nil + expect(before_request_event.dig('request', 'method')).to eq 'GET' + expect(before_request_event.dig('request', 'url')).to eq driver.current_url + expect(before_request_event.dig('request', 'cookies', 0, 'name')).to eq 'north' + expect(before_request_event.dig('request', 'cookies', 0, 'value')).to eq 'biryani' + + driver.manage.add_cookie name: 'south', + value: 'dosa' + driver.navigate.refresh + wait.until { !before_request_event.nil? } + expect(before_request_event.dig('request', 'cookies', 1, 'name')).to eq 'south' + expect(before_request_event.dig('request', 'cookies', 1, 'value')).to eq 'dosa' + end + end + + it 'can redirect http equiv' do + reset_driver!(web_socket_url: true) do |driver| + before_request_event = [] + inspector = described_class.new(driver) + inspector.before_request_sent { |event| before_request_event.push(event) } + + driver.navigate.to url_for(redirected_http_equiv) + wait.until { driver.current_url.include? 'redirected.html' } + expect(before_request_event[0].dig('request', 'method')).to eq 'GET' + expect(before_request_event[0].dig('request', 'url')).to include 'redirected_http_equiv.html' + expect(before_request_event[2].dig('request', 'method')).to eq 'GET' + expect(before_request_event[2].dig('request', 'url')).to include 'redirected.html' + end + end + + it 'can subscribe to response started' do + reset_driver!(web_socket_url: true) do |driver| + on_response_started = [] + inspector = described_class.new(driver) + inspector.response_started { |event| on_response_started.push(event) } + + driver.navigate.to url_for(empty_text) + wait.until { !on_response_started.nil? } + + expect(on_response_started[0].dig('request', 'method')).to eq 'GET' + expect(on_response_started[0].dig('request', 'url')).to eq driver.current_url + expect(on_response_started[0].dig('response', 'url')).to eq driver.current_url + expect(on_response_started[0].dig('response', 'fromCache')).to be false + expect(on_response_started[0].dig('response', 'mimeType')).to include 'text/plain' + expect(on_response_started[0].dig('response', 'status')).to eq 200 + expect(on_response_started[0].dig('response', 'statusText')).to eq 'OK' + end + end + + it 'test response started mime type' do + reset_driver!(web_socket_url: true) do |driver| + on_response_started = [] + inspector = described_class.new(driver) + inspector.response_started { |event| on_response_started.push(event) } + + # Checking mime type for 'html' text + driver.navigate.to url_for(empty_page) + wait.until { !on_response_started.nil? } + + expect(on_response_started[0].dig('request', 'method')).to eq 'GET' + expect(on_response_started[0].dig('request', 'url')).to eq driver.current_url + expect(on_response_started[0].dig('response', 'url')).to eq driver.current_url + expect(on_response_started[0].dig('response', 'mimeType')).to include 'text/html' + + # Checking mime type for 'plain' text + on_response_started = [] + driver.navigate.to url_for(empty_text) + wait.until { !on_response_started.nil? } + expect(on_response_started[0].dig('request', 'method')).to eq 'GET' + expect(on_response_started[0].dig('request', 'url')).to eq driver.current_url + expect(on_response_started[0].dig('response', 'url')).to eq driver.current_url + expect(on_response_started[0].dig('response', 'mimeType')).to include 'text/plain' + end + end + + it 'can subscribe to response completed' do + reset_driver!(web_socket_url: true) do |driver| + on_response_completed = [] + inspector = described_class.new(driver) + inspector.response_completed { |event| on_response_completed.push(event) } + + driver.navigate.to url_for(empty_page) + wait.until { !on_response_completed.nil? } + + expect(on_response_completed[0].dig('request', 'method')).to eq 'GET' + expect(on_response_completed[0].dig('request', 'url')).to eq driver.current_url + expect(on_response_completed[0].dig('response', 'url')).to eq driver.current_url + expect(on_response_completed[0].dig('response', 'fromCache')).to be false + expect(on_response_completed[0].dig('response', 'mimeType')).to include 'text/html' + expect(on_response_completed[0].dig('response', 'status')).to eq 200 + expect(on_response_completed[0].dig('response', 'statusText')).to eq 'OK' + expect(on_response_completed[0]['redirectCount']).to eq 0 + end + end + + it 'test response completed mime type' do + reset_driver!(web_socket_url: true) do |driver| + on_response_completed = [] + inspector = described_class.new(driver) + inspector.response_completed { |event| on_response_completed.push(event) } + + # Checking mime type for 'html' text + driver.navigate.to url_for(empty_page) + wait.until { !on_response_completed.nil? } + + expect(on_response_completed[0].dig('request', 'method')).to eq 'GET' + expect(on_response_completed[0].dig('request', 'url')).to eq driver.current_url + expect(on_response_completed[0].dig('response', 'url')).to eq driver.current_url + expect(on_response_completed[0].dig('response', 'mimeType')).to include 'text/html' + + # Checking mime type for 'plain' text + on_response_completed = [] + driver.navigate.to url_for(empty_text) + wait.until { !on_response_completed.nil? } + expect(on_response_completed[0].dig('request', 'method')).to eq 'GET' + expect(on_response_completed[0].dig('request', 'url')).to eq driver.current_url + expect(on_response_completed[0].dig('response', 'url')).to eq driver.current_url + expect(on_response_completed[0].dig('response', 'mimeType')).to include 'text/plain' end end end From 071e22b555dc8013c673e69b9a288f9e8db981bb Mon Sep 17 00:00:00 2001 From: TamsilAmani Date: Tue, 20 Jun 2023 18:36:46 +0530 Subject: [PATCH 3/7] [rb][bidi] fix: empty array check --- .../webdriver/bidi/network_inspector_spec.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb index 6773609f9d921..d6e68a25daa4d 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb @@ -90,7 +90,7 @@ class BiDi inspector.response_started { |event| on_response_started.push(event) } driver.navigate.to url_for(empty_text) - wait.until { !on_response_started.nil? } + wait.until { !on_response_started.empty? } expect(on_response_started[0].dig('request', 'method')).to eq 'GET' expect(on_response_started[0].dig('request', 'url')).to eq driver.current_url @@ -110,7 +110,7 @@ class BiDi # Checking mime type for 'html' text driver.navigate.to url_for(empty_page) - wait.until { !on_response_started.nil? } + wait.until { !on_response_started.empty? } expect(on_response_started[0].dig('request', 'method')).to eq 'GET' expect(on_response_started[0].dig('request', 'url')).to eq driver.current_url @@ -120,7 +120,7 @@ class BiDi # Checking mime type for 'plain' text on_response_started = [] driver.navigate.to url_for(empty_text) - wait.until { !on_response_started.nil? } + wait.until { !on_response_started.empty? } expect(on_response_started[0].dig('request', 'method')).to eq 'GET' expect(on_response_started[0].dig('request', 'url')).to eq driver.current_url expect(on_response_started[0].dig('response', 'url')).to eq driver.current_url @@ -135,7 +135,7 @@ class BiDi inspector.response_completed { |event| on_response_completed.push(event) } driver.navigate.to url_for(empty_page) - wait.until { !on_response_completed.nil? } + wait.until { !on_response_completed.empty? } expect(on_response_completed[0].dig('request', 'method')).to eq 'GET' expect(on_response_completed[0].dig('request', 'url')).to eq driver.current_url @@ -156,7 +156,7 @@ class BiDi # Checking mime type for 'html' text driver.navigate.to url_for(empty_page) - wait.until { !on_response_completed.nil? } + wait.until { !on_response_completed.empty? } expect(on_response_completed[0].dig('request', 'method')).to eq 'GET' expect(on_response_completed[0].dig('request', 'url')).to eq driver.current_url @@ -166,7 +166,7 @@ class BiDi # Checking mime type for 'plain' text on_response_completed = [] driver.navigate.to url_for(empty_text) - wait.until { !on_response_completed.nil? } + wait.until { !on_response_completed.empty? } expect(on_response_completed[0].dig('request', 'method')).to eq 'GET' expect(on_response_completed[0].dig('request', 'url')).to eq driver.current_url expect(on_response_completed[0].dig('response', 'url')).to eq driver.current_url From 5e2d93a14e55232d94fbc94d5898ac3edf72477b Mon Sep 17 00:00:00 2001 From: TamsilAmani Date: Wed, 21 Jun 2023 13:52:13 +0530 Subject: [PATCH 4/7] [rb][bidi] fix: response_completed name --- rb/lib/selenium/webdriver/bidi/network_inspector.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rb/lib/selenium/webdriver/bidi/network_inspector.rb b/rb/lib/selenium/webdriver/bidi/network_inspector.rb index 0904e403af540..1a6f356137072 100644 --- a/rb/lib/selenium/webdriver/bidi/network_inspector.rb +++ b/rb/lib/selenium/webdriver/bidi/network_inspector.rb @@ -49,7 +49,7 @@ def response_started(&block) end def response_completed(&block) - on(:response_started, &block) + on(:response_completed, &block) end private From 211fd8a7c6101fffb8a7233e3a0e0a5c5fa9f041 Mon Sep 17 00:00:00 2001 From: TamsilAmani Date: Wed, 21 Jun 2023 20:35:42 +0530 Subject: [PATCH 5/7] [rb][bidi] fix: made tests compatible with chrome & firefox --- .../webdriver/bidi/network_inspector_spec.rb | 87 ++++++++++++------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb index d6e68a25daa4d..871b574d8f509 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb @@ -29,41 +29,45 @@ class BiDi it 'can listen to event before request is sent' do reset_driver!(web_socket_url: true) do |driver| - before_request_event = nil + before_request_event = [] inspector = described_class.new(driver) - inspector.before_request_sent { |event| before_request_event = event } + inspector.before_request_sent do |event| + before_request_event.push(event) if event.dig('request', 'url').include? 'emptyPage.html' + end driver.navigate.to url_for(empty_page) - wait.until { !before_request_event.nil? } + wait.until { !before_request_event.empty? } - expect(before_request_event.dig('request', 'method')).to eq 'GET' - expect(before_request_event.dig('request', 'url')).to eq driver.current_url + expect(before_request_event[0].dig('request', 'method')).to eq 'GET' + expect(before_request_event[0].dig('request', 'url')).to eq driver.current_url end end it 'can request cookies' do reset_driver!(web_socket_url: true) do |driver| - before_request_event = nil + before_request_event = [] inspector = described_class.new(driver) - inspector.before_request_sent { |event| before_request_event = event } + inspector.before_request_sent do |event| + before_request_event.push(event) if event.dig('request', 'url').include? 'emptyText.txt' + end driver.navigate.to url_for(empty_text) driver.manage.add_cookie name: 'north', value: 'biryani' driver.navigate.refresh - wait.until { !before_request_event.nil? } + wait.until { !before_request_event.empty? } - expect(before_request_event.dig('request', 'method')).to eq 'GET' - expect(before_request_event.dig('request', 'url')).to eq driver.current_url - expect(before_request_event.dig('request', 'cookies', 0, 'name')).to eq 'north' - expect(before_request_event.dig('request', 'cookies', 0, 'value')).to eq 'biryani' + expect(before_request_event[1].dig('request', 'method')).to eq 'GET' + expect(before_request_event[1].dig('request', 'url')).to eq driver.current_url + expect(before_request_event[1].dig('request', 'cookies', 0, 'name')).to eq 'north' + expect(before_request_event[1].dig('request', 'cookies', 0, 'value')).to eq 'biryani' driver.manage.add_cookie name: 'south', value: 'dosa' driver.navigate.refresh - wait.until { !before_request_event.nil? } - expect(before_request_event.dig('request', 'cookies', 1, 'name')).to eq 'south' - expect(before_request_event.dig('request', 'cookies', 1, 'value')).to eq 'dosa' + + expect(before_request_event[2].dig('request', 'cookies', 1, 'name')).to eq 'south' + expect(before_request_event[2].dig('request', 'cookies', 1, 'value')).to eq 'dosa' end end @@ -71,15 +75,20 @@ class BiDi reset_driver!(web_socket_url: true) do |driver| before_request_event = [] inspector = described_class.new(driver) - inspector.before_request_sent { |event| before_request_event.push(event) } + inspector.before_request_sent do |event| + if (event.dig('request', 'url').include? 'redirected_http_equiv.html') || + (event.dig('request', 'url').include? 'redirected.html') + before_request_event.push(event) + end + end driver.navigate.to url_for(redirected_http_equiv) wait.until { driver.current_url.include? 'redirected.html' } expect(before_request_event[0].dig('request', 'method')).to eq 'GET' expect(before_request_event[0].dig('request', 'url')).to include 'redirected_http_equiv.html' - expect(before_request_event[2].dig('request', 'method')).to eq 'GET' - expect(before_request_event[2].dig('request', 'url')).to include 'redirected.html' + expect(before_request_event[1].dig('request', 'method')).to eq 'GET' + expect(before_request_event[1].dig('request', 'url')).to include 'redirected.html' end end @@ -87,7 +96,9 @@ class BiDi reset_driver!(web_socket_url: true) do |driver| on_response_started = [] inspector = described_class.new(driver) - inspector.response_started { |event| on_response_started.push(event) } + inspector.response_started do |event| + on_response_started.push(event) if event.dig('request', 'url').include? 'emptyText.txt' + end driver.navigate.to url_for(empty_text) wait.until { !on_response_started.empty? } @@ -106,7 +117,12 @@ class BiDi reset_driver!(web_socket_url: true) do |driver| on_response_started = [] inspector = described_class.new(driver) - inspector.response_started { |event| on_response_started.push(event) } + inspector.response_started do |event| + if (event.dig('request', 'url').include? 'emptyPage.html') || + (event.dig('request', 'url').include? 'emptyText.txt') + on_response_started.push(event) + end + end # Checking mime type for 'html' text driver.navigate.to url_for(empty_page) @@ -118,13 +134,13 @@ class BiDi expect(on_response_started[0].dig('response', 'mimeType')).to include 'text/html' # Checking mime type for 'plain' text - on_response_started = [] driver.navigate.to url_for(empty_text) wait.until { !on_response_started.empty? } - expect(on_response_started[0].dig('request', 'method')).to eq 'GET' - expect(on_response_started[0].dig('request', 'url')).to eq driver.current_url - expect(on_response_started[0].dig('response', 'url')).to eq driver.current_url - expect(on_response_started[0].dig('response', 'mimeType')).to include 'text/plain' + + expect(on_response_started[1].dig('request', 'method')).to eq 'GET' + expect(on_response_started[1].dig('request', 'url')).to eq driver.current_url + expect(on_response_started[1].dig('response', 'url')).to eq driver.current_url + expect(on_response_started[1].dig('response', 'mimeType')).to include 'text/plain' end end @@ -132,7 +148,9 @@ class BiDi reset_driver!(web_socket_url: true) do |driver| on_response_completed = [] inspector = described_class.new(driver) - inspector.response_completed { |event| on_response_completed.push(event) } + inspector.response_completed do |event| + on_response_completed.push(event) if event.dig('request', 'url').include? 'emptyPage.html' + end driver.navigate.to url_for(empty_page) wait.until { !on_response_completed.empty? } @@ -152,7 +170,12 @@ class BiDi reset_driver!(web_socket_url: true) do |driver| on_response_completed = [] inspector = described_class.new(driver) - inspector.response_completed { |event| on_response_completed.push(event) } + inspector.response_completed do |event| + if (event.dig('request', 'url').include? 'emptyPage.html') || + (event.dig('request', 'url').include? 'emptyText.txt') + on_response_completed.push(event) + end + end # Checking mime type for 'html' text driver.navigate.to url_for(empty_page) @@ -164,13 +187,13 @@ class BiDi expect(on_response_completed[0].dig('response', 'mimeType')).to include 'text/html' # Checking mime type for 'plain' text - on_response_completed = [] driver.navigate.to url_for(empty_text) wait.until { !on_response_completed.empty? } - expect(on_response_completed[0].dig('request', 'method')).to eq 'GET' - expect(on_response_completed[0].dig('request', 'url')).to eq driver.current_url - expect(on_response_completed[0].dig('response', 'url')).to eq driver.current_url - expect(on_response_completed[0].dig('response', 'mimeType')).to include 'text/plain' + + expect(on_response_completed[1].dig('request', 'method')).to eq 'GET' + expect(on_response_completed[1].dig('request', 'url')).to eq driver.current_url + expect(on_response_completed[1].dig('response', 'url')).to eq driver.current_url + expect(on_response_completed[1].dig('response', 'mimeType')).to include 'text/plain' end end end From 25845b8dd38f68facf551ab931febf8209e523f3 Mon Sep 17 00:00:00 2001 From: TamsilAmani Date: Wed, 21 Jun 2023 21:03:37 +0530 Subject: [PATCH 6/7] [rb][bidi] fix: run tests only for firefox for now --- .../selenium/webdriver/bidi/network_inspector_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb index 871b574d8f509..455cceb047956 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/network_inspector_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver class BiDi - describe NetworkInspector, only: {browser: %i[chrome edge firefox]} do + describe NetworkInspector, only: {browser: %i[firefox]} do let(:empty_page) { '/bidi/emptyPage.html' } let(:empty_text) { '/bidi/emptyText.txt' } let(:redirected_http_equiv) { '/bidi/redirected_http_equiv.html' } From 260f048e2e29be62e05c8212e87a694c23d04daa Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Fri, 8 Nov 2024 05:53:06 +0700 Subject: [PATCH 7/7] Run format Signed-off-by: Viet Nguyen Duc --- rb/lib/selenium/webdriver/bidi/network_inspector.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rb/lib/selenium/webdriver/bidi/network_inspector.rb b/rb/lib/selenium/webdriver/bidi/network_inspector.rb index 1a6f356137072..22dc72ee971ff 100644 --- a/rb/lib/selenium/webdriver/bidi/network_inspector.rb +++ b/rb/lib/selenium/webdriver/bidi/network_inspector.rb @@ -40,16 +40,16 @@ def initialize(driver, browsing_context_ids = nil) @bidi.session.subscribe('network.responseCompleted', browsing_context_ids) end - def before_request_sent(&block) - on(:before_request_sent, &block) + def before_request_sent(&) + on(:before_request_sent, &) end - def response_started(&block) - on(:response_started, &block) + def response_started(&) + on(:response_started, &) end - def response_completed(&block) - on(:response_completed, &block) + def response_completed(&) + on(:response_completed, &) end private