Based on solution from your previous comment here's another solution.
Here extra_capabilities are used to enable more logging (please note I added additional package). This will work in version 1.38 of Selenium::Remote::Driver that was released just recently, so you will need to update you packages if you haven't done so yet. This solution does not require falling back to WD2.
use strict;
use warnings;
use Selenium::Chrome;
use Selenium::Waiter qw/wait_until/;
use JSON;
my $chrome_driver_path = "./../../tools/drivers/chromedriver.exe";
my $driver;
my %settings = (
'binary' => $chrome_driver_path,
'extra_capabilities' =>{
'goog:loggingPrefs' => {
'performance' => 'ALL',
},
'goog:chromeOptions' => {
'perfLoggingPrefs' => {
'traceCategories' => 'performance',
},
},
}
);
$driver = Selenium::Chrome->new(%settings);
print("Getting stackoverflow\n");
wait_until{$driver->get("https://www.stackoverflow.com")};
validate_site($driver);
print("Getting unexistent url of stackoverflow\n");
wait_until{$driver->get("https://www.stackoverflow.com/this-does-not-exists-and-returns-404")};
validate_site($driver);
#sleep(20);
$driver->shutdown_binary;
sub validate_site{
my ($driver) = @_;
my $logs = $driver->get_log('performance');
my @responses = grep {$_->{'message'} =~ /"Network\.responseReceived"/ } @$logs;
my @stat = grep {$_->{'message'} =~ $driver->get_current_url() } @responses;
my $json= decode_json $stat[0]->{'message'};
my $status = $json->{'message'}->{'params'}->{'response'}->{'status'};
if ($status==200) {
print("Looks good)\n");
}else{
warn("Error\n");
}
}
In version 1.37 you would have to fallback to WD2 as goog:loggingPrefs
capability was not supoprted:
use strict;
use warnings;
use Selenium::Chrome;
use Selenium::Waiter qw/wait_until/;
use JSON;
my $chrome_driver_path = "./../../tools/drivers/chromedriver.exe";
my $driver;
my %settings = (
'binary' => $chrome_driver_path,
'extra_capabilities' =>{
'loggingPrefs' => {
#'browser' => 'ALL',
#'driver' => 'ALL',
'performance' => 'ALL'
},
'perfLoggingPrefs' => {
'traceCategories' => 'performance'
},
}
);
$Selenium::Remote::Driver::FORCE_WD2=1;
$driver = Selenium::Chrome->new(%settings);
print("Getting stackoverflow\n");
wait_until{$driver->get("https://www.stackoverflow.com")};
validate_site($driver);
print("Getting unexistent url of stackoverflow\n");
wait_until{$driver->get("https://www.stackoverflow.com/this-does-not-exists-and-returns-404")};
validate_site($driver);
#sleep(20);
$driver->shutdown_binary;
sub validate_site{
my ($driver) = @_;
my $logs = $driver->get_log('performance');
my @responses = grep {$_->{'message'} =~ /"Network\.responseReceived"/ } @$logs;
my @stat = grep {$_->{'message'} =~ $driver->get_current_url() } @responses;
my $json= decode_json $stat[0]->{'message'};
my $status = $json->{'message'}->{'params'}->{'response'}->{'status'};
if ($status==200) {
print("Looks good)\n");
}else{
warn("Error\n");
}
}