MT#14585 improve selenium test quality

use strict and warnings
therefore forbid unquoted strings
factor out initialisation
screenshot functionality is implemented upstream

Change-Id: I18a0dcc7a6418dc9fd2fa64d367ae226018a7645
changes/68/2568/3
Gerhard Jungwirth 10 years ago
parent 7fd0ec63d5
commit 3b8651ac2a

@ -2,9 +2,41 @@ package Selenium::Remote::Driver::Extensions;
use warnings; use warnings;
use strict; use strict;
use Moo; use Moo;
use Test::More import => [qw(diag ok is)];
use MooseX::Method::Signatures; use MooseX::Method::Signatures;
extends 'Selenium::Remote::Driver'; extends 'Selenium::Remote::Driver';
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_implicit_wait_timeout(10_000);
$self->default_finder('xpath');
}
method login_ok() {
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");
$self->find_text("Admin Sign In");
is($self->get_title, '');
$self->find_element('username', 'name')->send_keys('administrator');
$self->find_element('password', 'name')->send_keys('administrator');
$self->find_element('submit', 'name')->click();
diag("Checking Admin interface");
is($self->get_title, 'Dashboard');
is($self->find_element('//*[@id="masthead"]//h2')->get_text(), "Dashboard");
ok(1, "Login Successful");
}
method select_if_unselected(Str $query, Str $scheme = "xpath") { method select_if_unselected(Str $query, Str $scheme = "xpath") {
my $elem = $self->find_element($query, $scheme); my $elem = $self->find_element($query, $scheme);
return 0 unless $elem; return 0 unless $elem;
@ -19,15 +51,6 @@ method find_text(Str $text, Str $scheme = "xpath") {
return $self->find_element("//*[contains(text(),\"$text\")]", $scheme); return $self->find_element("//*[contains(text(),\"$text\")]", $scheme);
} }
method save_screenshot() {
use MIME::Base64;
open(my $FH,'>','screenshot.png');
binmode $FH;
my $png_base64 = $self->screenshot();
print $FH decode_base64($png_base64);
close $FH;
}
method fill_element(Str $query, Str $scheme, Str $filltext) { method fill_element(Str $query, Str $scheme, Str $filltext) {
my $elem = $self->find_element($query, $scheme); my $elem = $self->find_element($query, $scheme);
return 0 unless $elem; return 0 unless $elem;

@ -1,31 +1,18 @@
use warnings;
use strict;
use lib 't/lib'; use lib 't/lib';
use Test::More import => [qw(done_testing is diag)]; use Test::More import => [qw(done_testing is diag)];
use Selenium::Remote::Driver::Extensions qw(); use Selenium::Remote::Driver::Extensions qw();
diag("Init"); diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new ( my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername, 'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} ); 'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)"); $d->login_ok();
$d->set_window_size(1024,1280) if ($browsername ne "htmlunit");
$d->get("$uri/logout"); # make sure we are logged out
$d->get("$uri/login");
$d->set_implicit_wait_timeout(10000);
$d->default_finder('xpath');
diag("Do Admin Login");
$d->find_text("Admin Sign In");
is($d->get_title, '');
$d->find_element('username', name)->send_keys('administrator');
$d->find_element('password', name)->send_keys('administrator');
$d->find_element('submit', name)->click();
diag("Checking Admin interface");
is($d->get_title, 'Dashboard');
is($d->find_element('//*[@id="masthead"]//h2','xpath')->get_text(), "Dashboard");
diag("Done: admin-login.t"); diag("Done: admin-login.t");
done_testing; done_testing;
# vim: filetype=perl

@ -1,51 +1,40 @@
use warnings;
use strict;
use lib 't/lib'; use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag todo_skip)]; use Test::More import => [qw(done_testing is ok diag todo_skip)];
use Selenium::Remote::Driver::Extensions qw(); use Selenium::Remote::Driver::Extensions qw();
diag("Init"); diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new ( my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername, 'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} ); 'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)"); $d->login_ok();
$d->set_window_size(1024,1280) if ($browsername ne "htmlunit");
$d->get("$uri/logout"); # make sure we are logged out
$d->get("$uri/login");
$d->set_implicit_wait_timeout(10000);
$d->default_finder('xpath');
diag("Do Admin Login");
$d->find_text("Admin Sign In");
is($d->get_title, '');
$d->find_element('username', name)->send_keys('administrator');
$d->find_element('password', name)->send_keys('administrator');
$d->find_element('submit', name)->click();
is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Dashboard");
diag("Go to Billing page"); diag("Go to Billing page");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click(); $d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
$d->find_element('//a[contains(@href,"/domain")]'); $d->find_element('//a[contains(@href,"/domain")]');
$d->find_element("Billing", link_text)->click(); $d->find_element("Billing", 'link_text')->click();
diag("Create a billing profile"); diag("Create a billing profile");
$d->find_element('//*[@id="masthead"]//h2[contains(text(),"Billing Profiles")]')->click(); $d->find_element('//*[@id="masthead"]//h2[contains(text(),"Billing Profiles")]')->click();
$d->find_element('Create Billing Profile', link_text)->click(); $d->find_element('Create Billing Profile', 'link_text')->click();
$d->find_element('name', id)->send_keys('mytestprofile'); $d->find_element('name', 'id')->send_keys('mytestprofile');
$d->fill_element('handle', name, 'mytestprofile'); $d->fill_element('handle', 'name', 'mytestprofile');
$d->find_element('fraud_interval_lock', id); $d->find_element('fraud_interval_lock', 'id');
$d->find_element('//select[@id="fraud_interval_lock"]/option[contains(text(),"foreign calls")]')->click(); $d->find_element('//select[@id="fraud_interval_lock"]/option[contains(text(),"foreign calls")]')->click();
$d->find_element('//div[contains(@class,modal-body)]//table[@id="reselleridtable"]/tbody/tr[1]/td//input[@type="checkbox"]')->click(); $d->find_element('//div[contains(@class,modal-body)]//table[@id="reselleridtable"]/tbody/tr[1]/td//input[@type="checkbox"]')->click();
$d->find_element('//div[contains(@class,"modal")]//input[@type="submit"]')->click(); $d->find_element('//div[contains(@class,"modal")]//input[@type="submit"]')->click();
diag("Search nonexisting billing profile"); diag("Search nonexisting billing profile");
my $searchfield = $d->find_element('#billing_profile_table_filter label input', css); my $searchfield = $d->find_element('#billing_profile_table_filter label input', 'css');
ok($searchfield); ok($searchfield);
$searchfield->send_keys('donotfindme'); $searchfield->send_keys('donotfindme');
diag("Verify that nothing is shown"); diag("Verify that nothing is shown");
my $elem = $d->find_element('#billing_profile_table td.dataTables_empty', css); my $elem = $d->find_element('#billing_profile_table td.dataTables_empty', 'css');
ok($elem); ok($elem);
is($elem->get_text, 'No matching records found'); is($elem->get_text, 'No matching records found');
@ -65,11 +54,11 @@ $d->move_to(element => $row);
$edit_link->click(); $edit_link->click();
diag("Edit mytestprofile"); diag("Edit mytestprofile");
$elem = $d->find_element('name', id); $elem = $d->find_element('name', 'id');
ok($elem); ok($elem);
is($elem->get_value, "mytestprofile"); is($elem->get_value, "mytestprofile");
$d->fill_element('interval_charge', id, '3.2'); $d->fill_element('interval_charge', 'id', '3.2');
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
diag('Open "Fees" for mytestprofile'); diag('Open "Fees" for mytestprofile');
$row = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestprofile")]/..'); $row = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestprofile")]/..');
@ -81,52 +70,50 @@ $edit_link->click();
$d->find_element('//*[@id="masthead"]//h2[contains(text(),"Billing Fees")]'); $d->find_element('//*[@id="masthead"]//h2[contains(text(),"Billing Fees")]');
diag("Create a billing fee"); diag("Create a billing fee");
$d->find_element('Create Fee Entry', link_text)->click(); $d->find_element('Create Fee Entry', 'link_text')->click();
$d->find_element('//div[contains(@class,"modal")]//input[@value="Create Zone"]')->click(); $d->find_element('//div[contains(@class,"modal")]//input[@value="Create Zone"]')->click();
diag("Create a billing zone (redirect from previous form)"); diag("Create a billing zone (redirect from previous form)");
$d->fill_element('zone', name, 'testingzone'); $d->fill_element('zone', 'name', 'testingzone');
$d->fill_element('detail', name, 'testingdetail'); $d->fill_element('detail', 'name', 'testingdetail');
$d->find_element('save', name)->click(); $d->find_element('save', 'name')->click();
diag("Back to orignial form (create billing fees)"); diag("Back to orignial form (create billing fees)");
#sleep 2; # give ajax time to load #sleep 2; # give ajax time to load
$d->select_if_unselected('//div[contains(@class,"modal")]//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingzone")]/..//input[@type="checkbox"]'); $d->select_if_unselected('//div[contains(@class,"modal")]//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingzone")]/..//input[@type="checkbox"]');
$d->fill_element('source', id, '.*'); $d->fill_element('source', 'id', '.*');
$d->fill_element('destination', name, '.+'); $d->fill_element('destination', 'name', '.+');
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
diag("Delete billing fee"); diag("Delete billing fee");
$d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingdetail")]/..//a[contains(@class,"btn-primary") and contains(text(),"Edit")]'); $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingdetail")]/..//a[contains(@class,"btn-primary") and contains(text(),"Edit")]');
$row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingdetail")]/..'); $row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingdetail")]/..');
ok($row); ok($row, "Find row");
ok(true, "test1");
$d->move_to(element => $row); $d->move_to(element => $row);
ok(true, "test2"); ok(1, "Mouse over row");
$d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingdetail")]/..//a[contains(@class,"btn-secondary") and contains(text(),"Delete")]')->click(); $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingdetail")]/..//a[contains(@class,"btn-secondary") and contains(text(),"Delete")]')->click();
ok(true, "test3"); ok($d->find_text("Are you sure?"));
$d->find_text("Are you sure?"); $d->find_element('dataConfirmOK', 'id')->click();
$d->find_element('dataConfirmOK', id)->click();
diag('skip was here'); diag('skip was here');
$d->find_text("successfully deleted"); ok($d->find_text("successfully deleted"));
diag("Click Edit Zones"); diag("Click Edit Zones");
$d->find_element("Edit Zones", link_text)->click(); $d->find_element("Edit Zones", 'link_text')->click();
ok($d->find_element('//*[@id="masthead"]//h2[contains(text(),"Billing Zones")]')); ok($d->find_element('//*[@id="masthead"]//h2[contains(text(),"Billing Zones")]'));
diag("Delete testingzone"); diag("Delete testingzone");
$d->fill_element('//div[contains(@class, "dataTables_filter")]//input', xpath, 'thisshouldnotexist'); $d->fill_element('//div[contains(@class, "dataTables_filter")]//input', 'xpath', 'thisshouldnotexist');
$d->find_element('#billing_zone_table tr > td.dataTables_empty', css); $d->find_element('#billing_zone_table tr > td.dataTables_empty', 'css');
$d->fill_element('//div[contains(@class, "dataTables_filter")]//input', xpath, 'testingdetail'); $d->fill_element('//div[contains(@class, "dataTables_filter")]//input', 'xpath', 'testingdetail');
$row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingzone")]/..'); $row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingzone")]/..');
ok($row); ok($row);
$d->move_to(element => $row); $d->move_to(element => $row);
$d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingzone")]/..//a[contains(text(),"Delete")]')->click(); $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingzone")]/..//a[contains(text(),"Delete")]')->click();
$d->find_text("Are you sure?"); $d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click(); $d->find_element('dataConfirmOK', 'id')->click();
diag("Go to Billing page (again)"); diag("Go to Billing page (again)");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click(); $d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
ok($d->find_element('//a[contains(@href,"/domain")]')); ok($d->find_element('//a[contains(@href,"/domain")]'));
$d->find_element("Billing", link_text)->click(); $d->find_element("Billing", 'link_text')->click();
diag('Open "Edit Peak Times" for mytestprofile'); diag('Open "Edit Peak Times" for mytestprofile');
$row = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestprofile")]/..'); $row = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestprofile")]/..');
@ -147,19 +134,19 @@ $d->find_element('//table//td[contains(text(),"Wednesday")]/..//a[text()[contain
$d->find_text("Edit Wednesday"); $d->find_text("Edit Wednesday");
diag("add/delete a time def to Wednesday"); diag("add/delete a time def to Wednesday");
$d->fill_element('start', name, "03:14:15"); $d->fill_element('start', 'name', "03:14:15");
$d->fill_element('end', name, "13:37:00"); $d->fill_element('end', 'name', "13:37:00");
$d->find_element('add', name)->click(); $d->find_element('add', 'name')->click();
$d->find_element('//div[contains(@class,"modal")]//i[@class="icon-trash"]/..')->click(); $d->find_element('//div[contains(@class,"modal")]//i[@class="icon-trash"]/..')->click();
diag('skip was here'); diag('skip was here');
$d->find_element('mod_close', id)->click(); $d->find_element('mod_close', 'id')->click();
diag("Create a Date Definition"); diag("Create a Date Definition");
$d->find_element('Create Special Off-Peak Date', link_text)->click(); $d->find_element('Create Special Off-Peak Date', 'link_text')->click();
$d->fill_element('start', name, "2008-02-28 03:14:15"); $d->fill_element('start', 'name', "2008-02-28 03:14:15");
$d->fill_element('end', name, "2008-02-28 13:37:00"); $d->fill_element('end', 'name', "2008-02-28 13:37:00");
$d->find_element('save', name)->click(); $d->find_element('save', 'name')->click();
diag("Find/delete my created date definition"); diag("Find/delete my created date definition");
$row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"2008-02-28")]/..'); $row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"2008-02-28")]/..');
@ -170,7 +157,7 @@ ok($edit_link);
sleep 2 if ($browsername eq "htmlunit"); sleep 2 if ($browsername eq "htmlunit");
$edit_link->click(); $edit_link->click();
$d->find_text("Are you sure?"); $d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click(); $d->find_element('dataConfirmOK', 'id')->click();
done_testing; done_testing;
# vim: filetype=perl # vim: filetype=perl

