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 strict;
use Moo;
use Test::More import => [qw(diag ok is)];
use MooseX::Method::Signatures;
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") {
my $elem = $self->find_element($query, $scheme);
return 0 unless $elem;
@ -19,15 +51,6 @@ method find_text(Str $text, Str $scheme = "xpath") {
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) {
my $elem = $self->find_element($query, $scheme);
return 0 unless $elem;

@ -1,31 +1,18 @@
use warnings;
use strict;
use lib 't/lib';
use Test::More import => [qw(done_testing is diag)];
use Selenium::Remote::Driver::Extensions qw();
diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)");
$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");
$d->login_ok();
diag("Done: admin-login.t");
done_testing;
# vim: filetype=perl

@ -1,51 +1,40 @@
use warnings;
use strict;
use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag todo_skip)];
use Selenium::Remote::Driver::Extensions qw();
diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)");
$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");
$d->login_ok();
diag("Go to Billing page");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
$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");
$d->find_element('//*[@id="masthead"]//h2[contains(text(),"Billing Profiles")]')->click();
$d->find_element('Create Billing Profile', link_text)->click();
$d->find_element('name', id)->send_keys('mytestprofile');
$d->fill_element('handle', name, 'mytestprofile');
$d->find_element('fraud_interval_lock', id);
$d->find_element('Create Billing Profile', 'link_text')->click();
$d->find_element('name', 'id')->send_keys('mytestprofile');
$d->fill_element('handle', 'name', 'mytestprofile');
$d->find_element('fraud_interval_lock', 'id');
$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")]//input[@type="submit"]')->click();
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);
$searchfield->send_keys('donotfindme');
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);
is($elem->get_text, 'No matching records found');
@ -65,11 +54,11 @@ $d->move_to(element => $row);
$edit_link->click();
diag("Edit mytestprofile");
$elem = $d->find_element('name', id);
$elem = $d->find_element('name', 'id');
ok($elem);
is($elem->get_value, "mytestprofile");
$d->fill_element('interval_charge', id, '3.2');
$d->find_element('save', id)->click();
$d->fill_element('interval_charge', 'id', '3.2');
$d->find_element('save', 'id')->click();
diag('Open "Fees" for 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")]');
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();
diag("Create a billing zone (redirect from previous form)");
$d->fill_element('zone', name, 'testingzone');
$d->fill_element('detail', name, 'testingdetail');
$d->find_element('save', name)->click();
$d->fill_element('zone', 'name', 'testingzone');
$d->fill_element('detail', 'name', 'testingdetail');
$d->find_element('save', 'name')->click();
diag("Back to orignial form (create billing fees)");
#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->fill_element('source', id, '.*');
$d->fill_element('destination', name, '.+');
$d->find_element('save', id)->click();
$d->fill_element('source', 'id', '.*');
$d->fill_element('destination', 'name', '.+');
$d->find_element('save', 'id')->click();
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")]');
$row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingdetail")]/..');
ok($row);
ok(true, "test1");
ok($row, "Find 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();
ok(true, "test3");
$d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click();
ok($d->find_text("Are you sure?"));
$d->find_element('dataConfirmOK', 'id')->click();
diag('skip was here');
$d->find_text("successfully deleted");
ok($d->find_text("successfully deleted"));
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")]'));
diag("Delete testingzone");
$d->fill_element('//div[contains(@class, "dataTables_filter")]//input', xpath, 'thisshouldnotexist');
$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', 'thisshouldnotexist');
$d->find_element('#billing_zone_table tr > td.dataTables_empty', 'css');
$d->fill_element('//div[contains(@class, "dataTables_filter")]//input', 'xpath', 'testingdetail');
$row = $d->find_element('//div[contains(@class,"dataTables_wrapper")]//td[contains(text(),"testingzone")]/..');
ok($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_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click();
$d->find_element('dataConfirmOK', 'id')->click();
diag("Go to Billing page (again)");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
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');
$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");
diag("add/delete a time def to Wednesday");
$d->fill_element('start', name, "03:14:15");
$d->fill_element('end', name, "13:37:00");
$d->find_element('add', name)->click();
$d->fill_element('start', 'name', "03:14:15");
$d->fill_element('end', 'name', "13:37:00");
$d->find_element('add', 'name')->click();
$d->find_element('//div[contains(@class,"modal")]//i[@class="icon-trash"]/..')->click();
diag('skip was here');
$d->find_element('mod_close', id)->click();
$d->find_element('mod_close', 'id')->click();
diag("Create a Date Definition");
$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('end', name, "2008-02-28 13:37:00");
$d->find_element('save', name)->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('end', 'name', "2008-02-28 13:37:00");
$d->find_element('save', 'name')->click();
diag("Find/delete my created date definition");
$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");
$edit_link->click();
$d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click();
$d->find_element('dataConfirmOK', 'id')->click();
done_testing;
# vim: filetype=perl

@ -1,28 +1,17 @@
use strict;
use warnings;
use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag todo_skip)];
use Selenium::Remote::Driver::Extensions qw();
diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)");
$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");
$d->login_ok();
my @chars = ("A".."Z", "a".."z");
my $rnd_id;
@ -30,30 +19,30 @@ $rnd_id .= $chars[rand @chars] for 1..8;
diag("Go to Customers page");
$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");
$d->find_element('//*[@id="masthead"]//h2[contains(text(),"Customers")]');
$d->find_element('Create Customer', link_text)->click();
$d->fill_element('#contactidtable_filter input', css, 'thisshouldnotexist');
$d->find_element('#contactidtable tr > td.dataTables_empty', css);
$d->fill_element('#contactidtable_filter input', css, 'default-customer');
$d->find_element('Create Customer', 'link_text')->click();
$d->fill_element('#contactidtable_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#contactidtable tr > td.dataTables_empty', 'css');
$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->fill_element('#billing_profileidtable_filter input', css, 'thisshouldnotexist');
$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', 'thisshouldnotexist');
$d->find_element('#billing_profileidtable tr > td.dataTables_empty', 'css');
$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"]');
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->fill_element('external_id', id, $rnd_id);
$d->find_element('save', id)->click();
$d->fill_element('external_id', 'id', $rnd_id);
$d->find_element('save', 'id')->click();
diag("Open Details for our just created Customer");
sleep 2; #Else we might search on the previous page
$d->fill_element('#Customer_table_filter input', css, 'thisshouldnotexist');
$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', 'thisshouldnotexist');
$d->find_element('#Customer_table tr > td.dataTables_empty', 'css');
$d->fill_element('#Customer_table_filter input', 'css', $rnd_id);
my $row = $d->find_element('(//table/tbody/tr/td[contains(text(), "'.$rnd_id.'")]/..)[1]');
ok($row);
my $edit_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Details")]');
@ -64,15 +53,15 @@ $edit_link->click();
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-body")]//*[contains(@class,"btn-primary") and contains(text(),"Edit Contact")]')->click();
$d->fill_element('div.modal #firstname', css, "Alice");
$d->fill_element('company', id, 'Sipwise');
$d->fill_element('div.modal #firstname', 'css', "Alice");
$d->fill_element('company', 'id', 'Sipwise');
# Choosing Country:
$d->fill_element('#countryidtable_filter input', css, 'thisshouldnotexist');
$d->find_element('#countryidtable tr > td.dataTables_empty', css);
$d->fill_element('#countryidtable_filter input', css, 'Ukraine');
$d->fill_element('#countryidtable_filter input', 'css', 'thisshouldnotexist');
$d->find_element('#countryidtable tr > td.dataTables_empty', 'css');
$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"]');
# Save
$d->find_element('save', id)->click();
$d->find_element('save', 'id')->click();
diag("Check if successful");
$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();
diag("Do Edit Fraud Limits");
$d->fill_element('fraud_interval_limit', id, "100");
$d->fill_element('fraud_interval_notify', id, 'mymail@example.org');
$d->find_element('save', id)->click();
$d->fill_element('fraud_interval_limit', 'id', "100");
$d->fill_element('fraud_interval_notify', 'id', 'mymail@example.org');
$d->find_element('save', 'id')->click();
$d->find_element('//div[contains(@class,"accordion-body")]//table//td[contains(text(),"mymail@example.org")]');
diag("Terminate our customer");
$d->find_element('//a[contains(@class,"btn-primary") and text()[contains(.,"Back")]]')->click();
$d->fill_element('#Customer_table_filter input', css, 'thisshouldnotexist');
$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', 'thisshouldnotexist');
$d->find_element('#Customer_table tr > td.dataTables_empty', 'css');
$d->fill_element('#Customer_table_filter input', 'css', $rnd_id);
$row = $d->find_element('(//table/tbody/tr/td[contains(text(), "'.$rnd_id.'")]/..)[1]');
ok($row);
$edit_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Terminate")]');
@ -106,7 +95,7 @@ $d->move_to(element => $row);
$edit_link->click();
#sleep 2;
$d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click();
$d->find_element('dataConfirmOK', 'id')->click();
$d->find_text("Customer successfully terminated");
done_testing;

