Bugzilla – Attachment 70733 Details for
Bug 19802
Move Selenium code to its own module
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 19802: Move Selenium code to t::lib::Selenium
Bug-19802-Move-Selenium-code-to-tlibSelenium.patch (text/plain), 8.53 KB, created by
Mark Tompsett
on 2018-01-19 02:53:07 UTC
(
hide
)
Description:
Bug 19802: Move Selenium code to t::lib::Selenium
Filename:
MIME Type:
Creator:
Mark Tompsett
Created:
2018-01-19 02:53:07 UTC
Size:
8.53 KB
patch
obsolete
>From 5663bd43d0ab06be1bcae369c3a5adb247817b5d Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Tue, 12 Dec 2017 15:42:56 -0300 >Subject: [PATCH] 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> >--- > t/db_dependent/selenium/basic_workflow.t | 41 ++------- > t/lib/Selenium.pm | 147 +++++++++++++++++++++++++++++++ > 2 files changed, 156 insertions(+), 32 deletions(-) > create mode 100644 t/lib/Selenium.pm > >diff --git a/t/db_dependent/selenium/basic_workflow.t b/t/db_dependent/selenium/basic_workflow.t >index 116a26c..420ca3c 100644 >--- a/t/db_dependent/selenium/basic_workflow.t >+++ b/t/db_dependent/selenium/basic_workflow.t >@@ -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); >diff --git a/t/lib/Selenium.pm b/t/lib/Selenium.pm >new file mode 100644 >index 0000000..2fcd5d2 >--- /dev/null >+++ b/t/lib/Selenium.pm >@@ -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; >-- >2.1.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 19802
:
69756
|
70158
|
70159
| 70733 |
70734