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 )