@ -1,28 +1,17 @@
use strict;
use warnings;
use lib 't/lib'; use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag todo_skip)]; use Test::More import => [qw(done_testing is ok diag todo_skip)];
use Selenium::Remote::Driver::Extensions qw(); use Selenium::Remote::Driver::Extensions qw();
diag("Init"); diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new ( my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername, 'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} ); 'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)"); $d->login_ok();
$d->set_window_size(1024,1280) if ($browsername ne "htmlunit");
$d->get("$uri/logout"); # make sure we are logged out
$d->get("$uri/login");
$d->set_implicit_wait_timeout(10000);
$d->default_finder('xpath');
diag("Do Admin Login");
$d->find_text("Admin Sign In");
is($d->get_title, '');
$d->find_element('username', name)->send_keys('administrator');
$d->find_element('password', name)->send_keys('administrator');
$d->find_element('submit', name)->click();
is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Dashboard");
my @chars = ("A".."Z", "a".."z"); my @chars = ("A".."Z", "a".."z");
my $rnd_id; my $rnd_id;
@ -30,30 +19,30 @@ $rnd_id .= $chars[rand @chars] for 1..8;
diag("Go to Customers page"); diag("Go to Customers page");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click(); $d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
$d->find_element("Customers", link_text)->click(); $d->find_element("Customers", 'link_text')->click();
diag("Create a Customer"); diag("Create a Customer");
$d->find_element('//*[@id="masthead"]//h2[contains(text(),"Customers")]'); $d->find_element('//*[@id="masthead"]//h2[contains(text(),"Customers")]');
$d->find_element('Create Customer', link_text)->click(); $d->find_element('Create Customer', 'link_text')->click();
$d->fill_element('#contactidtable_filter input', css, 'thisshouldnotexist'); $d->fill_element('#contactidtable_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#contactidtable tr > td.dataTables_empty', css); $d->find_element('#contactidtable tr > td.dataTables_empty', 'css');
$d->fill_element('#contactidtable_filter input', css, 'default-customer'); $d->fill_element('#contactidtable_filter input', 'css', 'default-customer');
$d->select_if_unselected('//table[@id="contactidtable"]/tbody/tr[1]/td[contains(text(),"default-customer")]/..//input[@type="checkbox"]'); $d->select_if_unselected('//table[@id="contactidtable"]/tbody/tr[1]/td[contains(text(),"default-customer")]/..//input[@type="checkbox"]');
$d->fill_element('#billing_profileidtable_filter input', css, 'thisshouldnotexist'); $d->fill_element('#billing_profileidtable_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#billing_profileidtable tr > td.dataTables_empty', css); $d->find_element('#billing_profileidtable tr > td.dataTables_empty', 'css');
$d->fill_element('#billing_profileidtable_filter input', css, 'Default Billing Profile'); $d->fill_element('#billing_profileidtable_filter input', 'css', 'Default Billing Profile');
$d->select_if_unselected('//table[@id="billing_profileidtable"]/tbody/tr[1]/td[contains(text(),"Default Billing Profile")]/..//input[@type="checkbox"]'); $d->select_if_unselected('//table[@id="billing_profileidtable"]/tbody/tr[1]/td[contains(text(),"Default Billing Profile")]/..//input[@type="checkbox"]');
eval { #lets only try this eval { #lets only try this
$d->select_if_unselected('//table[@id="productidtable"]/tbody/tr[1]/td[contains(text(),"Basic SIP Account")]/..//input[@type="checkbox"]'); $d->select_if_unselected('//table[@id="productidtable"]/tbody/tr[1]/td[contains(text(),"Basic SIP Account")]/..//input[@type="checkbox"]');
}; };
$d->fill_element('external_id', id, $rnd_id); $d->fill_element('external_id', 'id', $rnd_id);
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
diag("Open Details for our just created Customer"); diag("Open Details for our just created Customer");
sleep 2; #Else we might search on the previous page sleep 2; #Else we might search on the previous page
$d->fill_element('#Customer_table_filter input', css, 'thisshouldnotexist'); $d->fill_element('#Customer_table_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#Customer_table tr > td.dataTables_empty', css); $d->find_element('#Customer_table tr > td.dataTables_empty', 'css');
$d->fill_element('#Customer_table_filter input', css, $rnd_id); $d->fill_element('#Customer_table_filter input', 'css', $rnd_id);
my $row = $d->find_element('(//table/tbody/tr/td[contains(text(), "'.$rnd_id.'")]/..)[1]'); my $row = $d->find_element('(//table/tbody/tr/td[contains(text(), "'.$rnd_id.'")]/..)[1]');
ok($row); ok($row);
my $edit_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Details")]'); my $edit_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Details")]');
@ -64,15 +53,15 @@ $edit_link->click();
diag("Edit our contact"); diag("Edit our contact");
$d->find_element('//div[contains(@class,"accordion-heading")]//a[contains(text(),"Contact Details")]')->click(); $d->find_element('//div[contains(@class,"accordion-heading")]//a[contains(text(),"Contact Details")]')->click();
$d->find_element('//div[contains(@class,"accordion-body")]//*[contains(@class,"btn-primary") and contains(text(),"Edit Contact")]')->click(); $d->find_element('//div[contains(@class,"accordion-body")]//*[contains(@class,"btn-primary") and contains(text(),"Edit Contact")]')->click();
$d->fill_element('div.modal #firstname', css, "Alice"); $d->fill_element('div.modal #firstname', 'css', "Alice");
$d->fill_element('company', id, 'Sipwise'); $d->fill_element('company', 'id', 'Sipwise');
# Choosing Country: # Choosing Country:
$d->fill_element('#countryidtable_filter input', css, 'thisshouldnotexist'); $d->fill_element('#countryidtable_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#countryidtable tr > td.dataTables_empty', css); $d->find_element('#countryidtable tr > td.dataTables_empty', 'css');
$d->fill_element('#countryidtable_filter input', css, 'Ukraine'); $d->fill_element('#countryidtable_filter input', 'css', 'Ukraine');
$d->select_if_unselected('//table[@id="countryidtable"]/tbody/tr[1]/td[contains(text(),"Ukraine")]/..//input[@type="checkbox"]'); $d->select_if_unselected('//table[@id="countryidtable"]/tbody/tr[1]/td[contains(text(),"Ukraine")]/..//input[@type="checkbox"]');
# Save # Save
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
diag("Check if successful"); diag("Check if successful");
$d->find_element('//div[contains(@class,"accordion-body")]//table//td[contains(text(),"Sipwise")]'); $d->find_element('//div[contains(@class,"accordion-body")]//table//td[contains(text(),"Sipwise")]');
@ -88,16 +77,16 @@ $d->move_to(element => $row);
$edit_link->click(); $edit_link->click();
diag("Do Edit Fraud Limits"); diag("Do Edit Fraud Limits");
$d->fill_element('fraud_interval_limit', id, "100"); $d->fill_element('fraud_interval_limit', 'id', "100");
$d->fill_element('fraud_interval_notify', id, 'mymail@example.org'); $d->fill_element('fraud_interval_notify', 'id', 'mymail@example.org');
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
$d->find_element('//div[contains(@class,"accordion-body")]//table//td[contains(text(),"mymail@example.org")]'); $d->find_element('//div[contains(@class,"accordion-body")]//table//td[contains(text(),"mymail@example.org")]');
diag("Terminate our customer"); diag("Terminate our customer");
$d->find_element('//a[contains(@class,"btn-primary") and text()[contains(.,"Back")]]')->click(); $d->find_element('//a[contains(@class,"btn-primary") and text()[contains(.,"Back")]]')->click();
$d->fill_element('#Customer_table_filter input', css, 'thisshouldnotexist'); $d->fill_element('#Customer_table_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#Customer_table tr > td.dataTables_empty', css); $d->find_element('#Customer_table tr > td.dataTables_empty', 'css');
$d->fill_element('#Customer_table_filter input', css, $rnd_id); $d->fill_element('#Customer_table_filter input', 'css', $rnd_id);
$row = $d->find_element('(//table/tbody/tr/td[contains(text(), "'.$rnd_id.'")]/..)[1]'); $row = $d->find_element('(//table/tbody/tr/td[contains(text(), "'.$rnd_id.'")]/..)[1]');
ok($row); ok($row);
$edit_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Terminate")]'); $edit_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Terminate")]');
@ -106,7 +95,7 @@ $d->move_to(element => $row);
$edit_link->click(); $edit_link->click();
#sleep 2; #sleep 2;
$d->find_text("Are you sure?"); $d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click(); $d->find_element('dataConfirmOK', 'id')->click();
$d->find_text("Customer successfully terminated"); $d->find_text("Customer successfully terminated");
done_testing; done_testing;

