Skip to content

Failing to try to take a screenshot #489

@tuxayo

Description

@tuxayo

In a project there is an error handler [1] added to take a screenshot on test failure.

At some point in a test, there is a find_element that fails and the handler is called. And then taking a screenshots fails. (so the handler is called over and over but the lack of try catch (wait, that might not even help) to prevent that is not the current issue)

Is there a way to know more about from where the error comes from?
I even tried to mess with that place

$return_value = $self->error_handler->( $self, $_, @args );
and replace the call to the error handler (that will result in an endless recursion) with just a croak $_; but I 'm not sure that's the right variable where there is a chance to find the error that was returned by the rest of Selenium::Remote::Driver or selenium or the browser.

Selenium::Remote::Driver: 1.47
Selenium: 3.141.59
Firefox: 92 (last version compatible with selenium 3 it seems)
Output of the error: [2]

[1]

sub add_error_handler {
    my ( $self ) = @_;
    $self->{driver}->error_handler(
        sub {
            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";
            $self->capture( $driver ); # 
            $driver->quit();
            croak $selenium_error;
        }
    );
}

sub capture {
    my ( $class, $driver ) = @_;

    $driver->capture_screenshot('selenium_failure.png');

}

[2]

STRACE: /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1340 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1340 in (eval)
        /usr/share/perl5/Selenium/Remote/Finders.pm:21 in Selenium::Remote::Driver::find_element
        /usr/share/perl5/Try/Tiny.pm:102 in Selenium::Remote::Finders::try {...} 
        /usr/share/perl5/Try/Tiny.pm:93 in (eval)
        /usr/share/perl5/Selenium/Remote/Finders.pm:26 in Try::Tiny::try
        t/db_dependent/selenium/regressions.t:200 in Selenium::Remote::Finders::__ANON__
        /usr/share/perl/5.34/Test/Builder.pm:374 in main::__ANON__
        /usr/share/perl/5.34/Test/Builder.pm:374 in (eval)
        /usr/share/perl/5.34/Test/More.pm:809 in Test::Builder::subtest
        t/db_dependent/selenium/regressions.t:222 in Test::More::subtest

Error while executing command: no such element: Unable to locate element: #issues-table [id*="title_"] at /usr/share/perl5/Selenium/Remote/Driver.pm line 411.
 at /usr/share/perl5/Selenium/Remote/Driver.pm line 356.
 at /usr/share/perl5/Selenium/Remote/Finders.pm line 26.

STRACE: /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in (eval)
        t/db_dependent/selenium/regressions.t:203 in Selenium::Remote::Driver::find_elements
        /usr/share/perl/5.34/Test/Builder.pm:374 in main::__ANON__
        /usr/share/perl/5.34/Test/Builder.pm:374 in (eval)
        /usr/share/perl/5.34/Test/More.pm:809 in Test::Builder::subtest
        t/db_dependent/selenium/regressions.t:222 in Test::More::subtest


STRACE: /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1119 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1129 in Selenium::Remote::Driver::screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:30 in Selenium::Remote::Driver::capture_screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:65 in t::lib::Selenium::capture
        /usr/share/perl5/Selenium/Remote/Driver.pm:356 in t::lib::Selenium::__ANON__
        /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in (eval)
        t/db_dependent/selenium/regressions.t:203 in Selenium::Remote::Driver::find_elements
        /usr/share/perl/5.34/Test/Builder.pm:374 in main::__ANON__
        /usr/share/perl/5.34/Test/Builder.pm:374 in (eval)
        /usr/share/perl/5.34/Test/More.pm:809 in Test::Builder::subtest
        t/db_dependent/selenium/regressions.t:222 in Test::More::subtest


STRACE: /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1119 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1129 in Selenium::Remote::Driver::screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:30 in Selenium::Remote::Driver::capture_screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:65 in t::lib::Selenium::capture
        /usr/share/perl5/Selenium/Remote/Driver.pm:356 in t::lib::Selenium::__ANON__
        /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1119 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1129 in Selenium::Remote::Driver::screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:30 in Selenium::Remote::Driver::capture_screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:65 in t::lib::Selenium::capture
        /usr/share/perl5/Selenium/Remote/Driver.pm:356 in t::lib::Selenium::__ANON__
        /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in (eval)
        t/db_dependent/selenium/regressions.t:203 in Selenium::Remote::Driver::find_elements
        /usr/share/perl/5.34/Test/Builder.pm:374 in main::__ANON__
        /usr/share/perl/5.34/Test/Builder.pm:374 in (eval)
        /usr/share/perl/5.34/Test/More.pm:809 in Test::Builder::subtest
        t/db_dependent/selenium/regressions.t:222 in Test::More::subtest


STRACE: /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1119 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1129 in Selenium::Remote::Driver::screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:30 in Selenium::Remote::Driver::capture_screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:65 in t::lib::Selenium::capture
        /usr/share/perl5/Selenium/Remote/Driver.pm:356 in t::lib::Selenium::__ANON__
        /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1119 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1129 in Selenium::Remote::Driver::screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:30 in Selenium::Remote::Driver::capture_screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:65 in t::lib::Selenium::capture
        /usr/share/perl5/Selenium/Remote/Driver.pm:356 in t::lib::Selenium::__ANON__
        /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1119 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1129 in Selenium::Remote::Driver::screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:30 in Selenium::Remote::Driver::capture_screenshot
        /kohadevbox/koha/t/lib/Selenium.pm:65 in t::lib::Selenium::capture
        /usr/share/perl5/Selenium/Remote/Driver.pm:356 in t::lib::Selenium::__ANON__
        /usr/share/perl5/Try/Tiny.pm:123 in Selenium::Remote::Driver::catch {...} 
        /usr/share/perl5/Selenium/Remote/Driver.pm:361 in Try::Tiny::try
        (eval 583):1 in Selenium::Remote::Driver::__ANON__
        (eval 585):2 in Selenium::Remote::Driver::__ANON__
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in Selenium::Remote::Driver::_execute_command
        /usr/share/perl5/Selenium/Remote/Driver.pm:1371 in (eval)
        t/db_dependent/selenium/regressions.t:203 in Selenium::Remote::Driver::find_elements
        /usr/share/perl/5.34/Test/Builder.pm:374 in main::__ANON__
        /usr/share/perl/5.34/Test/Builder.pm:374 in (eval)
        /usr/share/perl/5.34/Test/More.pm:809 in Test::Builder::subtest
        t/db_dependent/selenium/regressions.t:222 in Test::More::subtest
[...]

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions