Quellcode durchsuchen

Use a role to decorate binary classes with their builder

Daniel Gempesaw vor 10 Jahren
Ursprung
Commit
3d6a7d062b
4 geänderte Dateien mit 55 neuen und 76 gelöschten Zeilen
  1. 28 0
      lib/Selenium/BinaryModeBuilder.pm
  2. 9 22
      lib/Selenium/Chrome.pm
  3. 9 35
      lib/Selenium/Firefox.pm
  4. 9 19
      lib/Selenium/PhantomJS.pm

+ 28 - 0
lib/Selenium/BinaryModeBuilder.pm

@@ -0,0 +1,28 @@
+package Selenium::BinaryModeBuilder;
+
+# ABSTRACT: Role to teach a class how to enable its binary
+use Selenium::Binary qw/start_binary_on_port/;
+use Try::Tiny;
+use Moo::Role;
+use namespace::clean;
+
+sub _build_binary_mode {
+    my ($self) = @_;
+
+    if (! $self->has_remote_server_addr && ! $self->has_port) {
+        try {
+            my $port = start_binary_on_port($self->binary_name, $self->binary_port);
+            $self->port($port);
+            return 1;
+        }
+        catch {
+            warn $_;
+            return 0;
+        }
+    }
+    else {
+        return 0;
+    }
+}
+
+1;

+ 9 - 22
lib/Selenium/Chrome.pm

@@ -1,10 +1,8 @@
 package Selenium::Chrome;
 
 # ABSTRACT: A convenience package for creating a Chrome instance
-use Selenium::Binary qw/start_binary_on_port/;
-
 use Moo;
-use namespace::clean;
+with 'Selenium::BinaryModeBuilder';
 extends 'Selenium::Remote::Driver';
 
 =head1 SYNOPSIS
@@ -32,8 +30,6 @@ check the C<binary_mode> attr after instantiation.
 
 =cut
 
-use constant CHROMEDRIVER_PORT => 9515;
-
 has '+browser_name' => (
     is => 'ro',
     default => sub { 'chrome' }
@@ -51,24 +47,15 @@ has 'binary_mode' => (
     builder => 1
 );
 
-sub _build_binary_mode {
-    my ($self) = @_;
+has 'binary_name' => (
+    is => 'lazy',
+    default => sub { 'chromedriver' }
+);
 
-    if (! $self->has_remote_server_addr && ! $self->has_port) {
-        try {
-            my $port = start_binary_on_port('chromedriver', CHROMEDRIVER_PORT);
-            $self->port($port);
-            return 1;
-        }
-        catch {
-            warn $_;
-            return 0;
-        }
-    }
-    else {
-        return 0;
-    }
-}
+has 'binary_port' => (
+    is => 'lazy',
+    default => sub { 9515 }
+);
 
 sub DEMOLISH {
     my ($self) = @_;

+ 9 - 35
lib/Selenium/Firefox.pm

@@ -1,11 +1,9 @@
 package Selenium::Firefox;
 
 # ABSTRACT: A convenience package for creating a Firefox instance
-use Selenium::Binary qw/start_binary_on_port/;
-use Try::Tiny;
 use Moo;
-use namespace::clean;
 extends 'Selenium::Remote::Driver';
+with 'Selenium::BinaryModeBuilder';
 
 =head1 SYNOPSIS
 
@@ -26,44 +24,20 @@ has '+port' => (
     default => sub { 4444 }
 );
 
-has '+firefox_profile' => (
-    is => 'ro',
-    lazy => 1,
-    coerce => sub {
-        my ($profile) = @_;
-        die unless $profile->isa('Selenium::Firefox::Profile');
-        my $port = _find_open_port_above(FIREFOX_PORT);
-        $profile->add_webdriver($port);
-
-        return $profile;
-    },
-    default => sub { Selenium::Firefox::Profile->new }
-);
-
 has 'binary_mode' => (
     is => 'ro',
     init_arg => undef,
     builder => 1
 );
 
-sub _build_binary_mode {
-    my ($self) = @_;
-
-    if (! $self->has_remote_server_addr && ! $self->has_port) {
-        try {
-            my $port = start_binary_on_port('firefox', FIREFOX_PORT);
-            $self->port($port);
-            return 1;
-        }
-        catch {
-            warn $_;
-            return 0;
-        }
-    }
-    else {
-        return 0;
-    }
-}
+has 'binary_name' => (
+    is => 'lazy',
+    default => sub { 'firefox' }
+);
 
+has 'binary_port' => (
+    is => 'lazy',
+    default => sub { 9090 }
+);
 
 1;

+ 9 - 19
lib/Selenium/PhantomJS.pm

@@ -1,9 +1,8 @@
 package Selenium::PhantomJS;
 
 # ABSTRACT: A convenience package for creating a PhantomJS instance
-use Selenium::Binary qw/start_binary_on_port/;
 use Moo;
-use namespace::clean;
+with 'Selenium::BinaryModeBuilder';
 extends 'Selenium::Remote::Driver';
 
 =head1 SYNOPSIS
@@ -31,24 +30,15 @@ has 'binary_mode' => (
     builder => 1
 );
 
-sub _build_binary_mode {
-    my ($self) = @_;
+has 'binary_name' => (
+    is => 'lazy',
+    default => sub { 'phantomjs' }
+);
 
-    if (! $self->has_remote_server_addr && ! $self->has_port) {
-        try {
-            my $port = start_binary_on_port('phantomjs', PHANTOMJS_PORT);
-            $self->port($port);
-            return 1;
-        }
-        catch {
-            warn $_;
-            return 0;
-        }
-    }
-    else {
-        return 0;
-    }
-}
+has 'binary_port' => (
+    is => 'lazy',
+    default => sub { 8910 }
+);
 
 sub DEMOLISH {
     my ($self) = @_;