BioRod
BioRod

Reputation: 549

Perl and Selenium::Remote::Driver

EDITED AGAIN

I have a server on AWS somewhere in Northern Virginia and this is my monitoring server. I ssh into this Ubuntu server from another State to do system administration. I want to do web automation tests on this server which will test a web application on the Internet hitting a URL and verify that I can selenium test a login and authenticate successfully. This server is on an AWS cloud I'm not quite sure which Perl module to use since I'm accessing it remotely.

There are two CPAN modules: Selenium::Remote::Driver and WWW::Selenium. I have tried both and they are giving me issues. And I really don't know which is appropriate for my scenario. When I use Selenium::Remote::Driver, I get the following error:

Selenium server did not return proper status at     /usr/local/share/perl/5.18.2/Selenium/Remote/Driver.pm line 401.

When I use WWW::Selenium, I get this error:

Failed to start new browser session: org.openqa.selenium.server.RemoteCommandException: Error while launching browser

I was able to launch firefox manually from the AWS monitoring server by exporting the DISPLAY but it was really slow. I have heard that I can use a headless browser but I would have to export the DISPLAY by:

export DISPLAY=:5

But remember, I'm sshing into this AWS/Selenium server from my desktop so I'm assuming I use the above command on the AWS/Selenium Server while I'm ssh into it from my desktop? Actually, at this point, I'm not sure I'm doing here. Can somebody help?

Upvotes: 2

Views: 2039

Answers (2)

Yordan Georgiev
Yordan Georgiev

Reputation: 5440

The problem in this type of questions is that the variety of configurations and binaries in your setup might be so broad that the it is hard to actually provide a straight and correct answer for YOUR SETUP. This answer has the following assumptions:

  • you have downloaded the selenium-server-standalone.jar into /usr/lib/
  • you have jdk 1.8 ( run the java -version in the shell
  • you have installed and configured the xvfb-run ( it is a fight on it's own ) So :

```

 # ssh to your server , obs the -X !
 ssh -X user-name@server-name

 # start the selenium-server-standalone on the server
 xvfb-run -e /dev/stdout java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -jar /usr/lib/selenium-server-standalone.jar &

  # one liner test - this is one veery long one 
 perl -e 'use strict ; use warnings ; use Data::Printer ; my $host="127.0.0.1"; use Selenium::Remote::Driver;my $driver = Selenium::Remote::Driver->new( "browser_name" =>"chrome", "error_handler" => sub { print $_[1]; croak 'goodbye'; }, "remote_server_addr" => "$host","port"=> "4444");$driver->debug_on();$driver->get("http://www.google.com"); print $driver->get_title();$driver->quit();' &

```

Here is the code in the one-liner as a perl script

#!/usr/bin/env perl
use strict ;
use warnings ;
use Carp ;
use Data::Printer ;
 use Selenium::Remote::Driver;

my $host="127.0.0.1";
my $driver = Selenium::Remote::Driver->new(
    "browser_name" =>"chrome"
  , "error_handler" => sub { print $_[1]; croak 'goodbye' ; }
  , "remote_server_addr" => "$host"
  , "port"=> "4444") ;
$driver->debug_on() ;
$driver->get("http://www.google.com");
print $driver->get_title();
$driver->quit();

The output should look something like: ```

        Prepping get
        Executing get
        REQ: POST, http://127.0.0.1:4444/wd/hub/session/ddb9c2575ab026cdb8c640bdc554181b/url, {"url":"http://www.google.com"}
        RES: {"sessionId":"ddb9c2575ab026cdb8c640bdc554181b","status":0,"value":null}

        Prepping getTitle
        Executing getTitle
        REQ: GET, http://127.0.0.1:4444/wd/hub/session/ddb9c2575ab026cdb8c640bdc554181b/title, {}
        RES: {"sessionId":"ddb9c2575ab026cdb8c640bdc554181b","status":0,"value":"Google"}

        GooglePrepping quit
        Executing quit
        REQ: DELETE, http://127.0.0.1:4444/wd/hub/session/ddb9c2575ab026cdb8c640bdc554181b, {}
        RES: {"sessionId":"ddb9c2575ab026cdb8c640bdc554181b","status":0,"value":null}

```

Upvotes: 2

Mohit
Mohit

Reputation: 608

Try running the below code:

#!/usr/bin/perl  
use warnings;
use strict;
use Selenium::Remote::Driver;

my $host = "10.10.1.1"; //Enter your server IP in this place
my $driver = new Selenium::Remote::Driver('remote_server_addr' =>  $host,
                                           'port' => '4444', 
                                           'auto_close' => 0);
$driver->get('http://www.google.com');

Upvotes: 1

Related Questions