@ -1,34 +1,23 @@
use warnings;
use strict;
use lib 't/lib'; use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag skip)]; use Test::More import => [qw(done_testing is ok diag skip like)];
use Selenium::Remote::Driver::Extensions qw(); use Selenium::Remote::Driver::Extensions qw();
use TryCatch; use TryCatch;
diag("Init"); diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new ( my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername, 'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} ); 'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)"); $d->login_ok();
$d->set_window_size(1024,1280) if ($browsername ne "htmlunit");
$d->get("$uri/logout"); # make sure we are logged out
$d->get("$uri/login");
$d->set_implicit_wait_timeout(10000);
$d->default_finder('xpath');
diag("Do Admin Login");
$d->find_text("Admin Sign In");
is($d->get_title, '');
$d->find_element('username', name)->send_keys('administrator');
$d->find_element('password', name)->send_keys('administrator');
$d->find_element('submit', name)->click();
is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Dashboard");
diag("Go to Domains page"); diag("Go to Domains page");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click(); $d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
$d->find_element('//a[contains(@href,"/domain")]'); $d->find_element('//a[contains(@href,"/domain")]');
$d->find_element('Domains', link_text)->click(); $d->find_element('Domains', 'link_text')->click();
diag("Domains page"); diag("Domains page");
is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Domains"); is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Domains");
@ -38,7 +27,7 @@ SKIP: {
my ($row, $edit_link); my ($row, $edit_link);
try { try {
$row = $d->find_element('//table[@id="Domain_table"]/tbody/tr[1]', xpath); $row = $d->find_element('//table[@id="Domain_table"]/tbody/tr[1]');
$edit_link = $d->find_element('(//table[@id="Domain_table"]/tbody/tr[1]/td//a)[contains(text(),"Preferences")]'); $edit_link = $d->find_element('(//table[@id="Domain_table"]/tbody/tr[1]/td//a)[contains(text(),"Preferences")]');
} catch { } catch {
skip ("It seems, no domains exist", 1); skip ("It seems, no domains exist", 1);
@ -49,8 +38,8 @@ SKIP: {
$edit_link->click(); $edit_link->click();
diag('Open the tab "Access Restrictions"'); diag('Open the tab "Access Restrictions"');
#$d->location_ok(qr!domain/\d+/preferences!); #/ # FIXME like($d->get_path, qr!domain/\d+/preferences!);
$d->find_element("Access Restrictions", link_text)->click(); $d->find_element("Access Restrictions", 'link_text')->click();
diag("Click edit for the preference concurrent_max"); diag("Click edit for the preference concurrent_max");
sleep 1; sleep 1;
@ -62,19 +51,19 @@ SKIP: {
$edit_link->click(); $edit_link->click();
diag("Try to change this to a value which is not a number"); diag("Try to change this to a value which is not a number");
my $formfield = $d->find_element('concurrent_max', id); my $formfield = $d->find_element('concurrent_max', 'id');
ok($formfield); ok($formfield);
$formfield->clear(); $formfield->clear();
$formfield->send_keys('thisisnonumber'); $formfield->send_keys('thisisnonumber');
$d->find_element("save", id)->click(); $d->find_element("save", 'id')->click();
diag('Type 789 and click Save'); diag('Type 789 and click Save');
$d->find_text('Value must be an integer'); $d->find_text('Value must be an integer');
$formfield = $d->find_element('concurrent_max', id); $formfield = $d->find_element('concurrent_max', 'id');
ok($formfield); ok($formfield);
$formfield->clear(); $formfield->clear();
$formfield->send_keys('789'); $formfield->send_keys('789');
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
} }
done_testing; done_testing;

@ -1,37 +1,26 @@
use warnings;
use strict;
use lib 't/lib'; use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag todo_skip)]; use Test::More import => [qw(done_testing is ok diag todo_skip)];
use Selenium::Remote::Driver::Extensions qw(); use Selenium::Remote::Driver::Extensions qw();
diag("Init"); diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new ( my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername, 'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} ); 'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)"); $d->login_ok();
$d->set_window_size(1024,1280) if ($browsername ne "htmlunit");
$d->get("$uri/logout"); # make sure we are logged out
$d->get("$uri/login");
$d->set_implicit_wait_timeout(10000);
$d->default_finder('xpath');
diag("Do Admin Login");
$d->find_text("Admin Sign In");
is($d->get_title, '');
$d->find_element('username', name)->send_keys('administrator');
$d->find_element('password', name)->send_keys('administrator');
$d->find_element('submit', name)->click();
is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Dashboard");
diag("Go to Peerings page"); diag("Go to Peerings page");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click(); $d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
$d->find_element("Peerings", link_text)->click(); $d->find_element("Peerings", 'link_text')->click();
diag("Create a Peering Group"); diag("Create a Peering Group");
$d->find_element('//*[@id="masthead"]//h2[contains(text(),"SIP Peering Groups")]'); $d->find_element('//*[@id="masthead"]//h2[contains(text(),"SIP Peering Groups")]');
my $peerings_uri = $d->get_current_url(); my $peerings_uri = $d->get_current_url();
$d->find_element('Create Peering Group', link_text)->click(); $d->find_element('Create Peering Group', 'link_text')->click();
diag("Create a Peering Contract"); diag("Create a Peering Contract");
$d->find_element('//input[@type="button" and @value="Create Contract"]')->click(); $d->find_element('//input[@type="button" and @value="Create Contract"]')->click();
@ -41,10 +30,10 @@ $d->find_element('//div[contains(@class,"modal-body")]//div//select[@id="status"
$d->find_element('//div[contains(@class,"modal")]//input[@type="submit"]')->click(); $d->find_element('//div[contains(@class,"modal")]//input[@type="submit"]')->click();
$d->find_text('Create Peering Group'); # Should go back to prev form $d->find_text('Create Peering Group'); # Should go back to prev form
$d->fill_element('name', id, 'testinggroup'); $d->fill_element('name', 'id', 'testinggroup');
$d->fill_element('description', id, 'A group created for testing purposes'); $d->fill_element('description', 'id', 'A group created for testing purposes');
$d->select_if_unselected('//table[@id="contractidtable"]/tbody/tr[1]//input[@type="checkbox"]'); $d->select_if_unselected('//table[@id="contractidtable"]/tbody/tr[1]//input[@type="checkbox"]');
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
diag("Edit Servers/Rules of testinggroup"); diag("Edit Servers/Rules of testinggroup");
my $row = $d->find_element('(//table/tbody/tr/td[contains(text(), "testinggroup")]/..)[1]'); my $row = $d->find_element('(//table/tbody/tr/td[contains(text(), "testinggroup")]/..)[1]');
@ -56,27 +45,27 @@ $edit_link->click();
diag("Create a Peering Rule"); diag("Create a Peering Rule");
$d->find_element('//a[contains(text(),"Create Peering Rule")]')->click(); $d->find_element('//a[contains(text(),"Create Peering Rule")]')->click();
$d->fill_element('callee_prefix', id, '43'); $d->fill_element('callee_prefix', 'id', '43');
$d->fill_element('callee_pattern', id, '^sip'); $d->fill_element('callee_pattern', 'id', '^sip');
$d->fill_element('caller_pattern', id, '999'); $d->fill_element('caller_pattern', 'id', '999');
$d->fill_element('description', id, 'for testing purposes'); $d->fill_element('description', 'id', 'for testing purposes');
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
diag("Create a Peering Server"); diag("Create a Peering Server");
$d->find_element('//a[contains(text(),"Create Peering Server")]')->click(); $d->find_element('//a[contains(text(),"Create Peering Server")]')->click();
$d->fill_element('name', id, 'mytestserver'); $d->fill_element('name', 'id', 'mytestserver');
$d->fill_element('ip', id, '10.0.0.100'); $d->fill_element('ip', 'id', '10.0.0.100');
$d->fill_element('host', id, 'sipwise.com'); $d->fill_element('host', 'id', 'sipwise.com');
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
$d->find_text('Peering server successfully created'); $d->find_text('Peering server successfully created');
my $server_rules_uri = $d->get_current_url(); my $server_rules_uri = $d->get_current_url();
diag('Edit Preferences for "mytestserver".'); diag('Edit Preferences for "mytestserver".');
sleep 1; #make sure, we are on the right page sleep 1; #make sure, we are on the right page
$d->fill_element('#peering_servers_table_filter input', css, 'thisshouldnotexist'); $d->fill_element('#peering_servers_table_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#peering_servers_table tr > td.dataTables_empty', css); $d->find_element('#peering_servers_table tr > td.dataTables_empty', 'css');
$d->fill_element('#peering_servers_table_filter input', css, 'mytestserver'); $d->fill_element('#peering_servers_table_filter input', 'css', 'mytestserver');
$edit_link = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestserver")]/../td//a[contains(text(),"Preferences")]'); $edit_link = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestserver")]/../td//a[contains(text(),"Preferences")]');
$row = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestserver")]/..'); $row = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestserver")]/..');
ok($row); ok($row);
@ -85,7 +74,7 @@ $d->move_to(element => $row);
$edit_link->click(); $edit_link->click();
diag('Open the tab "Number Manipulations"'); diag('Open the tab "Number Manipulations"');
$d->find_element("Number Manipulations", link_text)->click(); $d->find_element("Number Manipulations", 'link_text')->click();
diag("Click edit for the preference inbound_upn"); diag("Click edit for the preference inbound_upn");
$row = $d->find_element('//table/tbody/tr/td[normalize-space(text()) = "inbound_upn"]'); $row = $d->find_element('//table/tbody/tr/td[normalize-space(text()) = "inbound_upn"]');
@ -97,7 +86,7 @@ $edit_link->click();
diag('Change to "P-Asserted-Identity'); diag('Change to "P-Asserted-Identity');
$d->find_element('//div[contains(@class,"modal-body")]//select[@id="inbound_upn"]/option[@value="pai_user"]')->click(); $d->find_element('//div[contains(@class,"modal-body")]//select[@id="inbound_upn"]/option[@value="pai_user"]')->click();
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
$d->find_text('Preference inbound_upn successfully updated'); $d->find_text('Preference inbound_upn successfully updated');
diag("Go back to Servers/Rules"); diag("Go back to Servers/Rules");
@ -107,9 +96,9 @@ my $delete_link;
diag('skip was here'); diag('skip was here');
diag("Delete mytestserver"); diag("Delete mytestserver");
sleep 1; #make sure, we are on the right page sleep 1; #make sure, we are on the right page
$d->fill_element('#peering_servers_table_filter input', css, 'thisshouldnotexist'); $d->fill_element('#peering_servers_table_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#peering_servers_table tr > td.dataTables_empty', css); $d->find_element('#peering_servers_table tr > td.dataTables_empty', 'css');
$d->fill_element('#peering_servers_table_filter input', css, 'mytestserver'); $d->fill_element('#peering_servers_table_filter input', 'css', 'mytestserver');
$row = $d->find_element('(//table/tbody/tr/td[contains(text(), "mytestserver")]/..)[1]'); $row = $d->find_element('(//table/tbody/tr/td[contains(text(), "mytestserver")]/..)[1]');
ok($row); ok($row);
$delete_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Delete")]'); $delete_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Delete")]');
@ -117,7 +106,7 @@ ok($delete_link);
$d->move_to(element => $row); $d->move_to(element => $row);
$delete_link->click(); $delete_link->click();
$d->find_text("Are you sure?"); $d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click(); $d->find_element('dataConfirmOK', 'id')->click();
$d->find_text("successfully deleted"); # delete does not work $d->find_text("successfully deleted"); # delete does not work
diag("Delete the previously created Peering Rule"); diag("Delete the previously created Peering Rule");
@ -129,10 +118,10 @@ ok($delete_link);
$d->move_to(element => $row); $d->move_to(element => $row);
$delete_link->click(); $delete_link->click();
$d->find_text("Are you sure?"); $d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click(); $d->find_element('dataConfirmOK', 'id')->click();
diag('skip was here'); diag('skip was here');
$d->find_text("successfully deleted"); ok($d->find_text("successfully deleted"));
diag('Go back to "SIP Peering Groups".'); diag('Go back to "SIP Peering Groups".');
$d->get($peerings_uri); $d->get($peerings_uri);
@ -145,10 +134,10 @@ ok($delete_link);
$d->move_to(element => $row); $d->move_to(element => $row);
$delete_link->click(); $delete_link->click();
$d->find_text("Are you sure?"); $d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click(); $d->find_element('dataConfirmOK', 'id')->click();
diag('skip was here'); diag('skip was here');
$d->find_text("successfully deleted"); ok($d->find_text("successfully deleted"));
done_testing; done_testing;
# vim: filetype=perl # vim: filetype=perl

