Skip to content

Commit bd9b901

Browse files
committed
feat(break): add Ferrum::Network::Response#body! and body. Changle default behavior of body, it returns nil instead of throwing error.
1 parent 2a50ef5 commit bd9b901

File tree

3 files changed

+52
-6
lines changed

3 files changed

+52
-6
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
## [Unreleased](https://github.com/rubycdp/ferrum/compare/v0.17.1...main) ##
22

33
### Added
4+
- `Ferrum::Network::Response#body!` returns body or throws error if implicable
45

56
### Changed
7+
- `Ferrum::Network::Response#body` returns body or nil in case of errors
8+
- Disable Chrome code sign clones [#555]
69

710
### Fixed
811

lib/ferrum/network/response.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,27 @@ def body_size=(size)
124124
#
125125
# @return [String]
126126
#
127-
def body
127+
# @raise [Ferrum::BrowserError]
128+
#
129+
def body!
128130
@body ||= begin
129131
body, encoded = @page.command("Network.getResponseBody", requestId: id)
130132
.values_at("body", "base64Encoded")
131133
encoded ? Base64.decode64(body) : body
132134
end
133135
end
134136

137+
#
138+
# The response body.
139+
#
140+
# @return [String, nil]
141+
#
142+
def body
143+
body!
144+
rescue Ferrum::BrowserError
145+
# nop
146+
end
147+
135148
#
136149
# @return [Boolean]
137150
#

spec/network/response_spec.rb

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,54 @@
4242
end
4343
end
4444

45-
describe "#body" do
45+
describe "#body!" do
4646
it "gets response body" do
4747
page.go_to("/with_js")
4848
responses = traffic.map(&:response)
4949

5050
expect(responses.size).to eq(4)
5151

5252
expect(responses[0].url).to end_with("/with_js")
53-
expect(responses[0].body).to include("ferrum with_js")
53+
expect(responses[0].body!).to include("ferrum with_js")
5454

5555
expect(responses[1].url).to end_with("/jquery.min.js")
56-
expect(responses[1].body).to include("jQuery v3.7.1")
56+
expect(responses[1].body!).to include("jQuery v3.7.1")
5757

5858
expect(responses[2].url).to end_with("/jquery-ui.min.js")
59-
expect(responses[2].body).to include("jQuery UI - v1.13.2")
59+
expect(responses[2].body!).to include("jQuery UI - v1.13.2")
6060

6161
expect(responses[3].url).to end_with("/test.js")
62-
expect(responses[3].body).to include("This is test.js file content")
62+
expect(responses[3].body!).to include("This is test.js file content")
63+
end
64+
65+
it "throws error" do
66+
page.go_to("/with_js")
67+
responses = traffic.map(&:response)
68+
page.go_to("/with_different_resources")
69+
70+
expect(responses[0].url).to end_with("/with_js")
71+
expect { responses[0].body! }.to raise_error(Ferrum::BrowserError, "No resource with given identifier found")
72+
end
73+
end
74+
75+
describe "#body" do
76+
it "gets response body" do
77+
page.go_to("/with_js")
78+
responses = traffic.map(&:response)
79+
80+
expect(responses.size).to eq(4)
81+
82+
expect(responses[0].url).to end_with("/with_js")
83+
expect(responses[0].body).to include("ferrum with_js")
84+
end
85+
86+
it "throws error" do
87+
page.go_to("/with_js")
88+
responses = traffic.map(&:response)
89+
page.go_to("/with_different_resources")
90+
91+
expect(responses[0].url).to end_with("/with_js")
92+
expect(responses[0].body).to be_nil
6393
end
6494
end
6595

0 commit comments

Comments
 (0)