all selenium tests are working with newest geckodriver (0.18.0) and patched S:R:D issues: - setting the window size: not urgent - the unsupported move_to: fixed (new move_action) - setting the implicit wait timeout: fixed upstream in S:R:D Change-Id: Ic5b52cd866f4fd93682d67a4fd8a76ec54ea70cfchanges/38/14038/5
parent
b040f4fd96
commit
a672389bc7
@ -0,0 +1,111 @@
|
||||
package Selenium::Remote::Driver::FirefoxExtensions;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use Moo;
|
||||
|
||||
use Test::More import => [qw(diag ok is)];
|
||||
|
||||
extends 'Selenium::Firefox';
|
||||
|
||||
# important so that S:F doesn't start an own instance of geckodriver
|
||||
has '+remote_server_addr' => (
|
||||
default => '127.0.0.1',
|
||||
);
|
||||
|
||||
has '+port' => (
|
||||
default => '4444',
|
||||
);
|
||||
|
||||
has '+proxy' => (
|
||||
default => sub { return {proxyType => 'system'}; },
|
||||
);
|
||||
|
||||
sub BUILD {
|
||||
my $self = shift;
|
||||
|
||||
my ($window_h,$window_w) = ($ENV{WINDOW_SIZE} || '1024x1280') =~ /([0-9]+)x([0-9]+)/i;
|
||||
my $browsername = $self->browser_name;
|
||||
# $self->set_window_position(0, 50) if ($browsername ne "htmlunit");
|
||||
# $self->set_window_size($window_h,$window_w) if ($browsername ne "htmlunit");
|
||||
# diag("Window size: $window_h x $window_w");
|
||||
$self->set_timeout("implicit", 10_000);
|
||||
}
|
||||
|
||||
sub login_ok {
|
||||
my ($self) = @_;
|
||||
diag("Loading login page (logout first)");
|
||||
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
|
||||
$self->get("$uri/logout"); # make sure we are logged out
|
||||
$self->get("$uri/login");
|
||||
|
||||
diag("Do Admin Login");
|
||||
ok($self->find_text("Admin Sign In"), "Text Admin Sign In found");
|
||||
is($self->get_title, '');
|
||||
$self->find_element('#username', 'css')->send_keys('administrator');
|
||||
$self->find_element('#password', 'css')->send_keys('administrator');
|
||||
$self->find_element('#submit', 'css')->click();
|
||||
|
||||
diag("Checking Admin interface");
|
||||
is($self->get_title, 'Dashboard');
|
||||
is($self->find_element('//*[@id="masthead"]//h2')->get_text(), "Dashboard");
|
||||
ok(1, "Login Successful");
|
||||
}
|
||||
|
||||
sub find_text {
|
||||
my ($self, $text, $scheme) = @_;
|
||||
$scheme //= "xpath";
|
||||
return $self->find_element("//*[contains(text(),\"$text\")]", $scheme);
|
||||
}
|
||||
|
||||
sub select_if_unselected {
|
||||
my ($self, $query, $scheme) = @_;
|
||||
$scheme //= "xpath";
|
||||
my $elem = $self->find_element($query, $scheme);
|
||||
return 0 unless $elem;
|
||||
return 0 unless $elem->is_displayed;
|
||||
if (! $elem->is_selected() ) {
|
||||
$elem->click;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub fill_element {
|
||||
my ($self, $query, $scheme, $filltext) = @_;
|
||||
my $elem = $self->find_element($query, $scheme);
|
||||
return 0 unless $elem;
|
||||
return 0 unless $elem->is_displayed;
|
||||
$elem->clear();
|
||||
$elem->send_keys($filltext);
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub scroll_to_id {
|
||||
my ($self, $id) = @_;
|
||||
my $script =
|
||||
'var arg1 = arguments[0];' .
|
||||
'var elem = window.document.getElementById(arg1);' .
|
||||
'elem.scrollIntoView();' .
|
||||
'return elem;';
|
||||
my $elem = $self->execute_script($script,$id);
|
||||
return $elem;
|
||||
}
|
||||
|
||||
sub scroll_to_element {
|
||||
my ($self, $elem) = @_;
|
||||
my $script =
|
||||
'var arg1 = arguments[0];' .
|
||||
'arg1.scrollIntoView();' .
|
||||
'return arg1;';
|
||||
$self->execute_script($script,$elem);
|
||||
return $elem;
|
||||
}
|
||||
|
||||
sub browser_name_in {
|
||||
my ($self, @names) = @_;
|
||||
my $browser_name = $self->browser_name;
|
||||
return scalar grep {/^$browser_name$/} @names;
|
||||
}
|
||||
|
||||
1;
|
Loading…
Reference in new issue