From 8c32018335c9339301a352fe551b1f2ddef9c38f Mon Sep 17 00:00:00 2001 From: Deven Bansod Date: Mon, 21 Aug 2017 15:57:04 +0530 Subject: [PATCH 1/3] Refactor methods in selenium tests Signed-off-by: Deven Bansod --- .../PmaSeleniumCreateDropDatabaseTest.php | 2 +- test/selenium/PmaSeleniumDbEventsTest.php | 7 ++- test/selenium/PmaSeleniumExportTest.php | 15 +++--- .../PmaSeleniumServerSettingsTest.php | 19 +++++--- test/selenium/PmaSeleniumTableBrowseTest.php | 16 +++---- test/selenium/PmaSeleniumTableCreateTest.php | 1 - test/selenium/PmaSeleniumTrackingTest.php | 12 ++--- test/selenium/TestBase.php | 48 +++++++++++-------- 8 files changed, 62 insertions(+), 58 deletions(-) diff --git a/test/selenium/PmaSeleniumCreateDropDatabaseTest.php b/test/selenium/PmaSeleniumCreateDropDatabaseTest.php index 1c864baf61..032d403701 100644 --- a/test/selenium/PmaSeleniumCreateDropDatabaseTest.php +++ b/test/selenium/PmaSeleniumCreateDropDatabaseTest.php @@ -81,7 +81,7 @@ class PMA_SeleniumCreateDropDatabaseTest extends PMA_SeleniumBase $this->byPartialLinkText('Databases')->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - $this->scrollIntoView('tableslistcontainer'); + $this->scrollToBottom(); $this->byCssSelector( "input[name='selected_dbs[]'][value='" . $this->database_name . "']" )->click(); diff --git a/test/selenium/PmaSeleniumDbEventsTest.php b/test/selenium/PmaSeleniumDbEventsTest.php index 257caf170b..1b2897eadd 100644 --- a/test/selenium/PmaSeleniumDbEventsTest.php +++ b/test/selenium/PmaSeleniumDbEventsTest.php @@ -182,7 +182,7 @@ class PMA_SeleniumDbEventsTest extends PMA_SeleniumBase ); $this->assertEquals(1, $result->num_rows); - usleep(2200000); + sleep(2); $result = $this->dbQuery( "SELECT val FROM `" . $this->database_name . "`.`test_table`" ); @@ -214,7 +214,6 @@ class PMA_SeleniumDbEventsTest extends PMA_SeleniumBase $this->byName("item_interval_value")->clear(); $this->byName("item_interval_value")->value("2"); - $this->sleep(); $this->byXPath("//button[contains(., 'Go')]")->click(); $ele = $this->waitForElement( @@ -223,7 +222,7 @@ class PMA_SeleniumDbEventsTest extends PMA_SeleniumBase . "'Event `test_event` has been modified')]" ); - usleep(2200000); + sleep(2); $result = $this->dbQuery( "SELECT val FROM `" . $this->database_name . "`.`test_table`" ); @@ -255,7 +254,7 @@ class PMA_SeleniumDbEventsTest extends PMA_SeleniumBase $this->waitForElement("byId", "nothing2display"); - usleep(1000000); + sleep(1); $result = $this->dbQuery( "SHOW EVENTS WHERE Db='" . $this->database_name . "' AND Name='test_event'" diff --git a/test/selenium/PmaSeleniumExportTest.php b/test/selenium/PmaSeleniumExportTest.php index 0cfeb853a3..e14c19f33b 100644 --- a/test/selenium/PmaSeleniumExportTest.php +++ b/test/selenium/PmaSeleniumExportTest.php @@ -167,21 +167,19 @@ class PMA_SeleniumExportTest extends PMA_SeleniumBase $this->expandMore(); $this->waitForElement('byPartialLinkText', "Export")->click(); - $this->sleep(); - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); $this->waitForElement("byId", "quick_or_custom"); $this->byCssSelector("label[for=radio_custom_export]")->click(); - usleep(1000000); + sleep(1); $this->select($this->byId("plugins"))->selectOptionByLabel($plugin); - usleep(1000000); + sleep(1); if ($type === 'server') { $this->scrollIntoView('databases_and_tables', 200); $this->waitForElement('byPartialLinkText', 'Unselect all')->click(); - usleep(1000000); + sleep(1); $this->waitForElement( 'byCssSelector', @@ -191,14 +189,13 @@ class PMA_SeleniumExportTest extends PMA_SeleniumBase if ($type === 'table') { $this->byCssSelector("label[for=radio_allrows_0]")->click(); - $this->sleep(); $this->byName("limit_to")->clear(); $this->byName("limit_to")->value("1"); } $this->scrollIntoView('output', -150); $this->waitForElement('byCssSelector', "label[for=radio_view_as_text]")->click(); - usleep(1000000); + sleep(1); if ($plugin == "SQL") { if ($type !== 'db') { @@ -207,7 +204,7 @@ class PMA_SeleniumExportTest extends PMA_SeleniumBase 'byCssSelector', "label[for=radio_sql_structure_or_data_structure_and_data]" )->click(); - usleep(1000000); + sleep(1); } if ($type === 'server') { @@ -226,7 +223,7 @@ class PMA_SeleniumExportTest extends PMA_SeleniumBase } $this->scrollToBottom(); - usleep(1000000); + sleep(1); $this->waitForElement('byId', "buttonGo")->click(); diff --git a/test/selenium/PmaSeleniumServerSettingsTest.php b/test/selenium/PmaSeleniumServerSettingsTest.php index cdf86b2ad7..d379503c55 100644 --- a/test/selenium/PmaSeleniumServerSettingsTest.php +++ b/test/selenium/PmaSeleniumServerSettingsTest.php @@ -35,7 +35,6 @@ class PMA_SeleniumSettingsTest extends PMA_SeleniumBase $this->waitForElement( "byXPath", "//a[@class='tabactive' and contains(., 'Settings')]" ); - $this->sleep(); } /** @@ -54,11 +53,18 @@ class PMA_SeleniumSettingsTest extends PMA_SeleniumBase $this->moveto($ele); $ele->click(); - usleep(1000000); - $this->waitForElement( - "byXPath", - "//div[@class='success' and contains(., 'Configuration has been saved')]" - ); + $this->waitUntil(function() { + if ( + $this->isElementPresent( + "byXPath", + "//div[@class='success' and contains(., 'Configuration has been saved')]" + ) + ) { + return true; + } + + return null; + }, 5000); } /** @@ -143,7 +149,6 @@ class PMA_SeleniumSettingsTest extends PMA_SeleniumBase $this->byCssSelector("a[href='#NavigationDisplayLogo']")->click(); $this->_saveConfig(); - $this->sleep(); $this->assertTrue( $this->isElementPresent("byId", "imgpmalogo") ); diff --git a/test/selenium/PmaSeleniumTableBrowseTest.php b/test/selenium/PmaSeleniumTableBrowseTest.php index 327e773884..df7c7a55c0 100644 --- a/test/selenium/PmaSeleniumTableBrowseTest.php +++ b/test/selenium/PmaSeleniumTableBrowseTest.php @@ -55,7 +55,6 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase $this->navigateTable('test_table'); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - usleep(1000000); // let the page load // Dynamic wait $this->waitUntil(function () { @@ -78,7 +77,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase // case 1 $this->byPartialLinkText("name")->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - usleep(1000000); + sleep(1); $this->assertEquals( "1", @@ -98,7 +97,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase // case 2 $this->byPartialLinkText("name")->click(); $this->waitForElementNotPresent("byId", "ajax_message_num_1"); - usleep(1000000); + sleep(1); $this->assertEquals( "2", @@ -118,7 +117,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase // case 2 $this->byLinkText("datetimefield")->click(); $this->waitForElementNotPresent("byId", "ajax_message_num_1"); - usleep(1000000); + sleep(1); $this->getCellByTableClass('table_results', 1, 5); $this->assertEquals( @@ -139,7 +138,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase // case 4 $this->byPartialLinkText("datetimefield")->click(); $this->waitForElementNotPresent("byId", "ajax_message_num_1"); - usleep(1000000); + sleep(1); $this->assertEquals( "2", @@ -169,7 +168,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase $ele = $this->byCssSelector( "table.table_results tbody tr:nth-child(2) td:nth-child(2)" ); - usleep(1000000); + sleep(1); $this->moveto($ele); $this->click(); @@ -231,7 +230,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase $element = $this->byCssSelector( "table.table_results tbody tr:nth-child(1) td:nth-child(6)" ); - usleep(1000000); + sleep(1); $this->moveto($element); $this->doubleclick(); @@ -247,7 +246,6 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase $this->byCssSelector("textarea.edit_box")->clear(); $this->byCssSelector("textarea.edit_box")->value("abcde"); - $this->sleep(); $this->keys(PHPUnit_Extensions_Selenium2TestCase_Keys::RETURN_); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); @@ -274,7 +272,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase $ele = $this->byCssSelector( "table.table_results tbody tr:nth-child(3) td:nth-child(3)" ); - usleep(1000000); + sleep(1); $this->moveto($ele); $this->click(); $this->waitForElement("byId", "insertForm"); diff --git a/test/selenium/PmaSeleniumTableCreateTest.php b/test/selenium/PmaSeleniumTableCreateTest.php index d16ca341e8..de9a7bb2fa 100644 --- a/test/selenium/PmaSeleniumTableCreateTest.php +++ b/test/selenium/PmaSeleniumTableCreateTest.php @@ -90,7 +90,6 @@ class PMA_SeleniumTableCreateTest extends PMA_SeleniumBase )->click(); } - $this->sleep(); $this->byName("field_default_value[1]")->value("def"); $this->scrollToBottom(); diff --git a/test/selenium/PmaSeleniumTrackingTest.php b/test/selenium/PmaSeleniumTrackingTest.php index 514d6b6038..828b47fe70 100644 --- a/test/selenium/PmaSeleniumTrackingTest.php +++ b/test/selenium/PmaSeleniumTrackingTest.php @@ -69,7 +69,7 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase $this->waitForElement('byPartialLinkText', "Tracking")->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - usleep(1000000); + sleep(1); $this->waitForElement("byPartialLinkText", "Track table"); $this->byXPath("(//a[contains(., 'Track table')])[1]")->click(); @@ -79,7 +79,7 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase && $this->isElementPresent('byXPath', "(//a[contains(., 'Track table')])[1]") && ! $this->isElementPresent('byId', 'ajax_message_num_1') ) { - usleep(1000000); + sleep(1); // If link still exists on page if ($this->isElementPresent("byXPath", "(//a[contains(., 'Track table')])[1]")) { $this->byXPath("(//a[contains(., 'Track table')])[1]")->click(); @@ -158,7 +158,7 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase $this->byCssSelector("input[value='Go']")->click(); $this->waitForElementNotPresent("byId", "ajax_message_num_1"); - usleep(1000000); + sleep(1); $this->assertFalse( $this->isElementPresent("byId", "ddl_versions") @@ -211,7 +211,7 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase $this->waitForElement("byId", "structureTable"); $this->expandMore(); - usleep(1000000); + sleep(1); $this->byPartialLinkText("Tracking")->click(); @@ -223,10 +223,8 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase 'table#versions tbody tr:nth-child(1) td:nth-child(7)' ); $this->moveto($ele); - $this->sleep(); $this->click(); - $this->sleep(); $this->waitForElement( "byCssSelector", "button.submitOK" @@ -300,7 +298,7 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase $this->byPartialLinkText("SQL")->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - usleep(1000000); + sleep(1); $this->waitForElement("byId", "queryfieldscontainer"); $this->typeInTextArea( ";UPDATE test_table SET val = val + 1; " diff --git a/test/selenium/TestBase.php b/test/selenium/TestBase.php index cefff40b02..90ae8c65bd 100644 --- a/test/selenium/TestBase.php +++ b/test/selenium/TestBase.php @@ -411,19 +411,6 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase } } - /** - * Sleeps while waiting for browser to perform an action. - * - * @todo This method should not be used, but rather there would be - * explicit waiting for some elements. - * - * @return void - */ - public function sleep() - { - usleep(5000); - } - /** * Check if element is present or not * @@ -586,7 +573,18 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase $ele->click(); $this->waitForElement('byCssSelector', 'li.submenuhover > a'); - $this->sleep(); + $this->waitUntil(function () { + if ( + $this->isElementPresent( + 'byCssSelector', + 'li.submenuhover.submenu.shown' + ) + ) { + return true; + } + + return false; + }, 5000); } /** @@ -606,13 +604,18 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase $this->waitForElement("byPartialLinkText", $this->database_name)->click(); /* Wait for loading and expanding tree */ - $this->waitForElement( - 'byCssSelector', - 'li.last.table' - ); + $this->waitUntil(function () { + if ( + $this->isElementPresent( + 'byCssSelector', + 'li.last.table' + ) + ) { + return true; + } - /* TODO: Timing issue of expanding navigation tree */ - $this->sleep(); + return null; + }, 5000); // go to table page $this->waitForElement( @@ -668,6 +671,11 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase usleep(1000000); } + /** + * Mark unsuccessful tests as 'Failures' on Browerstack + * + * @return void + */ public function onNotSuccessfulTest(Exception $e) { // If this is being run on Browerstack, From 11bc4c6252a809b53d203132edb5e40f236c23f9 Mon Sep 17 00:00:00 2001 From: Deven Bansod Date: Mon, 21 Aug 2017 16:44:11 +0530 Subject: [PATCH 2/3] Replace usleep with sleep calls Signed-off-by: Deven Bansod --- test/selenium/PmaSeleniumCreateRemoveUserTest.php | 2 +- test/selenium/PmaSeleniumDbProceduresTest.php | 2 +- test/selenium/PmaSeleniumDbTriggersTest.php | 3 +-- test/selenium/PmaSeleniumImportTest.php | 2 +- test/selenium/PmaSeleniumTableBrowseTest.php | 2 +- test/selenium/PmaSeleniumTableInsertTest.php | 4 ++-- test/selenium/PmaSeleniumTableStructureTest.php | 1 - test/selenium/PmaSeleniumXssTest.php | 2 +- test/selenium/TestBase.php | 4 ++-- 9 files changed, 10 insertions(+), 12 deletions(-) diff --git a/test/selenium/PmaSeleniumCreateRemoveUserTest.php b/test/selenium/PmaSeleniumCreateRemoveUserTest.php index f35ab68353..ea078419b1 100644 --- a/test/selenium/PmaSeleniumCreateRemoveUserTest.php +++ b/test/selenium/PmaSeleniumCreateRemoveUserTest.php @@ -78,7 +78,7 @@ class PMA_SeleniumCreateRemoveUserTest extends PMA_SeleniumBase && ! $this->isElementPresent('byId', 'ajax_message_num_1') ) { $ele->click(); - usleep(1000000); + sleep(1); } $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); diff --git a/test/selenium/PmaSeleniumDbProceduresTest.php b/test/selenium/PmaSeleniumDbProceduresTest.php index 56eb1a5b41..24a2e33c3a 100644 --- a/test/selenium/PmaSeleniumDbProceduresTest.php +++ b/test/selenium/PmaSeleniumDbProceduresTest.php @@ -189,7 +189,7 @@ class PMA_SeleniumDbProceduresTest extends PMA_SeleniumBase $this->waitForElement("byId", "nothing2display"); - usleep(1000000); + sleep(1); $result = $this->dbQuery( "SHOW PROCEDURE STATUS WHERE Db='" . $this->database_name . "'" ); diff --git a/test/selenium/PmaSeleniumDbTriggersTest.php b/test/selenium/PmaSeleniumDbTriggersTest.php index fab3f4e6aa..79a891003f 100644 --- a/test/selenium/PmaSeleniumDbTriggersTest.php +++ b/test/selenium/PmaSeleniumDbTriggersTest.php @@ -207,8 +207,7 @@ class PMA_SeleniumDbTriggersTest extends PMA_SeleniumBase )->click(); $this->waitForElement("byId", "nothing2display"); - - usleep(1000000); + sleep(1); // test trigger $this->dbQuery("INSERT INTO `test_table` (val) VALUES (1);"); diff --git a/test/selenium/PmaSeleniumImportTest.php b/test/selenium/PmaSeleniumImportTest.php index 090436ffd3..8a25297eb0 100644 --- a/test/selenium/PmaSeleniumImportTest.php +++ b/test/selenium/PmaSeleniumImportTest.php @@ -118,7 +118,7 @@ class PMA_SeleniumImportTest extends PMA_SeleniumBase $this->select($this->byName("local_import_file")) ->selectOptionByLabel($type . "_import.sql"); - usleep(1000000); + sleep(1); $this->scrollToBottom(); $this->byId("buttonGo")->click(); diff --git a/test/selenium/PmaSeleniumTableBrowseTest.php b/test/selenium/PmaSeleniumTableBrowseTest.php index df7c7a55c0..01be386138 100644 --- a/test/selenium/PmaSeleniumTableBrowseTest.php +++ b/test/selenium/PmaSeleniumTableBrowseTest.php @@ -294,7 +294,7 @@ class PMA_SeleniumTableBrowseTest extends PMA_SeleniumBase // automatically gets appended with 00:00:00 $this->keys("2012-01-2"); $this->byId("field_2_3")->value("ABCDEFG"); - usleep(1000000); // longer string takes longer to type + sleep(1); // longer string takes longer to type $this->waitForElement('byId', "buttonYes")->click(); diff --git a/test/selenium/PmaSeleniumTableInsertTest.php b/test/selenium/PmaSeleniumTableInsertTest.php index 09612cd7c3..a4a7df7451 100644 --- a/test/selenium/PmaSeleniumTableInsertTest.php +++ b/test/selenium/PmaSeleniumTableInsertTest.php @@ -70,7 +70,7 @@ class PMA_SeleniumTableInsertTest extends PMA_SeleniumBase $this->byPartialLinkText("Insert")->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); $this->waitForElement("byId", "insertForm"); - usleep(1000000); + sleep(1); $this->byId("field_3_3")->click(); // shorter date to prevent error, @@ -109,7 +109,7 @@ class PMA_SeleniumTableInsertTest extends PMA_SeleniumBase )->click(); $this->waitForElementNotPresent("byId", "ajax_message_num_1"); - usleep(2000000); + sleep(2); // New message $ele = $this->waitForElement( diff --git a/test/selenium/PmaSeleniumTableStructureTest.php b/test/selenium/PmaSeleniumTableStructureTest.php index 5ed2064d79..86c0bc2b4a 100644 --- a/test/selenium/PmaSeleniumTableStructureTest.php +++ b/test/selenium/PmaSeleniumTableStructureTest.php @@ -55,7 +55,6 @@ class PMA_SeleniumTableStructureTest extends PMA_SeleniumBase $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); $this->waitForElement("byId", "tablestructure"); - usleep(1000000); // Dynamic wait $this->waitUntil(function () { diff --git a/test/selenium/PmaSeleniumXssTest.php b/test/selenium/PmaSeleniumXssTest.php index 76788517da..6f9f8a5d07 100644 --- a/test/selenium/PmaSeleniumXssTest.php +++ b/test/selenium/PmaSeleniumXssTest.php @@ -38,7 +38,7 @@ class PMA_SeleniumXSSTest extends PMA_SeleniumBase $this->waitForElement('byPartialLinkText', "SQL")->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - usleep(1000000); + sleep(1); $this->waitForElement("byId", "queryboxf"); $this->byId("button_submit_query")->click(); $this->assertEquals("Missing value in the form!", $this->alertText()); diff --git a/test/selenium/TestBase.php b/test/selenium/TestBase.php index 90ae8c65bd..f84c856ee4 100644 --- a/test/selenium/TestBase.php +++ b/test/selenium/TestBase.php @@ -652,7 +652,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase 'args' => array() ) ); - usleep(1000000); + sleep(1); } /** @@ -668,7 +668,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase 'args' => array() ) ); - usleep(1000000); + sleep(1); } /** From b72b5ab5f1d68de0240706410c3443c581325704 Mon Sep 17 00:00:00 2001 From: Deven Bansod Date: Tue, 22 Aug 2017 16:42:09 +0530 Subject: [PATCH 3/3] Add navigateDatabase method to prevent navigation errors Signed-off-by: Deven Bansod --- test/selenium/PmaSeleniumDbEventsTest.php | 7 +-- test/selenium/PmaSeleniumDbOperationsTest.php | 5 +- test/selenium/PmaSeleniumDbProceduresTest.php | 10 +--- test/selenium/PmaSeleniumDbStructureTest.php | 11 +--- test/selenium/PmaSeleniumDbTriggersTest.php | 9 +--- test/selenium/PmaSeleniumExportTest.php | 12 +---- test/selenium/PmaSeleniumImportTest.php | 13 +---- .../PmaSeleniumQueryByExampleTest.php | 13 +---- test/selenium/PmaSeleniumSqlQueryTest.php | 13 +---- test/selenium/PmaSeleniumTrackingTest.php | 16 +----- test/selenium/TestBase.php | 53 ++++++++++++------- 11 files changed, 47 insertions(+), 115 deletions(-) diff --git a/test/selenium/PmaSeleniumDbEventsTest.php b/test/selenium/PmaSeleniumDbEventsTest.php index 1b2897eadd..d48473c2c2 100644 --- a/test/selenium/PmaSeleniumDbEventsTest.php +++ b/test/selenium/PmaSeleniumDbEventsTest.php @@ -51,12 +51,7 @@ class PMA_SeleniumDbEventsTest extends PMA_SeleniumBase parent::setUpPage(); $this->login(); - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); - $this->waitForElement('byPartialLinkText', $this->database_name)->click(); - $this->waitForElement( - "byXPath", "//a[contains(., 'test_table')]" - ); + $this->navigateDatabase($this->database_name); // Let the Database page load $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); diff --git a/test/selenium/PmaSeleniumDbOperationsTest.php b/test/selenium/PmaSeleniumDbOperationsTest.php index 391c8b3558..825df88b51 100644 --- a/test/selenium/PmaSeleniumDbOperationsTest.php +++ b/test/selenium/PmaSeleniumDbOperationsTest.php @@ -33,9 +33,10 @@ class PMA_SeleniumDbOperationsTest extends PMA_SeleniumBase private function _getToDBOperations() { $this->gotoHomepage(); - $this->waitForElement('byLinkText', $this->database_name)->click(); - $this->waitForElement('byPartialLinkText', 'Structure'); + + $this->navigateDatabase($this->database_name); $this->expandMore(); + $this->waitForElement('byPartialLinkText', 'Operations')->click(); $this->waitForElement( 'byXPath', '//legend[contains(., \'Rename database to\')]' diff --git a/test/selenium/PmaSeleniumDbProceduresTest.php b/test/selenium/PmaSeleniumDbProceduresTest.php index 24a2e33c3a..93bdeda5fc 100644 --- a/test/selenium/PmaSeleniumDbProceduresTest.php +++ b/test/selenium/PmaSeleniumDbProceduresTest.php @@ -48,15 +48,7 @@ class PMA_SeleniumDbProceduresTest extends PMA_SeleniumBase $this->login(); - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); - $this->waitForElement('byPartialLinkText', $this->database_name)->click(); - $this->waitForElement( - "byXPath", "//a[contains(., 'test_table')]" - ); - - // Let the Database page load - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); + $this->navigateDatabase($this->database_name); $this->expandMore(); } diff --git a/test/selenium/PmaSeleniumDbStructureTest.php b/test/selenium/PmaSeleniumDbStructureTest.php index 0666652e97..3346546077 100644 --- a/test/selenium/PmaSeleniumDbStructureTest.php +++ b/test/selenium/PmaSeleniumDbStructureTest.php @@ -55,16 +55,7 @@ class PMA_SeleniumDbStructureTest extends PMA_SeleniumBase parent::setUpPage(); $this->login(); - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); - $this->waitForElement('byPartialLinkText', $this->database_name)->click(); - $this->waitForElement( - 'byCssSelector', - 'li.last.table' - ); - $this->waitForElement( - "byXPath", "//a[contains(., 'test_table')]" - ); + $this->navigateDatabase($this->database_name); // Let the Database page load $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); diff --git a/test/selenium/PmaSeleniumDbTriggersTest.php b/test/selenium/PmaSeleniumDbTriggersTest.php index 79a891003f..616b83d987 100644 --- a/test/selenium/PmaSeleniumDbTriggersTest.php +++ b/test/selenium/PmaSeleniumDbTriggersTest.php @@ -56,13 +56,8 @@ class PMA_SeleniumDbTriggersTest extends PMA_SeleniumBase parent::setUpPage(); $this->login(); - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); - $this->waitForElement('byPartialLinkText', $this->database_name)->click(); - $this->waitForElement( - "byXPath", "//a[contains(., 'test_table')]" - ); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); + + $this->navigateDatabase($this->database_name); $this->expandMore(); } diff --git a/test/selenium/PmaSeleniumExportTest.php b/test/selenium/PmaSeleniumExportTest.php index e14c19f33b..a7abf930e0 100644 --- a/test/selenium/PmaSeleniumExportTest.php +++ b/test/selenium/PmaSeleniumExportTest.php @@ -83,17 +83,7 @@ class PMA_SeleniumExportTest extends PMA_SeleniumBase */ public function testDbExport($plugin, $expected) { - // Go to server databases - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - - $this->waitForElement("byPartialLinkText", $this->database_name)->click(); - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - $this->waitForElement( - "byXPath", - "//a[@class='item' and contains(., 'Database: " - . $this->database_name . "')]" - ); + $this->navigateDatabase($this->database_name); $text = $this->_doExport('db', $plugin); diff --git a/test/selenium/PmaSeleniumImportTest.php b/test/selenium/PmaSeleniumImportTest.php index 8a25297eb0..0c3a18d8bc 100644 --- a/test/selenium/PmaSeleniumImportTest.php +++ b/test/selenium/PmaSeleniumImportTest.php @@ -56,19 +56,8 @@ class PMA_SeleniumImportTest extends PMA_SeleniumBase */ public function testDbImport() { - // Go to server databases - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - $this->dbQuery("CREATE DATABASE " . $this->database_name); - $this->waitForElement("byPartialLinkText", $this->database_name)->click(); - - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - $this->waitForElement( - "byXPath", - "//a[@class='item' and contains(., 'Database: " - . $this->database_name . "')]" - ); + $this->navigateDatabase($this->database_name); $this->_doImport("db"); diff --git a/test/selenium/PmaSeleniumQueryByExampleTest.php b/test/selenium/PmaSeleniumQueryByExampleTest.php index 37fe3b2339..dccdfa2763 100644 --- a/test/selenium/PmaSeleniumQueryByExampleTest.php +++ b/test/selenium/PmaSeleniumQueryByExampleTest.php @@ -59,18 +59,7 @@ class PmaSeleniumQueryByExampleTest extends PMA_SeleniumBase */ public function testQueryByExample() { - // Go to server databases - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); - - // go to specific database page - $this->waitForElement("byPartialLinkText", $this->database_name)->click(); - - /* Wait for loading and expanding tree */ - $this->waitForElement( - 'byCssSelector', - 'li.last.table' - ); + $this->navigateDatabase($this->database_name); $this->waitForElement('byPartialLinkText', 'Query')->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); diff --git a/test/selenium/PmaSeleniumSqlQueryTest.php b/test/selenium/PmaSeleniumSqlQueryTest.php index 603f55a3f9..fc39f049f6 100644 --- a/test/selenium/PmaSeleniumSqlQueryTest.php +++ b/test/selenium/PmaSeleniumSqlQueryTest.php @@ -113,18 +113,7 @@ class PMA_SeleniumSqlQueryTest extends PMA_SeleniumBase */ public function testDatabaseSqlQuery() { - // Go to server databases - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); - - // go to specific database page - $this->waitForElement("byPartialLinkText", $this->database_name)->click(); - - /* Wait for loading and expanding tree */ - $this->waitForElement( - 'byCssSelector', - 'li.last.table' - ); + $this->navigateDatabase($this->database_name); $this->waitForElement('byPartialLinkText', 'SQL')->click(); $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); diff --git a/test/selenium/PmaSeleniumTrackingTest.php b/test/selenium/PmaSeleniumTrackingTest.php index 828b47fe70..639036db34 100644 --- a/test/selenium/PmaSeleniumTrackingTest.php +++ b/test/selenium/PmaSeleniumTrackingTest.php @@ -57,13 +57,7 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase $this->login(); $this->skipIfNotPMADB(); - $this->waitForElement('byPartialLinkText', $this->database_name)->click(); - $this->waitForElement( - "byXPath", - "//a[@class='item' and contains(., 'Database: " - . $this->database_name . "')]" - ); - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); + $this->navigateDatabase($this->database_name); $this->expandMore(); $this->waitForElement('byPartialLinkText', "Tracking")->click(); @@ -203,13 +197,7 @@ class PMA_SeleniumTrackingTest extends PMA_SeleniumBase */ public function testDropTracking() { - $this->waitForElement( - 'byPartialLinkText', - "Database: " . $this->database_name - )->click(); - $this->waitForElementNotPresent('byId', 'ajax_message_num_1'); - $this->waitForElement("byId", "structureTable"); - + $this->navigateDatabase($this->database_name, true); $this->expandMore(); sleep(1); diff --git a/test/selenium/TestBase.php b/test/selenium/TestBase.php index f84c856ee4..7884457899 100644 --- a/test/selenium/TestBase.php +++ b/test/selenium/TestBase.php @@ -596,32 +596,14 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase */ public function navigateTable($table) { - // Go to server databases - $this->waitForElement('byPartialLinkText','Databases')->click(); - $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); - - // go to specific database page - $this->waitForElement("byPartialLinkText", $this->database_name)->click(); - - /* Wait for loading and expanding tree */ - $this->waitUntil(function () { - if ( - $this->isElementPresent( - 'byCssSelector', - 'li.last.table' - ) - ) { - return true; - } - - return null; - }, 5000); + $this->navigateDatabase($this->database_name); // go to table page $this->waitForElement( "byXPath", "//th//a[contains(., '$table')]" )->click(); + $this->waitForElementNotPresent('byCssSelector', 'ajax_message_num_1'); // Wait for it to load $this->waitForElement( @@ -630,6 +612,37 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase ); } + /** + * Navigates browser to a database page. + * + * @param string $database Name of database + * + * @return void + */ + public function navigateDatabase($database, $gotoHomepageRequired = false) + { + if ($gotoHomepageRequired) { + $this->gotoHomepage(); + } + + // Go to server databases + $this->waitForElement('byPartialLinkText','Databases')->click(); + $this->waitForElementNotPresent('byCssSelector', 'div#loading_parent'); + + // go to specific database page + $this->waitForElement( + 'byXPath', + '//tr[(contains(@class, "db-row"))]//a[contains(., "' . $this->database_name . '")]' + )->click(); + $this->waitForElementNotPresent('byCssSelector', 'ajax_message_num_1'); + + // Wait for it to load + $this->waitForElement( + "byXPath", + "//a[@class='tabactive' and contains(., 'Structure')]" + ); + } + /** * Scrolls to a coordinate such that the element with given id is visible *