Skip to content

Commit 7ef9d83

Browse files
committed
Add response handler
1 parent 19b7b5d commit 7ef9d83

File tree

6 files changed

+80
-12
lines changed

6 files changed

+80
-12
lines changed

rb/lib/selenium/webdriver/bidi/network.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,18 @@ def continue_with_request(**args)
7272
)
7373
end
7474

75+
def continue_with_response(**args)
76+
@bidi.send_cmd(
77+
'network.continueWithResponse',
78+
response: args[:response_id],
79+
'body' => args[:body],
80+
'cookies' => args[:cookies],
81+
'credentials' => args[:credentials],
82+
'headers' => args[:headers],
83+
'status' => args[:status]
84+
)
85+
end
86+
7587
def on(event, &)
7688
event = EVENTS[event] if event.is_a?(Symbol)
7789
@bidi.add_callback(event, &)

rb/lib/selenium/webdriver/common/network.rb

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ def initialize(bridge)
2727
@callbacks = {}
2828
end
2929

30+
def remove_handler(id)
31+
intercept = @callbacks[id]
32+
@network.remove_intercept(intercept['intercept'])
33+
@callbacks.delete(id)
34+
end
35+
36+
def clear_handlers
37+
@callbacks.each_key { |id| remove_handler(id) }
38+
end
39+
3040
def add_authentication_handler(username, password)
3141
intercept = @network.add_intercept(phases: [BiDi::Network::PHASES[:auth_required]])
3242
auth_id = @network.on(:auth_required) do |event|
@@ -38,16 +48,6 @@ def add_authentication_handler(username, password)
3848
auth_id
3949
end
4050

41-
def remove_handler(id)
42-
intercept = @callbacks[id]
43-
@network.remove_intercept(intercept['intercept'])
44-
@callbacks.delete(id)
45-
end
46-
47-
def clear_handlers
48-
@callbacks.each_key { |id| remove_handler(id) }
49-
end
50-
5151
def add_request_handler
5252
intercept = @network.add_intercept(phases: [BiDi::Network::PHASES[:before_request]])
5353
request_id = @network.on(:before_request) do |event|
@@ -59,6 +59,18 @@ def add_request_handler
5959

6060
request_id
6161
end
62+
63+
def add_response_handler
64+
intercept = @network.add_intercept(phases: [BiDi::Network::PHASES[:response_started]])
65+
response_id = @network.on(:response_started) do |event|
66+
request_id = event['requestId']
67+
@network.continue_with_response(request_id: request_id)
68+
end
69+
70+
@callbacks[response_id] = intercept
71+
72+
response_id
73+
end
6274
end # Network
6375
end # WebDriver
6476
end # Selenium

rb/sig/lib/selenium/webdriver/bidi/network.rbs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ module Selenium
1212

1313
def add_intercept: (?phases: Array[String], ?contexts: BrowsingContext?, ?url_patterns: untyped?) -> Hash[String, String]
1414

15-
def continue_with_request: -> untyped
15+
def continue_with_request: (**untyped args) -> untyped
16+
17+
def continue_with_response: (**untyped args) -> untyped
1618

1719
def remove_intercept: (String intercept) -> untyped
1820

rb/sig/lib/selenium/webdriver/common/network.rbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module Selenium
1313

1414
def add_request_handler: -> Integer
1515

16+
def add_response_handler: -> String
17+
1618
def clear_handlers: -> Hash[nil, nil]
1719

1820
def remove_handler: (Integer id) -> nil

rb/spec/integration/selenium/webdriver/bidi/network_spec.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
# specific language governing permissions and limitations
1818
# under the License.
1919

20-
2120
require_relative '../spec_helper'
2221

2322
module Selenium
@@ -70,6 +69,20 @@ class BiDi
7069
expect(driver.find_element(name: 'login')).to be_displayed
7170
end
7271
end
72+
73+
it 'continues with response' do
74+
reset_driver!(web_socket_url: true) do |driver|
75+
network = described_class.new(driver.bidi)
76+
network.add_intercept(phases: [described_class::PHASES[:response_started]])
77+
network.on(:response_started) do |event|
78+
request_id = event['requestId']
79+
network.continue_with_response(request_id: request_id)
80+
end
81+
82+
driver.navigate.to url_for('formPage.html')
83+
expect(driver.find_element(name: 'login')).to be_displayed
84+
end
85+
end
7386
end
7487
end
7588
end

rb/spec/integration/selenium/webdriver/network_spec.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,33 @@ module WebDriver
7979
expect(network.callbacks.count).to be 0
8080
end
8181
end
82+
83+
it 'adds a response handler' do
84+
reset_driver!(web_socket_url: true) do |driver|
85+
network = described_class.new(driver)
86+
network.add_response_handler
87+
expect(network.callbacks.count).to be 1
88+
end
89+
end
90+
91+
it 'removes a response handler' do
92+
reset_driver!(web_socket_url: true) do |driver|
93+
network = described_class.new(driver)
94+
id = network.add_response_handler
95+
network.remove_handler(id)
96+
expect(network.callbacks.count).to be 0
97+
end
98+
end
99+
100+
it 'clears all response handlers' do
101+
reset_driver!(web_socket_url: true) do |driver|
102+
network = described_class.new(driver)
103+
network.add_response_handler
104+
network.add_response_handler
105+
network.clear_handlers
106+
expect(network.callbacks.count).to be 0
107+
end
108+
end
82109
end
83110
end
84111
end

0 commit comments

Comments
 (0)