@ -1,34 +1,23 @@
use warnings;
use strict;
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 TryCatch;
diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)");
$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");
$d->login_ok();
diag("Go to Domains page");
$d->find_element('//*[@id="main-nav"]//*[contains(text(),"Settings")]')->click();
$d->find_element('//a[contains(@href,"/domain")]');
$d->find_element('Domains', link_text)->click();
$d->find_element('Domains', 'link_text')->click();
diag("Domains page");
is($d->find_element('//*[@id="masthead"]//h2')->get_text(), "Domains");
@ -38,7 +27,7 @@ SKIP: {
my ($row, $edit_link);
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")]');
} catch {
skip ("It seems, no domains exist", 1);
@ -49,8 +38,8 @@ SKIP: {
$edit_link->click();
diag('Open the tab "Access Restrictions"');
#$d->location_ok(qr!domain/\d+/preferences!); #/ # FIXME
$d->find_element("Access Restrictions", link_text)->click();
like($d->get_path, qr!domain/\d+/preferences!);
$d->find_element("Access Restrictions", 'link_text')->click();
diag("Click edit for the preference concurrent_max");
sleep 1;
@ -62,19 +51,19 @@ SKIP: {
$edit_link->click();
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);
$formfield->clear();
$formfield->send_keys('thisisnonumber');
$d->find_element("save", id)->click();
$d->find_element("save", 'id')->click();
diag('Type 789 and click Save');
$d->find_text('Value must be an integer');
$formfield = $d->find_element('concurrent_max', id);
$formfield = $d->find_element('concurrent_max', 'id');
ok($formfield);
$formfield->clear();
$formfield->send_keys('789');
$d->find_element('save', id)->click();
$d->find_element('save', 'id')->click();
}
done_testing;

@ -1,37 +1,26 @@
use warnings;
use strict;
use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag todo_skip)];
use Selenium::Remote::Driver::Extensions qw();
diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)");
$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");
$d->login_ok();
diag("Go to Peerings page");
$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");
$d->find_element('//*[@id="masthead"]//h2[contains(text(),"SIP Peering Groups")]');
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");
$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_text('Create Peering Group'); # Should go back to prev form
$d->fill_element('name', id, 'testinggroup');
$d->fill_element('description', id, 'A group created for testing purposes');
$d->fill_element('name', 'id', 'testinggroup');
$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->find_element('save', id)->click();
$d->find_element('save', 'id')->click();
diag("Edit Servers/Rules of testinggroup");
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");
$d->find_element('//a[contains(text(),"Create Peering Rule")]')->click();
$d->fill_element('callee_prefix', id, '43');
$d->fill_element('callee_pattern', id, '^sip');
$d->fill_element('caller_pattern', id, '999');
$d->fill_element('description', id, 'for testing purposes');
$d->find_element('save', id)->click();
$d->fill_element('callee_prefix', 'id', '43');
$d->fill_element('callee_pattern', 'id', '^sip');
$d->fill_element('caller_pattern', 'id', '999');
$d->fill_element('description', 'id', 'for testing purposes');
$d->find_element('save', 'id')->click();
diag("Create a Peering Server");
$d->find_element('//a[contains(text(),"Create Peering Server")]')->click();
$d->fill_element('name', id, 'mytestserver');
$d->fill_element('ip', id, '10.0.0.100');
$d->fill_element('host', id, 'sipwise.com');
$d->find_element('save', id)->click();
$d->fill_element('name', 'id', 'mytestserver');
$d->fill_element('ip', 'id', '10.0.0.100');
$d->fill_element('host', 'id', 'sipwise.com');
$d->find_element('save', 'id')->click();
$d->find_text('Peering server successfully created');
my $server_rules_uri = $d->get_current_url();
diag('Edit Preferences for "mytestserver".');
sleep 1; #make sure, we are on the right page
$d->fill_element('#peering_servers_table_filter input', css, 'thisshouldnotexist');
$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', 'thisshouldnotexist');
$d->find_element('#peering_servers_table tr > td.dataTables_empty', 'css');
$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")]');
$row = $d->find_element('//table/tbody/tr/td[contains(text(), "mytestserver")]/..');
ok($row);
@ -85,7 +74,7 @@ $d->move_to(element => $row);
$edit_link->click();
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");
$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');
$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');
diag("Go back to Servers/Rules");
@ -107,9 +96,9 @@ my $delete_link;
diag('skip was here');
diag("Delete mytestserver");
sleep 1; #make sure, we are on the right page
$d->fill_element('#peering_servers_table_filter input', css, 'thisshouldnotexist');
$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', 'thisshouldnotexist');
$d->find_element('#peering_servers_table tr > td.dataTables_empty', 'css');
$d->fill_element('#peering_servers_table_filter input', 'css', 'mytestserver');
$row = $d->find_element('(//table/tbody/tr/td[contains(text(), "mytestserver")]/..)[1]');
ok($row);
$delete_link = $d->find_child_element($row, '(./td//a)[contains(text(),"Delete")]');
@ -117,7 +106,7 @@ ok($delete_link);
$d->move_to(element => $row);
$delete_link->click();
$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
diag("Delete the previously created Peering Rule");
@ -129,10 +118,10 @@ ok($delete_link);
$d->move_to(element => $row);
$delete_link->click();
$d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click();
$d->find_element('dataConfirmOK', 'id')->click();
diag('skip was here');
$d->find_text("successfully deleted");
ok($d->find_text("successfully deleted"));
diag('Go back to "SIP Peering Groups".');
$d->get($peerings_uri);
@ -145,10 +134,10 @@ ok($delete_link);
$d->move_to(element => $row);
$delete_link->click();
$d->find_text("Are you sure?");
$d->find_element('dataConfirmOK', id)->click();
$d->find_element('dataConfirmOK', 'id')->click();
diag('skip was here');
$d->find_text("successfully deleted");
ok($d->find_text("successfully deleted"));
done_testing;
# vim: filetype=perl

