From daa55bd302f2d926f8270e2d45632fffa87806c5 Mon Sep 17 00:00:00 2001 From: Dmitry Vorotilin Date: Tue, 22 Aug 2023 20:36:44 +0400 Subject: [PATCH] feat: implement `redirect?` for Response --- CHANGELOG.md | 2 ++ lib/ferrum/network/exchange.rb | 9 +++++++++ lib/ferrum/network/response.rb | 9 ++++++++- spec/network/exchange_spec.rb | 8 ++++++++ spec/network/response_spec.rb | 9 +++++++++ spec/page/screenshot_spec.rb | 2 +- spec/support/global_helpers.rb | 4 ++++ 7 files changed, 41 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 422af0a0..c2403094 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,11 @@ ### Added - `Ferrum::Network#cache(disable: true | false)` whether or not to use cache for every request +- `Ferrum::Network::Exchange#redirect?` determines if the exchange is a redirect - `Ferrum::Network::Exchange#xhr?` determines if the exchange is XHR - `Ferrum::Network::Request#xhr?` determines if the request is XHR - `Ferrum::Network::Response#loaded?` returns true if the response is fully loaded +- `Ferrum::Network::Response#redirect?` returns true if the response is a redirect - `Ferrum::Node#in_viewport?` checks if the element in viewport (optional argument `scope` as `Ferrum::Node`) - `Ferrum::Node#scroll_into_view` - scrolls to element if needed (when it's not in the viewport) - `Ferrum::Cookies#each` - is now Enumerable and supports `each` method diff --git a/lib/ferrum/network/exchange.rb b/lib/ferrum/network/exchange.rb index 3cb0cf47..d1e2d5ec 100644 --- a/lib/ferrum/network/exchange.rb +++ b/lib/ferrum/network/exchange.rb @@ -109,6 +109,15 @@ def xhr? !!request&.xhr? end + # + # Determines if the exchange is a redirect. + # + # @return [Boolean] + # + def redirect? + response&.redirect? + end + # # Returns request's URL. # diff --git a/lib/ferrum/network/response.rb b/lib/ferrum/network/response.rb index 6b469482..0163db60 100644 --- a/lib/ferrum/network/response.rb +++ b/lib/ferrum/network/response.rb @@ -146,8 +146,15 @@ def loaded? @loaded end + # Whether the response is a redirect. # - # Comapres the respones ID to another response's ID. + # @return [Boolean] + def redirect? + params.key?("redirectResponse") + end + + # + # Compares the response's ID to another response's ID. # # @return [Boolean] # Indicates whether the response has the same ID as the other response diff --git a/spec/network/exchange_spec.rb b/spec/network/exchange_spec.rb index d2eb586a..c485b446 100644 --- a/spec/network/exchange_spec.rb +++ b/spec/network/exchange_spec.rb @@ -111,6 +111,14 @@ end end + describe "#redirect?" do + it "determines if exchange is a redirect" do + page.go_to("/redirect_again") + + expect(first_exchange.response.redirect?).to be + end + end + describe "#pending?" do it "determines if exchange is not fully loaded" do allow(page).to receive(:timeout) { 2 } diff --git a/spec/network/response_spec.rb b/spec/network/response_spec.rb index 2297ca39..760a4ff0 100644 --- a/spec/network/response_spec.rb +++ b/spec/network/response_spec.rb @@ -73,6 +73,15 @@ end end + describe "#redirect?" do + it "captures errors" do + page.go_to("/redirect_again") + + expect(page.body).to include("You landed") + expect(first_exchange.response.redirect?).to be + end + end + describe "#body_size" do it "counts network traffic for each loaded resource" do page.go_to("/ferrum/with_js") diff --git a/spec/page/screenshot_spec.rb b/spec/page/screenshot_spec.rb index 683bcdeb..bef668de 100644 --- a/spec/page/screenshot_spec.rb +++ b/spec/page/screenshot_spec.rb @@ -145,7 +145,7 @@ def create_screenshot(**options) browser.screenshot(path: file, quality: 0) # ignored for png browser.screenshot(path: file2) # defaults to a quality of 75 browser.screenshot(path: file3, quality: 100) - expect(File.size(file)).to be > File.size(file2) # png by defult is bigger + expect(File.size(file)).to be > File.size(file2) # png by default is bigger expect(File.size(file2)).to be < File.size(file3) ensure FileUtils.rm_f([file2, file3]) diff --git a/spec/support/global_helpers.rb b/spec/support/global_helpers.rb index 98a81269..3ae05a90 100644 --- a/spec/support/global_helpers.rb +++ b/spec/support/global_helpers.rb @@ -23,6 +23,10 @@ def traffic network.traffic end + def first_exchange + traffic.first + end + def last_exchange traffic.last end