Lithium-WebDriver
view release on metacpan or search on metacpan
lib/Lithium/WebDriver.pm view on Meta::CPAN
$url =~ s/\/wd\/hub$//;
my $not_connected = 1;
while ($not_connected) {
debug "Getting $url/sessions & ".$self->{base}."/sessions";
if ($self->{LWP}->get("$url/sessions")->is_success||
$self->{LWP}->get($self->{base}."/sessions")->is_success
) {
$not_connected = 0;
}
sleep 0.1;
}
alarm 0;
1;
} or do {
alarm 0;
error "Unable to connect to webdriver at host [".$self->{base}."]";
return 0;
};
my $capabilities = $self->_post(host => "session",
{ desiredCapabilities => $self->_capabilities });
return (undef, error "Unable to match desired capabilities") unless $capabilities;
$self->{base} = $capabilities->{node}
if $capabilities->{node};
$self->{capabilities} = $capabilities;
$self->{base} = $self->{base}.'/session/'.$self->{session_id};
my $ret = $self->open(url => $url, timeout => 3);
error "Error loading '$url'" unless $ret;
$url = $ret;
$self->window_size();
$self->{url} = $self->url;
$self->{url} =~ s/\/+$//;
debug "Current url: ".$self->{url};
debug "Driver instantiated with:";
dump $self;
$self->{current_title} = $self->title;
1;
}
sub disconnect
{
my ($self) = @_;
debug "Dumping driver object";
dump $self;
debug "Disconnecting from ".$self->{host};
my $ret_val = $self->_delete(host => "/session/$self->{session_id}");
if ($ret_val) {
debug "Disconect ok";
return 1;
}
return 0;
}
################################################################################
sub _capabilities
{
my ($self) = @_;
if ($self->{browser} =~ m/phantomjs/i) {
if($self->{ua}) {
debug "setting capabilities in Phantom Driver";
my ($ua_platform, $ua_browser) = split m/\s*[-_ ]\s*/, $self->{ua};
$ua_platform = lc $ua_platform if $ua_platform;
$ua_browser = lc $ua_browser if $ua_browser;
if ($ua_platform && $ua_browser && $user_agents->{$ua_platform}{$ua_browser}) {
$self->{ua} = $user_agents->{$ua_platform}{$ua_browser};
debug "Setting user-agent to: $self->{ua}";
return {
browserName => $self->{browser},
"phantomjs.page.settings.userAgent" => $self->{ua},
"phantomjs.page.settings.resourceTimeout" => 10,
};
} else {
return { browserName => $self->{browser},};
}
} else {
return { browserName => $self->{browser},};
}
}
return {
browserName => $self->{browser},
platform => $self->{platform},
};
}
sub _parse_error
{
my ($self, $error) = @_;
my $msg = $error;
eval {
$error = decode_json $error;
$self->{error} = $error;
delete $error->{value}{screen};
$msg = $error->{value}{message};
};
$msg ||= "Unknown error occurred talking to selenium.";
$msg =~ s/caused\s+by\s+Request.*//;
$msg =~ s/Error\s+Message\s+=>\s+//;
$msg =~ s/^\s+//;
chomp $msg;
$self->{error}{msg} = $msg;
debug $msg;
}
sub _get_uri
{
my ($self, $method, $path) = @_;
return $method unless $path;
$path = "/$path" if $path !~ m/^\//;
my $uri;
if ($method =~ m/path/) {
$uri = $self->{base}.$path;
} elsif ($method =~ m/host/) {
$uri = $self->{host}.$path;
} else {
error "Unimplemented uri abbreviation: $method";
exit 1;
}
$uri =~ s/\/$//;
return $uri;
}
( run in 2.305 seconds using v1.01-cache-2.11-cpan-71847e10f99 )