From eb2a2e4de3e26511b0d38aa05358b75d544f2524 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 11 May 2018 16:58:07 -0300 Subject: [PATCH] Bug 20757: Capture and upload screenshot on selenium errors It is a real pain to debug selenium errors, especially when it is not reproducible locally. This patch capture a screenshot when an error occurred and upload it using the excellent lut.im service provided by framasoft (We could host our own later). Test plan: Modify a selenium script to make it fails (search for find_element) You will see a stack trace followed by a link to framapic.org Signed-off-by: Mark Tompsett Signed-off-by: Josef Moravec Signed-off-by: Nick Clemens (cherry picked from commit 2898b580891e271c102d592c5040122007ee7a73) Signed-off-by: Martin Renvoize --- t/lib/Selenium.pm | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/t/lib/Selenium.pm b/t/lib/Selenium.pm index 645cd8dd35..83d7b842a8 100644 --- a/t/lib/Selenium.pm +++ b/t/lib/Selenium.pm @@ -18,12 +18,24 @@ package t::lib::Selenium; use Modern::Perl; use Carp qw( croak ); +use JSON qw( from_json ); use C4::Context; use base qw(Class::Accessor); __PACKAGE__->mk_accessors(qw(login password base_url opac_base_url selenium_addr selenium_port driver)); +sub capture { + my ( $class, $driver ) = @_; + + my $lutim_server = q|https://framapic.org|; # Thanks Framasoft! + $driver->capture_screenshot('selenium_failure.png'); + my $from_json = from_json qx{curl -s -F "format=json" -F "file=\@selenium_failure.png" -F "delete-day=1" $lutim_server}; + if ( $from_json ) { + print STDERR "\nSCREENSHOT: $lutim_server/" . $from_json->{msg}->{short} . "\n"; + } +} + sub new { my ( $class, $params ) = @_; my $self = {}; @@ -38,14 +50,16 @@ sub new { port => $self->{selenium_port}, remote_server_addr => $self->{selenium_addr}, error_handler => sub { - my $selenium_error = $_[1]; + my ( $driver, $selenium_error ) = @_; print STDERR "\nSTRACE:"; my $i = 1; while ( (my @call_details = (caller($i++))) ){ print STDERR "\t" . $call_details[1]. ":" . $call_details[2] . " in " . $call_details[3]."\n"; } print STDERR "\n"; - croak $selenium_error; } + $class->capture( $driver ); + croak $selenium_error; + } ); return bless $self, $class; } -- 2.39.5