@ -1,54 +1,43 @@
use warnings;
use strict;
use lib 't/lib'; use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag)]; use Test::More import => [qw(done_testing is ok diag)];
use Selenium::Remote::Driver::Extensions qw(); use Selenium::Remote::Driver::Extensions qw();
diag("Init"); diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new ( my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername, 'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} ); 'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)"); $d->login_ok();
$d->set_window_size(1024,1280) if ($browsername ne "htmlunit");
$d->get("$uri/logout"); # make sure we are logged out
$d->get("$uri/login");
$d->set_implicit_wait_timeout(10000);
$d->default_finder('xpath');
diag("Do Admin Login");
$d->find_text("Admin Sign In");
is($d->get_title, '');
$d->find_element('username', name)->send_keys('administrator');
$d->find_element('password', name)->send_keys('administrator');
$d->find_element('submit', name)->click();
is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Dashboard");
diag("Go to reseller list"); diag("Go to reseller list");
$d->find_element('//a[@class="btn" and contains(@href,"/reseller")]')->click(); $d->find_element('//a[@class="btn" and contains(@href,"/reseller")]')->click();
diag("Search nonexisting reseller"); diag("Search nonexisting reseller");
my $searchfield = $d->find_element('#Resellers_table_filter label input', css); my $searchfield = $d->find_element('#Resellers_table_filter label input', 'css');
ok($searchfield); ok($searchfield);
$searchfield->send_keys('donotfindme'); $searchfield->send_keys('donotfindme');
diag("Verify that nothing is shown"); diag("Verify that nothing is shown");
my $elem = $d->find_element('#Resellers_table td.dataTables_empty', css); my $elem = $d->find_element('#Resellers_table td.dataTables_empty', 'css');
ok($elem); ok($elem);
is($elem->get_text,'No matching records found'); is($elem->get_text,'No matching records found');
diag('Search for "1" in resellers'); diag('Search for "1" in resellers');
$searchfield->clear(); $searchfield->clear();
$searchfield->send_keys('active'); $searchfield->send_keys('active');
$d->find_element('#Resellers_table tr.sw_action_row', css); $d->find_element('#Resellers_table tr.sw_action_row', 'css');
is($d->find_element('//table[@id="Resellers_table"]//tr[1]/td[1]')->get_text(), '1'); is($d->find_element('//table[@id="Resellers_table"]//tr[1]/td[1]')->get_text(), '1');
diag("Going to create a reseller"); diag("Going to create a reseller");
$d->find_element('Create Reseller', link_text)->click(); $d->find_element('Create Reseller', 'link_text')->click();
$d->find_element('save', id)->click(); $d->find_element('save', 'id')->click();
$d->find_text("Contract field is required"); $d->find_text("Contract field is required");
$d->find_text("Name field is required"); $d->find_text("Name field is required");
$d->find_element('mod_close', id)->click(); $d->find_element('mod_close', 'id')->click();
diag("Click Edit on the first reseller shown (first row)"); diag("Click Edit on the first reseller shown (first row)");
sleep 1; #prevent a StaleElementReferenceException sleep 1; #prevent a StaleElementReferenceException
@ -59,7 +48,7 @@ my $btn = $d->find_child_element($row, './/a[contains(text(),"Edit")]');
ok($btn); ok($btn);
$btn->click(); $btn->click();
#is($d->find_element("name", id)->get_attribute("value"), "reseller 1"); #is($d->find_element("name", id)->get_attribute("value"), "reseller 1");
$d->find_element('mod_close', id)->click(); $d->find_element('mod_close', 'id')->click();
diag("Click Terminate on the first reseller shown"); diag("Click Terminate on the first reseller shown");
sleep 1; #prevent a StaleElementReferenceException sleep 1; #prevent a StaleElementReferenceException

Loading…
Cancel
Save