Răsfoiți Sursa

Merge pull request #125 from kablamo/default-hostname

Added a 'base_url' param
Daniel Gempesaw 11 ani în urmă
părinte
comite
ae10a629a4
2 a modificat fișierele cu 65 adăugiri și 1 ștergeri
  1. 18 1
      lib/Selenium/Remote/Driver.pm
  2. 47 0
      t/01-driver.t

+ 18 - 1
lib/Selenium/Remote/Driver.pm

@@ -146,6 +146,7 @@ available here.
         'default_finder'       - <string>   - choose default finder used for find_element* {class|class_name|css|id|link|link_text|name|partial_link_text|tag_name|xpath}
         'webelement_class'     - <string>   - sub-class of Selenium::Remote::WebElement if you wish to use an alternate WebElement class.
         'ua'                   - LWP::UserAgent instance - if you wish to use a specific $ua, like from Test::LWP::UserAgent
+        'base_url'             - <string>   - base url for the website Selenium acts on, default is 'http://localhost'
 
 
     If no values are provided, then these defaults will be assumed:
@@ -263,6 +264,16 @@ has 'browser_name' => (
     default => sub {'firefox'},
 );
 
+has 'base_url' => (
+    is      => 'rw',
+    coerce  => sub { 
+        my $base_url = shift || 'http://localhost';
+        $base_url =~ s|/$||;
+        return $base_url;
+    },
+    default => sub {'http://localhost'},
+);
+
 has 'platform' => (
     is      => 'rw',
     coerce  => sub { ( defined($_[0]) ? $_[0] : 'ANY' )},
@@ -1062,8 +1073,14 @@ sub navigate {
 
 sub get {
     my ( $self, $url ) = @_;
+
+    if ($url !~ m|://|) {
+        $url =~ s|^/||;
+        $url = $self->base_url . "/" . $url;
+    }
+
     my $res    = { 'command' => 'get' };
-    my $params = { 'url'     => $url };
+    my $params = { 'url'     => $url  };
     return $self->_execute_command( $res, $params );
 }
 

+ 47 - 0
t/01-driver.t

@@ -3,6 +3,7 @@ use warnings;
 
 use JSON;
 use Net::Ping;
+use HTTP::Headers;
 use Test::More;
 use Test::LWP::UserAgent;
 use Selenium::Remote::Driver;
@@ -348,6 +349,52 @@ AUTO_CLOSE: {
     $driver->auto_close(1);
 }
 
+BASE_URL: {
+    {
+        package MySeleniumRemoteDriver;
+        use Moo;
+        extends 'Selenium::Remote::Driver';
+        sub _execute_command { $_[2]->{url} }
+        1;
+    }
+
+    my @tests = ({
+        base_url => 'http://example.com',
+        url      => '/foo',
+        expected => 'http://example.com/foo',
+    },{
+        base_url => 'http://example.com/',
+        url      => '/foo',
+        expected => 'http://example.com/foo',
+    },{
+        base_url => 'http://example.com',
+        url      => 'foo',
+        expected => 'http://example.com/foo',
+    },{
+        base_url => 'http://example.com/a',
+        url      => '/foo',
+        expected => 'http://example.com/a/foo',
+    },{
+        base_url => 'http://example.com/a',
+        url      => 'foo',
+        expected => 'http://example.com/a/foo',
+    },{
+        base_url => 'http://example.com/a',
+        url      => 'http://blog.example.com/foo',
+        expected => 'http://blog.example.com/foo',
+    });
+
+    for my $test (@tests) {
+        my $base_url_driver = MySeleniumRemoteDriver->new(
+            browser_name => 'firefox',
+            base_url     => $test->{base_url},
+            testing      => 1,
+        );
+        my $got = $base_url_driver->get($test->{url});
+        is $got, $test->{expected}, "base_url + $test->{url}";
+    }
+}
+
 QUIT: {
     $ret = $driver->quit();
     ok((not defined $driver->{'session_id'}), 'Killed the remote session');