Bug 19802: Move Selenium code to t::lib::Selenium
To make it reusable easily. Test plan: The basic_workflow.t tests should still pass after this change. Signed-off-by: Mark Tompsett <mtompset@hotmail.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
8c489457ca
commit
d482aef2e4
|
|
@ -42,12 +42,9 @@ use Test::More tests => 20;
|
|||
use MARC::Record;
|
||||
use MARC::Field;
|
||||
|
||||
use t::lib::Selenium;
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $login = $ENV{KOHA_USER} || 'koha';
|
||||
my $password = $ENV{KOHA_PASS} || 'koha';
|
||||
my $base_url= ( $ENV{KOHA_INTRANET_URL} || C4::Context->preference("staffClientBaseURL") ) . "/cgi-bin/koha/";
|
||||
my $selenium_addr = $ENV{SELENIUM_ADDR} || 'localhost';
|
||||
my $selenium_port = $ENV{SELENIUM_PORT} || 4444;
|
||||
|
||||
my $number_of_biblios_to_insert = 3;
|
||||
our $sample_data = {
|
||||
|
|
@ -90,29 +87,29 @@ SKIP: {
|
|||
|
||||
open my $fh, '>>', '/tmp/output.txt';
|
||||
|
||||
my $driver = Selenium::Remote::Driver->new(
|
||||
port => $selenium_port,
|
||||
remote_server_addr => $selenium_addr
|
||||
);
|
||||
my $s = t::lib::Selenium->new;
|
||||
|
||||
my $driver = $s->driver;
|
||||
my $base_url = $s->base_url;
|
||||
|
||||
$start = gettimeofday;
|
||||
$prev_time = $start;
|
||||
$driver->get($base_url."mainpage.pl");
|
||||
like( $driver->get_title(), qr(Log in to Koha), );
|
||||
auth( $driver, $login, $password );
|
||||
$s->auth;
|
||||
time_diff("main");
|
||||
|
||||
$driver->get($base_url.'admin/categories.pl');
|
||||
like( $driver->get_title(), qr(Patron categories), );
|
||||
$driver->find_element('//a[@id="newcategory"]')->click;
|
||||
like( $driver->get_title(), qr(New category), );
|
||||
fill_form( $driver, $sample_data->{category} );
|
||||
$s->fill_form( $sample_data->{category} );
|
||||
$driver->find_element('//fieldset[@class="action"]/input[@type="submit"]')->click;
|
||||
|
||||
time_diff("add patron category");
|
||||
$driver->get($base_url.'/members/memberentry.pl?op=add&categorycode='.$sample_data->{category}{categorycode});
|
||||
like( $driver->get_title(), qr(Add .*$sample_data->{category}{description}), );
|
||||
fill_form( $driver, $sample_data->{patron} );
|
||||
$s->fill_form( $sample_data->{patron} );
|
||||
$driver->find_element('//button[@id="saverecord"]')->click;
|
||||
like( $driver->get_title(), qr(Patron details for $sample_data->{patron}{surname}), );
|
||||
|
||||
|
|
@ -205,26 +202,6 @@ END {
|
|||
cleanup() if $cleanup_needed;
|
||||
};
|
||||
|
||||
sub auth {
|
||||
my ( $driver, $login, $password) = @_;
|
||||
fill_form( $driver, { userid => $login, password => $password } );
|
||||
my $login_button = $driver->find_element('//input[@id="submit"]');
|
||||
$login_button->submit();
|
||||
}
|
||||
|
||||
sub fill_form {
|
||||
my ( $driver, $values ) = @_;
|
||||
while ( my ( $id, $value ) = each %$values ) {
|
||||
my $element = $driver->find_element('//*[@id="'.$id.'"]');
|
||||
my $tag = $element->get_tag_name();
|
||||
if ( $tag eq 'input' ) {
|
||||
$driver->find_element('//input[@id="'.$id.'"]')->send_keys($value);
|
||||
} elsif ( $tag eq 'select' ) {
|
||||
$driver->find_element('//select[@id="'.$id.'"]/option[@value="'.$value.'"]')->click;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub cleanup {
|
||||
my $dbh = C4::Context->dbh;
|
||||
$dbh->do(q|DELETE FROM issues where borrowernumber=?|, {}, $borrowernumber);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,147 @@
|
|||
package t::lib::Selenium;
|
||||
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
||||
|
||||
|
||||
use Modern::Perl;
|
||||
use C4::Context;
|
||||
|
||||
use base qw(Class::Accessor);
|
||||
__PACKAGE__->mk_accessors(qw(login password base_url selenium_addr selenium_port driver));
|
||||
|
||||
sub new {
|
||||
my ( $class, $params ) = @_;
|
||||
my $self = {};
|
||||
my $config = $class->config;
|
||||
$self->{login} = $params->{login} || $config->{login};
|
||||
$self->{password} = $params->{password} || $config->{password};
|
||||
$self->{base_url} = $params->{base_url} || $config->{base_url};
|
||||
$self->{selenium_addr} = $params->{selenium_addr} || $config->{selenium_addr};
|
||||
$self->{selenium_port} = $params->{selenium_port} || $config->{selenium_port};
|
||||
$self->{driver} = Selenium::Remote::Driver->new(
|
||||
port => $self->{selenium_port},
|
||||
remote_server_addr => $self->{selenium_addr},
|
||||
);
|
||||
return bless $self, $class;
|
||||
}
|
||||
|
||||
sub config {
|
||||
return {
|
||||
login => $ENV{KOHA_USER} || 'koha',
|
||||
password => $ENV{KOHA_PASS} || 'koha',
|
||||
base_url => ( $ENV{KOHA_INTRANET_URL} || C4::Context->preference("staffClientBaseURL") ) . "/cgi-bin/koha/",
|
||||
selenium_addr => $ENV{SELENIUM_ADDR} || 'localhost',
|
||||
selenium_port => $ENV{SELENIUM_PORT} || 4444,
|
||||
};
|
||||
}
|
||||
|
||||
sub auth {
|
||||
my ( $self, $login, $password ) = @_;
|
||||
|
||||
$login ||= $self->login;
|
||||
$password ||= $self->password;
|
||||
my $mainpage = $self->base_url . 'mainpage.pl';
|
||||
|
||||
$self->driver->get($mainpage);
|
||||
$self->fill_form( { userid => $login, password => $password } );
|
||||
my $login_button = $self->driver->find_element('//input[@id="submit"]');
|
||||
$login_button->submit();
|
||||
}
|
||||
|
||||
sub fill_form {
|
||||
my ( $self, $values ) = @_;
|
||||
while ( my ( $id, $value ) = each %$values ) {
|
||||
my $element = $self->driver->find_element('//*[@id="'.$id.'"]');
|
||||
my $tag = $element->get_tag_name();
|
||||
if ( $tag eq 'input' ) {
|
||||
$self->driver->find_element('//input[@id="'.$id.'"]')->send_keys($value);
|
||||
} elsif ( $tag eq 'select' ) {
|
||||
$self->driver->find_element('//select[@id="'.$id.'"]/option[@value="'.$value.'"]')->click;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
=head1 NAME
|
||||
|
||||
t::lib::Selenium - Selenium helper module
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
my $s = t::lib::Selenium->new;
|
||||
my $driver = $s->driver;
|
||||
my $base_url = $s->base_url;
|
||||
$s->auth;
|
||||
$driver->get($s->base_url . 'mainpage.pl');
|
||||
$s->fill_form({ input_id => 'value' });
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
The goal of this module is to group the different actions we need
|
||||
when we use automation test using Selenium
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $s = t::lib::Selenium->new;
|
||||
|
||||
Constructor - Returns the object Selenium
|
||||
You can pass login, password, base_url, selenium_addr, selenium_port
|
||||
If not passed, the environment variables will be used
|
||||
KOHA_USER, KOHA_PASS, KOHA_INTRANET_URL, SELENIUM_ADDR SELENIUM_PORT
|
||||
Or koha, koha, syspref staffClientBaseURL, localhost, 4444
|
||||
|
||||
=head2 auth
|
||||
|
||||
$s->auth;
|
||||
|
||||
Will login into Koha.
|
||||
|
||||
=head2 fill_form
|
||||
|
||||
$driver->get($url)
|
||||
$s->fill_form({
|
||||
input_id => 'value',
|
||||
element_id => 'other_value',
|
||||
});
|
||||
|
||||
Will fill the different elements of a form.
|
||||
The keys must be element ids (input and select are supported so far)
|
||||
The values must a string.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Jonathan Druart <jonathan.druart@bugs.koha-community.org>
|
||||
|
||||
Koha Development Team
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright 2017 - Koha Development Team
|
||||
|
||||
=head1 LICENSE
|
||||
|
||||
This file is part of Koha.
|
||||
|
||||
Koha is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
Koha is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with Koha; if not, see <http://www.gnu.org/licenses>.
|
||||
|
||||
=cut
|
||||
|
||||
1;
|
||||
Loading…
Reference in New Issue