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/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/PmaSeleniumDbEventsTest.php b/test/selenium/PmaSeleniumDbEventsTest.php index 257caf170b..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'); @@ -182,7 +177,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 +209,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 +217,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 +249,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/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 56eb1a5b41..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(); } @@ -189,7 +181,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/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 fab3f4e6aa..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(); } @@ -207,8 +202,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/PmaSeleniumExportTest.php b/test/selenium/PmaSeleniumExportTest.php index 0cfeb853a3..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); @@ -167,21 +157,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 +179,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 +194,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 +213,7 @@ class PMA_SeleniumExportTest extends PMA_SeleniumBase } $this->scrollToBottom(); - usleep(1000000); + sleep(1); $this->waitForElement('byId', "buttonGo")->click(); diff --git a/test/selenium/PmaSeleniumImportTest.php b/test/selenium/PmaSeleniumImportTest.php index 090436ffd3..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"); @@ -118,7 +107,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/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/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/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/PmaSeleniumTableBrowseTest.php b/test/selenium/PmaSeleniumTableBrowseTest.php index 327e773884..01be386138 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"); @@ -296,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/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/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/PmaSeleniumTrackingTest.php b/test/selenium/PmaSeleniumTrackingTest.php index 514d6b6038..639036db34 100644 --- a/test/selenium/PmaSeleniumTrackingTest.php +++ b/test/selenium/PmaSeleniumTrackingTest.php @@ -57,19 +57,13 @@ 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(); $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 +73,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 +152,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") @@ -203,15 +197,9 @@ 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(); - usleep(1000000); + sleep(1); $this->byPartialLinkText("Tracking")->click(); @@ -223,10 +211,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 +286,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/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 cefff40b02..7884457899 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); } /** @@ -598,27 +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->waitForElement( - 'byCssSelector', - 'li.last.table' - ); - - /* TODO: Timing issue of expanding navigation tree */ - $this->sleep(); + $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( @@ -627,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 * @@ -649,7 +665,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase 'args' => array() ) ); - usleep(1000000); + sleep(1); } /** @@ -665,9 +681,14 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase 'args' => array() ) ); - usleep(1000000); + sleep(1); } + /** + * Mark unsuccessful tests as 'Failures' on Browerstack + * + * @return void + */ public function onNotSuccessfulTest(Exception $e) { // If this is being run on Browerstack,