@ -1,54 +1,43 @@
use warnings;
use strict;
use lib 't/lib';
use Test::More import => [qw(done_testing is ok diag)];
use Selenium::Remote::Driver::Extensions qw();
diag("Init");
my $uri = $ENV{CATALYST_SERVER} || 'http://localhost:3000';
my $browsername = $ENV{BROWSER_NAME} || "firefox"; # possible values: firefox, htmlunit, chrome
my $d = Selenium::Remote::Driver::Extensions->new (
'browser_name' => $browsername,
'proxy' => {'proxyType' => 'system'} );
diag("Loading login page (logout first)");
$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");
$d->login_ok();
diag("Go to reseller list");
$d->find_element('//a[@class="btn" and contains(@href,"/reseller")]')->click();
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);
$searchfield->send_keys('donotfindme');
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);
is($elem->get_text,'No matching records found');
diag('Search for "1" in resellers');
$searchfield->clear();
$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');
diag("Going to create a reseller");
$d->find_element('Create Reseller', link_text)->click();
$d->find_element('save', id)->click();
$d->find_element('Create Reseller', 'link_text')->click();
$d->find_element('save', 'id')->click();
$d->find_text("Contract 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)");
sleep 1; #prevent a StaleElementReferenceException
@ -59,7 +48,7 @@ my $btn = $d->find_child_element($row, './/a[contains(text(),"Edit")]');
ok($btn);
$btn->click();
#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");
sleep 1; #prevent a StaleElementReferenceException

Loading…
Cancel
Save