| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package Selenium::Chrome;
- # ABSTRACT: A convenience package for creating a Chrome instance
- use Moo;
- extends 'Selenium::Remote::Driver';
- =head1 SYNOPSIS
- my $driver = Selenium::Chrome->new;
- =cut
- has '+browser_name' => (
- is => 'ro',
- default => sub { 'chrome' }
- );
- sub _find_executable {
- my ($binary) = @_;
- my $executable = which($binary);
- if (not defined $executable) {
- warn q(
- Unable to find the chromedriver binary in your $PATH. Please download the server from http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your $PATH. More info is available at http://code.google.com/p/selenium/wiki/ChromeDriver.
- We'll try falling back to standard Remote Driver mode via the webdriver.chrome.driver property...
- );
- }
- return $executable;
- }
- sub _construct_command {
- my ($executable, $port) = @_;
- my %args = (
- 'base-url' => 'wd/hub',
- 'port' => $port
- );
- my @args = map { '--' . $_ . '=' . $args{$_} } keys %args;
- return join(' ', ($executable, @args, '> /dev/null 2>&1 &') );
- }
- sub _find_open_port_above {
- my ($port) = @_;
- my $free_port = wait_until {
- if (_probe_port($port)) {
- $port++;
- return 0;
- }
- else {
- return $port;
- }
- };
- return $free_port;
- }
- sub _probe_port {
- my ($port) = @_;
- return IO::Socket::INET->new(
- PeerAddr => $default_binary_server,
- PeerPort => $port,
- Timeout => 3
- );
- }
- 1;
|