public inbox for [email protected]  
help / color / mirror / Atom feed
[pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4
4+ messages / 3 participants
[nested] [flat]

* [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4
@ 2019-02-25 10:08 Usman Muzaffar <[email protected]>
  2019-02-25 11:47 ` Re: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Dave Page <[email protected]>
  2019-06-04 15:03 ` RE: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Cleber da Silva <[email protected]>
  0 siblings, 2 replies; 4+ messages in thread

From: Usman Muzaffar @ 2019-02-25 10:08 UTC (permalink / raw)
  To: pgadmin-hackers

Hi Hackers,

Please find here attached patch for the followings
i) Fixes for the query tool related test cases, the tab name convention is
changed which is catered in the patch.
ii) The 'dependent' tab was not showing information until it is refreshed
so handled it during automation(the issue was not reproducible manually).
iii) New locator file is created to store locators/xpaths.
iv) Changes in pgadmin_page file related to js.


Patch by :
          Usman & Aditya([email protected])

-- 


Thanks,

Usman Muzaffar
QA Team
EnterpriseDB Corporation


Attachments:

  [application/octet-stream] RM3936_v1.patch (48.9K, 3-RM3936_v1.patch)
  download | inline diff:
diff --git a/web/pgadmin/browser/static/js/frame.js b/web/pgadmin/browser/static/js/frame.js
index a062a6a2..5e5e7df1 100644
--- a/web/pgadmin/browser/static/js/frame.js
+++ b/web/pgadmin/browser/static/js/frame.js
@@ -53,7 +53,7 @@ define([
 
             myPanel.closeable(!!that.isCloseable);
 
-            var $frameArea = $('<div style="position:absolute;top:0 !important;width:100%;height:100%;display:table">');
+            var $frameArea = $('<div style="position:absolute;top:0 !important;width:100%;height:100%;display:table;z-index:0;">');
             myPanel.layout().addItem($frameArea);
             that.panel = myPanel;
             var frame = new wcIFrame($frameArea, myPanel);
diff --git a/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py b/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
index 382020f6..0837b84a 100644
--- a/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
+++ b/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
@@ -43,9 +43,6 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
         self.page.toggle_open_tree_item(self.test_db)
         self.page.open_query_tool()
 
-        self.page.driver.switch_to_frame(
-            self.page.driver.find_element_by_tag_name("iframe"))
-
         self.page.fill_codemirror_area_with(
             "SELECT * FROM %s ORDER BY some_column" % self.test_table_name)
 
diff --git a/web/pgadmin/feature_tests/file_manager_test.py b/web/pgadmin/feature_tests/file_manager_test.py
index 90548079..288dc983 100644
--- a/web/pgadmin/feature_tests/file_manager_test.py
+++ b/web/pgadmin/feature_tests/file_manager_test.py
@@ -17,6 +17,7 @@ from selenium.webdriver.support.ui import WebDriverWait
 from selenium.webdriver.common.by import By
 from selenium.webdriver.support import expected_conditions as EC
 from regression.feature_utils.base_feature_test import BaseFeatureTest
+from .locators import QueryToolLocatorsCss
 
 
 class CheckFileManagerFeatureTest(BaseFeatureTest):
@@ -41,7 +42,7 @@ class CheckFileManagerFeatureTest(BaseFeatureTest):
             os.remove(self.XSS_FILE)
 
     def after(self):
-        self.page.close_query_tool('.sql', False)
+        self.page.close_query_tool(False)
         self.page.remove_server(self.server)
 
     def runTest(self):
@@ -64,14 +65,11 @@ class CheckFileManagerFeatureTest(BaseFeatureTest):
         self.page.open_query_tool()
 
     def _create_new_file(self):
-        self.page.find_by_id("btn-save").click()
-        self.page.wait_for_query_tool_loading_indicator_to_disappear()
-        self.page.find_by_css_selector('.change_file_types')
+        self.page.find_by_css_selector(QueryToolLocatorsCss.btn_save).click()
         # Set the XSS value in input
-        self.page.find_by_id("file-input-path").clear()
-        self.page.find_by_id("file-input-path").send_keys(
-            self.XSS_FILE
-        )
+        print('Create file')
+        self.page.find_by_css_selector('.change_file_types')
+        self.page.fill_input_by_css_selector("#file-input-path", self.XSS_FILE)
         # Save the file
         self.page.click_modal('Create')
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
@@ -79,13 +77,8 @@ class CheckFileManagerFeatureTest(BaseFeatureTest):
     def _open_file_manager_and_check_xss_file(self):
         self.page.find_by_id("btn-load-file").click()
         self.page.find_by_css_selector('.change_file_types')
-        self.page.find_by_id("file-input-path").clear()
-        self.page.find_by_id("file-input-path").send_keys(
-            '/tmp/'
-        )
-        self.page.find_by_id("file-input-path").send_keys(
-            Keys.RETURN
-        )
+        self.page.fill_input_by_css_selector("#file-input-path", "/tmp/",
+                                             key_after_input=Keys.RETURN)
 
         if self.page.driver.capabilities['browserName'] == 'firefox':
             table = self.page.wait_for_element_to_reload(
diff --git a/web/pgadmin/feature_tests/locators.py b/web/pgadmin/feature_tests/locators.py
new file mode 100644
index 00000000..34aea87c
--- /dev/null
+++ b/web/pgadmin/feature_tests/locators.py
@@ -0,0 +1,21 @@
+class QueryToolLocatorsCss:
+    btn_save = "#btn-save"
+    btn_execute_query = "#btn-flash"
+    btn_query_dropdown = "#btn-query-dropdown"
+    btn_auto_rollback = "#btn-auto-rollback"
+    btn_auto_commit = "#btn-auto-commit"
+    btn_cancel_query = "#btn-cancel-query"
+    btn_explain = "#btn-explain"
+    btn_explain_analyze = "#btn-explain-analyze"
+    btn_explain_options_dropdown = "#btn-explain-options-dropdown"
+    btn_explain_verbose = "#btn-explain-verbose"
+    btn_explain_costs = "#btn-explain-costs"
+    btn_explain_buffers = "#btn-explain-buffers"
+    btn_explain_timing = "#btn-explain-timing"
+    btn_clear_dropdown = "#btn-clear-dropdown"
+    btn_clear = "#btn-clear"
+
+    query_editor_panel = "#output-panel"
+    query_history_selected = "#query_list .selected"
+    query_history_detail = "#query_detail"
+    editor_panel = "#output-panel"
diff --git a/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py b/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py
index 1c89393d..c98e2fba 100644
--- a/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py
+++ b/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py
@@ -69,7 +69,8 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
         self.wait.until(EC.element_to_be_clickable(
             (By.CSS_SELECTOR, ".file [name='file']"))).click()
 
-        self.page.fill_input_by_field_name("file", "test_backup")
+        self.page.fill_input_by_field_name(
+            "file", "test_backup", loose_focus=True)
 
         self.page.find_by_xpath("//button[contains(@class,'fa-save') "
                                 "and contains(.,'Backup')]").click()
@@ -83,6 +84,7 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
         self.page.find_by_css_selector(
             ".pg-bg-more-details").click()
 
+        backup_file = None
         # Check for XSS in Backup details
         if self.is_xss_check:
             self._check_detailed_window_for_xss('Backup')
@@ -99,7 +101,6 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
 
             self.assertIn("pg_dump", str(command))
 
-            backup_file = None
             if command:
                 backup_file = command[int(command.find('--file')) +
                                       8:int(command.find('--host')) - 2]
@@ -117,7 +118,8 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
         self.wait.until(EC.element_to_be_clickable(
             (By.CSS_SELECTOR, ".file [name='file']"))).click()
 
-        self.page.fill_input_by_field_name("file", "test_backup")
+        self.page.fill_input_by_field_name(
+            "file", "test_backup", loose_focus=True)
 
         self.page.find_by_xpath("//button[contains(@class,'fa-upload')"
                                 " and contains(.,'Restore')]").click()
diff --git a/web/pgadmin/feature_tests/query_tool_journey_test.py b/web/pgadmin/feature_tests/query_tool_journey_test.py
index d863f8e8..670de66f 100644
--- a/web/pgadmin/feature_tests/query_tool_journey_test.py
+++ b/web/pgadmin/feature_tests/query_tool_journey_test.py
@@ -15,6 +15,7 @@ from selenium.webdriver.common.keys import Keys
 
 from regression.python_test_utils import test_utils
 from regression.feature_utils.base_feature_test import BaseFeatureTest
+from .locators import QueryToolLocatorsCss
 
 
 class QueryToolJourneyTest(BaseFeatureTest):
@@ -73,16 +74,18 @@ class QueryToolJourneyTest(BaseFeatureTest):
 
     def _test_history_tab(self):
         self.__clear_query_tool()
-        editor_input = self.page.find_by_id("output-panel")
+        editor_input = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.query_editor_panel)
         self.page.click_element(editor_input)
         self._execute_query("SELECT * FROM table_that_doesnt_exist")
 
         self.page.click_tab("Query History")
         selected_history_entry = self.page.find_by_css_selector(
-            "#query_list .selected")
+            QueryToolLocatorsCss.query_history_selected)
         self.assertIn("SELECT * FROM table_that_doesnt_exist",
                       selected_history_entry.text)
-        failed_history_detail_pane = self.page.find_by_id("query_detail")
+        failed_history_detail_pane = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.query_history_detail)
 
         self.assertIn(
             "Error Message relation \"table_that_doesnt_exist\" "
@@ -108,7 +111,8 @@ class QueryToolJourneyTest(BaseFeatureTest):
         newly_selected_history_entry = self.page.find_by_xpath(
             "//*[@id='query_list']/ul/li[2]")
         self.page.click_element(newly_selected_history_entry)
-        selected_history_detail_pane = self.page.find_by_id("query_detail")
+        selected_history_detail_pane = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.query_history_detail)
         self.assertIn("SELECT * FROM table_that_doesnt_exist",
                       selected_history_detail_pane.get_attribute('innerHTML'))
 
@@ -118,7 +122,8 @@ class QueryToolJourneyTest(BaseFeatureTest):
 
         self.page.fill_codemirror_area_with("SELECT * FROM hats")
         for _ in range(15):
-            self.page.find_by_id("btn-flash").click()
+            self.page.find_by_css_selector(
+                QueryToolLocatorsCss.btn_execute_query).click()
             self.page.wait_for_query_tool_loading_indicator_to_disappear()
 
         self.page.click_tab("Query History")
@@ -140,7 +145,8 @@ class QueryToolJourneyTest(BaseFeatureTest):
         self.page.click_element(editor_input)
         self.page.fill_codemirror_area_with("SELECT * FROM hats")
         for _ in range(15):
-            self.page.find_by_id("btn-flash").click()
+            self.page.find_by_css_selector(
+                QueryToolLocatorsCss.btn_execute_query).click()
             self.page.wait_for_query_tool_loading_indicator_to_disappear()
 
         self.page.click_tab("History")
@@ -173,7 +179,8 @@ class QueryToolJourneyTest(BaseFeatureTest):
 
     def _execute_query(self, query):
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
     def _assert_clickable(self, element):
         self.page.click_element(element)
diff --git a/web/pgadmin/feature_tests/query_tool_tests.py b/web/pgadmin/feature_tests/query_tool_tests.py
index c6e609cc..3372ccf9 100644
--- a/web/pgadmin/feature_tests/query_tool_tests.py
+++ b/web/pgadmin/feature_tests/query_tool_tests.py
@@ -18,6 +18,7 @@ from selenium.webdriver.common.by import By
 from regression.python_test_utils import test_utils
 from regression.feature_utils.base_feature_test import BaseFeatureTest
 import config
+from .locators import QueryToolLocatorsCss
 
 
 class QueryToolFeatureTest(BaseFeatureTest):
@@ -110,28 +111,34 @@ class QueryToolFeatureTest(BaseFeatureTest):
         # this will set focus to correct iframe.
         self.page.fill_codemirror_area_with('')
 
-        explain_op = self.page.find_by_id("btn-explain-options-dropdown")
+        explain_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_explain_options_dropdown)
         explain_op.click()
 
         # disable Explain options and auto rollback only if they are enabled.
-        for op in ('explain-verbose', 'explain-costs',
-                   'explain-buffers', 'explain-timing'):
-            btn = self.page.find_by_id("btn-{}".format(op))
+        for op in (QueryToolLocatorsCss.btn_explain_verbose,
+                   QueryToolLocatorsCss.btn_explain_costs,
+                   QueryToolLocatorsCss.btn_explain_buffers,
+                   QueryToolLocatorsCss.btn_explain_timing):
+            btn = self.page.find_by_css_selector(op)
             check = btn.find_element_by_tag_name('i')
             if 'visibility-hidden' not in check.get_attribute('class'):
                 btn.click()
 
-        query_op = self.page.find_by_id("btn-query-dropdown")
+        query_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_query_dropdown)
         query_op.click()
 
         # disable auto rollback only if they are enabled
-        btn = self.page.find_by_id("btn-auto-rollback")
+        btn = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_rollback)
         check = btn.find_element_by_tag_name('i')
         if 'visibility-hidden' not in check.get_attribute('class'):
             btn.click()
 
         # enable autocommit only if it's disabled
-        btn = self.page.find_by_id("btn-auto-commit")
+        btn = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_commit)
         check = btn.find_element_by_tag_name('i')
         if 'visibility-hidden' in check.get_attribute('class'):
             btn.click()
@@ -145,14 +152,14 @@ class QueryToolFeatureTest(BaseFeatureTest):
         self.page.toggle_open_tree_item(self.test_db)
 
     def _clear_query_tool(self):
-        self.page.click_element(
-            self.page.find_by_xpath("//*[@id='btn-clear-dropdown']")
+        self.page.click_element(self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_clear_dropdown)
         )
         ActionChains(self.driver) \
-            .move_to_element(self.page.find_by_xpath("//*[@id='btn-clear']")) \
-            .perform()
+            .move_to_element(self.page.find_by_css_selector(
+                QueryToolLocatorsCss.btn_clear)).perform()
         self.page.click_element(
-            self.page.find_by_xpath("//*[@id='btn-clear']")
+            self.page.find_by_css_selector(QueryToolLocatorsCss.btn_clear)
         )
         self.page.click_modal('Yes')
 
@@ -171,7 +178,8 @@ SELECT generate_series(1, {}) as id1, 'dummy' as id2""".format(
         wait = WebDriverWait(self.page.driver, 10)
         self.page.fill_codemirror_area_with(query)
 
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         wait.until(EC.presence_of_element_located(
             (By.XPATH,
@@ -192,7 +200,8 @@ SELECT generate_series(1, {}) as id1, 'dummy' as id2""".format(
 
         print("On demand result set on grid select all... ",
               file=sys.stderr, end="")
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         wait.until(EC.presence_of_element_located(
             (By.XPATH,
@@ -210,7 +219,8 @@ SELECT generate_series(1, {}) as id1, 'dummy' as id2""".format(
 
         print("On demand result set on column select all... ",
               file=sys.stderr, end="")
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
 
@@ -252,16 +262,19 @@ SELECT generate_series(1, 1000) as id order by id desc"""
 
         self.page.fill_codemirror_area_with(query)
 
-        explain_op = self.page.find_by_id("btn-explain-options-dropdown")
+        explain_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_explain_options_dropdown)
         explain_op.click()
 
         # disable Explain options and auto rollback only if they are enabled.
-        for op in ('explain-verbose', 'explain-costs'):
-            self.page.find_by_id("btn-{}".format(op)).click()
+        for op in (QueryToolLocatorsCss.btn_explain_verbose,
+                   QueryToolLocatorsCss.btn_explain_costs):
+            self.page.find_by_css_selector(op).click()
 
         explain_op.click()
 
-        self.page.find_by_id("btn-explain").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_explain).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
 
@@ -285,16 +298,19 @@ SELECT generate_series(1, 1000) as id order by id desc"""
 
         self.page.fill_codemirror_area_with(query)
 
-        explain_op = self.page.find_by_id("btn-explain-options-dropdown")
+        explain_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_explain_options_dropdown)
         explain_op.click()
 
         # disable Explain options and auto rollback only if they are enabled.
-        for op in ('explain-buffers', 'explain-timing'):
-            self.page.find_by_id("btn-{}".format(op)).click()
+        for op in (QueryToolLocatorsCss.btn_explain_buffers,
+                   QueryToolLocatorsCss.btn_explain_timing):
+            self.page.find_by_css_selector(op).click()
 
         explain_op.click()
 
-        self.page.find_by_id("btn-explain-analyze").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_explain_analyze).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
 
@@ -324,14 +340,17 @@ CREATE TABLE public.{}();""".format(table_name)
 
         self.page.fill_codemirror_area_with(query)
 
-        query_op = self.page.find_by_id("btn-query-dropdown")
+        query_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_query_dropdown)
         query_op.click()
 
-        self.page.find_by_id("btn-auto-commit").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_commit).click()
 
         query_op.click()
 
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -347,7 +366,8 @@ CREATE TABLE public.{}();""".format(table_name)
 -- 4. Check if table is *NOT* created.
 ROLLBACK;"""
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -364,7 +384,8 @@ ROLLBACK;"""
 SELECT relname FROM pg_class
     WHERE relkind IN ('r','s','t') and relnamespace = 2200::oid;"""
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Data Output')
@@ -393,14 +414,17 @@ END;"""
 
         wait = WebDriverWait(self.page.driver, 10)
 
-        query_op = self.page.find_by_id("btn-query-dropdown")
+        query_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_query_dropdown)
         query_op.click()
 
-        self.page.find_by_id("btn-auto-commit").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_commit).click()
 
         query_op.click()
 
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
 
@@ -416,7 +440,8 @@ CREATE TABLE public.{}();""".format(table_name)
 
         self.page.fill_codemirror_area_with(query)
 
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -433,7 +458,8 @@ CREATE TABLE public.{}();""".format(table_name)
 -- 5. Check if table is created event after ROLLBACK.
 ROLLBACK;"""
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -451,7 +477,8 @@ ROLLBACK;"""
 SELECT relname FROM pg_class
     WHERE relkind IN ('r','s','t') and relnamespace = 2200::oid;"""
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.click_tab('Data Output')
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
@@ -479,16 +506,20 @@ END;"""
 
         self.page.fill_codemirror_area_with(query)
 
-        query_op = self.page.find_by_id("btn-query-dropdown")
+        query_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_query_dropdown)
         query_op.click()
 
-        self.page.find_by_id("btn-auto-rollback").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_rollback).click()
 
-        self.page.find_by_id("btn-auto-commit").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_commit).click()
 
         query_op.click()
 
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self._clear_query_tool()
@@ -504,7 +535,8 @@ CREATE TABLE public.{}();""".format(table_name)
 
         self.page.fill_codemirror_area_with(query)
 
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -522,7 +554,8 @@ CREATE TABLE public.{}();""".format(table_name)
 -- 6. Check if table is *NOT* created after ending transaction.
 SELECT 1/0;"""
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -541,7 +574,8 @@ SELECT 1/0;"""
 END;"""
 
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -560,7 +594,8 @@ END;"""
 SELECT relname FROM pg_class
     WHERE relkind IN ('r','s','t') and relnamespace = 2200::oid;"""
         self.page.fill_codemirror_area_with(query)
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Data Output')
@@ -584,10 +619,12 @@ SELECT 1, pg_sleep(300)"""
 
         self.page.fill_codemirror_area_with(query)
 
-        query_op = self.page.find_by_id("btn-query-dropdown")
+        query_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_query_dropdown)
         query_op.click()
 
-        auto_rollback_btn = self.page.find_by_id("btn-auto-rollback")
+        auto_rollback_btn = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_commit)
 
         auto_rollback_check = auto_rollback_btn.find_element_by_tag_name("i")
 
@@ -600,7 +637,8 @@ SELECT 1, pg_sleep(300)"""
            auto_rollback_check.get_attribute('class')):
             auto_rollback_btn.click()
 
-        auto_commit_btn = self.page.find_by_id("btn-auto-commit")
+        auto_commit_btn = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_auto_commit)
 
         auto_commit_check = auto_commit_btn.find_element_by_tag_name("i")
 
@@ -615,10 +653,12 @@ SELECT 1, pg_sleep(300)"""
 
         query_op.click()
 
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.find_by_xpath("//*[@id='fetching_data']")
-        self.page.find_by_id("btn-cancel-query").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_cancel_query).click()
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
@@ -643,7 +683,8 @@ SELECT 1, pg_sleep(300)"""
 
         print("\n\tListen on an event... ", file=sys.stderr, end="")
         self.page.fill_codemirror_area_with("LISTEN foo;")
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
@@ -656,7 +697,8 @@ SELECT 1, pg_sleep(300)"""
 
         print("\tNotify event without data... ", file=sys.stderr, end="")
         self.page.fill_codemirror_area_with("NOTIFY foo;")
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Notifications')
@@ -670,7 +712,8 @@ SELECT 1, pg_sleep(300)"""
         if self._supported_server_version():
             self.page.fill_codemirror_area_with("SELECT pg_notify('foo', "
                                                 "'Hello')")
-            self.page.find_by_id("btn-flash").click()
+            self.page.find_by_css_selector(
+                QueryToolLocatorsCss.btn_execute_query).click()
 
             self.page.wait_for_query_tool_loading_indicator_to_disappear()
             self.page.click_tab('Notifications')
@@ -707,22 +750,26 @@ SELECT 1, pg_sleep(300)"""
         wait = WebDriverWait(self.page.driver, 10)
 
         self.page.fill_codemirror_area_with("SET jit_above_cost=10;")
-        self.page.find_by_id("btn-flash").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_execute_query).click()
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self._clear_query_tool()
 
         self.page.fill_codemirror_area_with("SELECT count(*) FROM pg_class;")
 
-        explain_op = self.page.find_by_id("btn-explain-options-dropdown")
+        explain_op = self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_explain_options_dropdown)
         explain_op.click()
 
         # disable Explain options and auto rollback only if they are enabled.
-        for op in ('explain-verbose', 'explain-costs', 'explain-analyze'):
-            self.page.find_by_id("btn-{}".format(op)).click()
+        for op in (QueryToolLocatorsCss.btn_explain_verbose,
+                   QueryToolLocatorsCss.btn_explain_costs):
+            self.page.find_by_css_selector(op).click()
 
         explain_op.click()
 
-        self.page.find_by_id("btn-explain-analyze").click()
+        self.page.find_by_css_selector(
+            QueryToolLocatorsCss.btn_explain_analyze).click()
 
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Data Output')
diff --git a/web/pgadmin/feature_tests/view_data_dml_queries.py b/web/pgadmin/feature_tests/view_data_dml_queries.py
index 1be9dcfa..3c00d571 100644
--- a/web/pgadmin/feature_tests/view_data_dml_queries.py
+++ b/web/pgadmin/feature_tests/view_data_dml_queries.py
@@ -109,7 +109,7 @@ CREATE TABLE public.defaults_{0}
         for cnt in (1, 2):
             self.page.select_tree_item('defaults_{0}'.format(str(cnt)))
             # Open Object -> View/Edit data
-            self._view_data_grid()
+            self._view_data_grid('defaults_{0}'.format(str(cnt)))
 
             self.page.wait_for_query_tool_loading_indicator_to_disappear()
             # Run test to insert a new row in table with default values
@@ -214,7 +214,7 @@ CREATE TABLE public.defaults_{0}
         self.page.toggle_open_tree_item('public')
         self.page.toggle_open_tree_item('Tables')
 
-    def _view_data_grid(self):
+    def _view_data_grid(self, table_name):
         self.page.driver.find_element_by_link_text("Object").click()
         ActionChains(
             self.page.driver
@@ -224,7 +224,8 @@ CREATE TABLE public.defaults_{0}
         self.page.find_by_partial_link_text("All Rows").click()
         time.sleep(1)
         # wait until datagrid frame is loaded.
-        self.page.click_tab('Edit Data -')
+
+        self.page.click_tab(table_name)
 
         self.wait.until(
             EC.visibility_of_element_located(
@@ -309,6 +310,7 @@ CREATE TABLE public.defaults_{0}
 
             if (idx != 1 and not is_new_row) or is_new_row:
                 self.assertEquals(element.text, config_data[str(idx)][1])
+                self.assertEquals(element.text, config_data[str(idx)][1])
 
         # scroll browser back to the left
         # to reset position so other assertions can succeed
diff --git a/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py b/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py
index 27ac8c2c..8175bf9f 100644
--- a/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py
+++ b/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py
@@ -52,13 +52,21 @@ class CheckForXssFeatureTest(BaseFeatureTest):
         self._check_xss_in_browser_tree()
         self._check_xss_in_properties_tab()
         self._check_xss_in_sql_tab()
+
+        # sometime the tab for dependent does not show info, so refreshing
+        # the page and then again collapsing until the table node
+        self.page.refresh_page()
+        self.page.toggle_open_servers_group()
+        self._tables_node_expandable()
         self._check_xss_in_dependents_tab()
 
         # Query tool
+        self.page.open_query_tool()
         self._check_xss_in_query_tool()
         self.page.close_query_tool()
 
         # Explain module
+        self.page.open_query_tool()
         self._check_xss_in_explain_module()
         self.page.close_query_tool()
 
@@ -125,6 +133,7 @@ class CheckForXssFeatureTest(BaseFeatureTest):
 
     # Create any constraint with xss name to test this
     def _check_xss_in_dependents_tab(self):
+
         print(
             "\n\tChecking the Dependents tab for the XSS",
             file=sys.stderr, end=""
@@ -142,17 +151,11 @@ class CheckForXssFeatureTest(BaseFeatureTest):
             "Dependents tab (BackGrid)"
         )
 
-    def _open_query_tool(self):
-        self.page.driver.find_element_by_link_text("Tools").click()
-        self.page.find_by_partial_link_text("Query Tool").click()
-        self.page.click_tab('Query -')
-
     def _check_xss_in_query_tool(self):
         print(
             "\n\tChecking the SlickGrid cell for the XSS",
             file=sys.stderr, end=""
         )
-        self._open_query_tool()
         self.page.fill_codemirror_area_with(
             "select '<img src=\"x\" onerror=\"console.log(1)\">'"
         )
@@ -179,14 +182,10 @@ class CheckForXssFeatureTest(BaseFeatureTest):
             "\n\tChecking the Graphical Explain plan for the XSS ...",
             file=sys.stderr, end=""
         )
-        self._open_query_tool()
         self.page.fill_codemirror_area_with(
             'select * from "{0}"'.format(self.test_table_name)
         )
 
-        query_op = self.page.find_by_id("btn-query-dropdown")
-        query_op.click()
-
         self.page.find_by_id("btn-explain").click()
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Explain')
diff --git a/web/pgadmin/tools/datagrid/static/js/datagrid.js b/web/pgadmin/tools/datagrid/static/js/datagrid.js
index 0a795fab..4ed072b6 100644
--- a/web/pgadmin/tools/datagrid/static/js/datagrid.js
+++ b/web/pgadmin/tools/datagrid/static/js/datagrid.js
@@ -54,14 +54,7 @@ define('pgadmin.datagrid', [
           self.preferences = pgBrowser.get_preferences_for_module('sqleditor');
         });
 
-        this.spinner_el =
-          `<div class="pg-sp-container">
-              <div class="pg-sp-content">
-                  <div class="row">
-                      <div class="col-12 pg-sp-icon"></div>
-                  </div>
-              </div>
-          </div>`;
+
         // Define list of nodes on which view data option appears
         var supported_nodes = [
             'table', 'view', 'mview',
@@ -525,17 +518,26 @@ define('pgadmin.datagrid', [
 
           var openQueryToolURL = function(j) {
             // add spinner element
-            $(j).data('embeddedFrame').$container.append(pgAdmin.DataGrid.spinner_el);
-            setTimeout(function() {
+            let $spinner_el =
+              $(`<div class="pg-sp-container">
+                    <div class="pg-sp-content">
+                        <div class="row">
+                            <div class="col-12 pg-sp-icon"></div>
+                        </div>
+                    </div>
+                </div>`).appendTo($(j).data('embeddedFrame').$container);
+
+            let init_poller_id = setInterval(function() {
               var frameInitialized = $(j).data('frameInitialized');
               if (frameInitialized) {
+                clearInterval(init_poller_id);
                 var frame = $(j).data('embeddedFrame');
                 if (frame) {
+                  frame.onLoaded(()=>{
+                    $spinner_el.remove();
+                  });
                   frame.openURL(baseUrl);
-                  frame.$container.find('.pg-sp-container').delay(1000).hide(1);
                 }
-              } else {
-                openQueryToolURL(j);
               }
             }, 100);
           };
diff --git a/web/pgadmin/utils/route.py b/web/pgadmin/utils/route.py
index e67f0195..b206cb2e 100644
--- a/web/pgadmin/utils/route.py
+++ b/web/pgadmin/utils/route.py
@@ -53,7 +53,7 @@ class TestsGeneratorRegistry(ABCMeta):
         ABCMeta.__init__(cls, name, bases, d)
 
     @classmethod
-    def load_generators(cls, pkg_root, exclude_pkgs):
+    def load_generators(cls, pkg_root, exclude_pkgs, for_modules=[]):
 
         cls.registry = dict()
 
@@ -61,6 +61,13 @@ class TestsGeneratorRegistry(ABCMeta):
 
         all_modules += find_modules(pkg_root, False, True)
 
+        # If specific modules are to be tested, exclude others
+        if len(for_modules) > 0:
+            all_modules = [module_name
+                           for module_name in all_modules
+                           for fmod in for_modules
+                           if module_name.endswith(fmod)]
+
         # Check for SERVER mode
         for module_name in all_modules:
             try:
diff --git a/web/regression/README b/web/regression/README
index 7e668cfd..6a68d36f 100644
--- a/web/regression/README
+++ b/web/regression/README
@@ -167,6 +167,14 @@ Python Tests:
      Example 2) Run test framework for 'database' node
      run 'python runtests.py --pkg browser.server_groups.servers.databases.tests'
 
+- Execute test framework for certain modules of a test pkg
+
+     Example 1) Run test framework for 'sqleditor' package and test_start_running_query module
+     run 'python runtests.py --pkg tools.sqleditor --modules test_start_running_query'
+
+     Example 2) Run test framework for 'sqleditor' package and test_start_running_query,test_query_tool_fs_utils modules
+     run 'python runtests.py --pkg tools.sqleditor --modules test_start_running_query,test_query_tool_fs_utils'
+
 - Exclude a package and its subpackages when running tests:
 
     Example: exclude feature tests but run all others:
diff --git a/web/regression/feature_utils/pgadmin_page.py b/web/regression/feature_utils/pgadmin_page.py
index 0c8f0fa3..72fbd356 100644
--- a/web/regression/feature_utils/pgadmin_page.py
+++ b/web/regression/feature_utils/pgadmin_page.py
@@ -10,7 +10,8 @@
 import time
 
 from selenium.common.exceptions import NoSuchElementException, \
-    WebDriverException, TimeoutException, NoSuchWindowException
+    WebDriverException, TimeoutException, NoSuchWindowException, \
+    StaleElementReferenceException
 from selenium.webdriver import ActionChains
 from selenium.webdriver.common.keys import Keys
 from selenium.webdriver.support import expected_conditions as EC
@@ -93,7 +94,6 @@ class PgadminPage:
         self.enable_menu_item(query_tool, 10)
 
         self.find_by_partial_link_text("Query Tool").click()
-        self.click_tab('Query -')
 
     def enable_menu_item(self, menu_item, wait_time):
         start_time = time.time()
@@ -110,11 +110,10 @@ class PgadminPage:
         else:
             assert False, "'Tools -> Query Tool' menu did not enable."
 
-    def close_query_tool(self, name="Query", prompt=True):
+    def close_query_tool(self, prompt=True):
         self.driver.switch_to.default_content()
         tab = self.find_by_xpath(
-            "//*[contains(@class,'wcPanelTab') and "
-            "contains(.,'" + name + "')]")
+            "//div[@class='wcPanelTab wcPanelTabActive']")
         ActionChains(self.driver).context_click(tab).perform()
         self.find_by_xpath(
             "//li[contains(@class, 'context-menu-item')]/span[contains(text(),"
@@ -149,18 +148,37 @@ class PgadminPage:
 
     def select_tree_item(self, tree_item_text):
         item = self.find_by_xpath(
-            "//*[@id='tree']//*[.='" + tree_item_text +
-            "' and @class='aciTreeItem']")
+            "//*[@id='tree']//*[contains(text(), '" + tree_item_text + "')]"
+            "/parent::span[@class='aciTreeItem']")
         self.driver.execute_script("arguments[0].scrollIntoView()", item)
         item.click()
 
-    def toggle_open_tree_item(self, tree_item_text):
-        item = self.find_by_xpath(
-            "//*[@id='tree']//*[.='" + tree_item_text +
-            "']/../*[@class='aciTreeButton']")
+    def toggle_open_servers_group(self):
+        """This will open Servers group to display underlying nodes"""
+        self.wait_for_spinner_to_disappear()
+        server_group = self.find_by_xpath(
+            "//div[@id='tree']//span[@class='aciTreeItem']"
+            "/span[(@class='aciTreeText') and starts-with(text(),'Servers ') "
+            "or starts-with(text(), 'Servers')]")
+        ActionChains(self.driver).double_click(server_group).perform()
 
-        self.driver.execute_script("arguments[0].scrollIntoView()", item)
-        item.click()
+    def toggle_open_tree_item(self, tree_item_text):
+        # 'sleep' here helps in cases where underlying nodes are auto opened.
+        # Otherwise, encountered situations where False value is returned
+        # even if the underlying node to be clicked was Opened.
+        time.sleep(.3)
+        item_with_text = self.find_by_xpath(
+            "//div[@id='tree']//span[@class='aciTreeItem']/span["
+            "(@class='aciTreeText') and text()='" + tree_item_text + "']")
+
+        self.driver.execute_script("arguments[0].scrollIntoView()",
+                                   item_with_text)
+        if item_with_text.find_element_by_xpath(
+            ".//ancestor::*[@class='aciTreeLine']").get_attribute(
+                "aria-expanded") == 'false':
+            item = item_with_text.find_element_by_xpath(
+                ".//parent::*[@class='aciTreeItem']")
+            ActionChains(self.driver).double_click(item).perform()
 
     def toggle_open_server(self, tree_item_text):
         def check_for_password_dialog_or_tree_open(driver):
@@ -224,38 +242,103 @@ class PgadminPage:
             "clicking the element not to throw an exception", click_succeeded
         )
 
-    def fill_input_by_field_name(self, field_name, field_content):
-        field = self.find_by_xpath("//input[@name='" + field_name + "']")
-        backspaces = [Keys.BACKSPACE] * len(field.get_attribute('value'))
+    def js_send_key(self, field, sele_key):
+        keycode = None
+
+        if sele_key in (Keys.RETURN, Keys.ENTER):
+            keycode = 13
+        elif sele_key == Keys.ARROW_DOWN:
+            keycode = 40
 
+        self.driver.execute_script(
+            "arguments[0].dispatchEvent(new KeyboardEvent('keydown', "
+            "{'keyCode':arguments[1], 'which':arguments[1]}));"
+            "arguments[0].dispatchEvent(new KeyboardEvent('keypress', "
+            "{'keyCode':arguments[1], 'which':arguments[1]}));"
+            "arguments[0].dispatchEvent(new KeyboardEvent('keyup', "
+            "{'keyCode':arguments[1], 'which':arguments[1]}));"
+            "arguments[0].dispatchEvent(new Event('input'));"
+            "arguments[0].dispatchEvent(new Event('change'));",
+            field, keycode)
+
+    def js_loose_focus(self, field):
+        self.driver.execute_script(
+            "arguments[0].dispatchEvent(new Event('blur'));", field)
+
+    def fill_input(self, field, field_content, input_keys=False,
+                   key_after_input=Keys.ARROW_DOWN):
         field.click()
-        field.send_keys(backspaces)
-        field.send_keys(str(field_content))
-        self.wait_for_input_field_content(field_name, field_content)
 
-    def fill_codemirror_area_with(self, field_content):
+        # Use send keys if input_keys true, else use javascript to set content
+        if input_keys:
+            backspaces = [Keys.BACKSPACE] * len(field.get_attribute('value'))
+            field.send_keys(backspaces)
+            field.send_keys(str(field_content))
+            self.wait_for_input_by_element(field, field_content)
+        else:
+            self.driver.execute_script("arguments[0].value = arguments[1]",
+                                       field, field_content)
+            # keycode 40 is for arrow down
+            self.js_send_key(field, Keys.ARROW_DOWN)
+
+            if key_after_input:
+                self.js_send_key(field, key_after_input)
+
+    def fill_input_by_field_name(self, field_name, field_content,
+                                 input_keys=False,
+                                 key_after_input=Keys.ARROW_DOWN,
+                                 loose_focus=False):
+        field = self.find_by_css_selector(
+            "input[name='" + field_name + "']:not(:disabled)")
+        self.fill_input(field, field_content, input_keys=input_keys,
+                        key_after_input=key_after_input)
+
+        if loose_focus:
+            self.js_loose_focus(field)
+
+    def fill_input_by_css_selector(self, css_selector, field_content,
+                                   input_keys=False,
+                                   key_after_input=Keys.ARROW_DOWN,
+                                   loose_focus=False):
+        field = self.find_by_css_selector(css_selector)
+        self.fill_input(field, field_content, input_keys=input_keys,
+                        key_after_input=key_after_input)
+
+        if loose_focus:
+            self.js_loose_focus(field)
+
+    def fill_codemirror_area_with(self, field_content, input_keys=False):
         def find_codemirror(driver):
             try:
                 driver.switch_to.default_content()
                 driver.switch_to_frame(
                     driver.find_element_by_tag_name("iframe"))
-                element = driver.find_element_by_xpath(
-                    "//pre[contains(@class,'CodeMirror-line')]/../../../"
-                    "*[contains(@class,'CodeMirror-code')]")
+                element = driver.find_element_by_css_selector(
+                    "#output-panel .CodeMirror")
                 if element.is_displayed() and element.is_enabled():
                     return element
             except (NoSuchElementException, WebDriverException):
                 return False
 
+        codemirror_ele = WebDriverWait(
+            self.driver, timeout=self.timeout, poll_frequency=0.01)\
+            .until(find_codemirror,
+                   "Timed out waiting for codemirror to appear")
+
         time.sleep(1)
-        WebDriverWait(self.driver, timeout=self.timeout, poll_frequency=0.01).\
-            until(find_codemirror, "Timed out waiting for codemirror "
-                                   "to appear").click()
-        time.sleep(1)
+        codemirror_ele.click()
 
-        action = ActionChains(self.driver)
-        action.send_keys(field_content)
-        action.perform()
+        # Use send keys if input_keys true, else use javascript to set content
+        if input_keys:
+            action = ActionChains(self.driver)
+            action.send_keys(field_content)
+            action.perform()
+        else:
+            self.driver.execute_script(
+                "arguments[0].CodeMirror.setValue(arguments[1]);"
+                "arguments[0].CodeMirror.setCursor("
+                "arguments[0].CodeMirror.lineCount(),0);",
+                codemirror_ele, field_content)
 
     def click_tab(self, tab_name):
         WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(
@@ -269,7 +352,15 @@ class PgadminPage:
 
         self.click_element(tab)
 
-    def wait_for_input_field_content(self, field_name, content):
+    def wait_for_input_by_element(self, element, content):
+        def input_field_has_content(driver):
+            return str(content) == element.get_attribute('value')
+
+        return self._wait_for(
+            "field to contain '" + str(content) + "'", input_field_has_content
+        )
+
+    def wait_for_input_field_content(self, field_name, content, wait=1):
         def input_field_has_content(driver):
             element = driver.find_element_by_xpath(
                 "//input[@name='" + field_name + "']")
@@ -277,8 +368,8 @@ class PgadminPage:
             return str(content) == element.get_attribute('value')
 
         return self._wait_for(
-            "field to contain '" + str(content) + "'", input_field_has_content
-        )
+            "field to contain '" + str(content) + "'", input_field_has_content,
+            wait)
 
     def wait_for_element(self, find_method_with_args):
         def element_if_it_exists(driver):
@@ -286,7 +377,7 @@ class PgadminPage:
                 element = find_method_with_args(driver)
                 if element.is_displayed() and element.is_enabled():
                     return True
-            except NoSuchElementException:
+            except (NoSuchElementException, StaleElementReferenceException):
                 return False
 
         self._wait_for("element to exist", element_if_it_exists)
@@ -329,10 +420,10 @@ class PgadminPage:
     def wait_for_query_tool_loading_indicator_to_disappear(self):
         def spinner_has_disappeared(driver):
             try:
-                driver.find_element_by_xpath(
-                    "//*[@id='fetching_data' and @class='hide']"
+                spinner = driver.find_element_by_css_selector(
+                    "#editor-panel .pg-sp-container"
                 )
-                return False
+                return "d-none" in spinner.get_attribute("class")
             except NoSuchElementException:
                 # wait for loading indicator disappear animation to complete.
                 time.sleep(0.5)
diff --git a/web/regression/requirements.txt b/web/regression/requirements.txt
index 5199d32d..9093a3d0 100644
--- a/web/regression/requirements.txt
+++ b/web/regression/requirements.txt
@@ -16,7 +16,7 @@ python-mimeparse==1.6.0
 testscenarios==0.5.0
 testtools==2.3.0
 traceback2==1.4.0
-selenium==3.11.0
+selenium==3.14.0
 
 ###############################################################
 # Modules specifically required for Python3.3 or lesser version
@@ -25,4 +25,4 @@ mock===2.0.0; python_version < '3.3'
 
 # Leave this at the end because there is a bug where the '--install-option'
 # is applied to all subsequent requirements
-chromedriver_installer==0.0.6 --install-option='--chromedriver-version=2.45'
+chromedriver_installer==0.0.6 --install-option='--chromedriver-version=2.46'
diff --git a/web/regression/runtests.py b/web/regression/runtests.py
index 48d3749f..6f95370f 100644
--- a/web/regression/runtests.py
+++ b/web/regression/runtests.py
@@ -230,9 +230,14 @@ def get_test_modules(arguments):
     if arguments['pkg'] is None or arguments['pkg'] == "all":
         TestsGeneratorRegistry.load_generators('pgadmin', exclude_pkgs)
     else:
+        for_modules = []
+        if arguments['modules'] is not None:
+            for_modules = arguments['modules'].split(',')
+
         TestsGeneratorRegistry.load_generators('pgadmin.%s' %
                                                arguments['pkg'],
-                                               exclude_pkgs)
+                                               exclude_pkgs,
+                                               for_modules)
 
     # Sort module list so that test suite executes the test cases sequentially
     module_list = TestsGeneratorRegistry.registry.items()
@@ -263,6 +268,10 @@ def add_arguments():
         '--default_browser',
         help='Executes the feature test in specific browser'
     )
+    parser.add_argument(
+        '--modules',
+        help='Executes the feature test for specific modules in pkg'
+    )
     arg = parser.parse_args()
 
     return arg


^ permalink  raw  reply  [nested|flat] 4+ messages in thread

* Re: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4
  2019-02-25 10:08 [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Usman Muzaffar <[email protected]>
@ 2019-02-25 11:47 ` Dave Page <[email protected]>
  1 sibling, 0 replies; 4+ messages in thread

From: Dave Page @ 2019-02-25 11:47 UTC (permalink / raw)
  To: Usman Muzaffar <[email protected]>; +Cc: pgadmin-hackers

Hi

Unfortunately this failed quite horribly. Here's the output, and I've
attached the log and screenshots.

Note that in addition to what you see, it also seemed to hang everytime on
the drop server confirmation dialogue.

pgAdmin 4 - Application Initialisation

======================================



=============Running the test cases for 'Regression - PG 9.6'=============

runTest
(pgadmin.feature_tests.browser_tool_bar_test.BrowserToolBarFeatureTest)

Browser tool bar feature testStarting pgAdmin 4. Please navigate to
http://127.0.0.1:43989 in your browser.

 ...

Query Tool ToolBar Button OK.


View Data ToolBar Button OK.


Filtered Rows ToolBar Button OK.

ok

runTest
(pgadmin.feature_tests.copy_selected_query_results_feature_test.CopySelectedQueryResultsFeatureTest)

Copy rows, column using button and keyboard shortcut ... ERROR

ERROR

runTest
(pgadmin.feature_tests.file_manager_test.CheckFileManagerFeatureTest)

File manager feature test ... Tests to check if File manager is vulnerable
to XSS... ERROR

ERROR

runTest
(pgadmin.feature_tests.keyboard_shortcut_test.KeyboardShortcutFeatureTest)

Test for keyboard shortcut ... Executing shortcut: File main menu...OK

Executing shortcut: Object main menu...OK

ok

runTest
(pgadmin.feature_tests.pg_datatype_validation_test.PGDataypeFeatureTest)

Test checks for PG data-types output ... ERROR

ERROR

runTest
(pgadmin.feature_tests.pg_utilities_backup_restore_test.PGUtilitiesBackupFeatureTest)

Test for PG utilities - Backup and Restore ... ERROR

ERROR

runTest
(pgadmin.feature_tests.pg_utilities_backup_restore_test.PGUtilitiesBackupFeatureTest)

Test for XSS in Backup and Restore ... ERROR

ERROR

runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for PG maintenance: database ... ERROR

ERROR

runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for PG maintenance: table ... ERROR

ERROR

runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for XSS in maintenance dialog ... ERROR

ERROR

runTest
(pgadmin.feature_tests.query_tool_auto_complete_tests.QueryToolAutoCompleteFeatureTest)

Query tool auto complete feature test ... ERROR

runTest (pgadmin.feature_tests.query_tool_journey_test.QueryToolJourneyTest)

Tests the path through the query tool ... ERROR

ERROR

runTest (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest)

Query tool feature test ... ERROR

runTest (pgadmin.feature_tests.table_ddl_feature_test.TableDdlFeatureTest)

Test table DDL generation ... ERROR

ERROR

runTest (pgadmin.feature_tests.view_data_dml_queries.CheckForViewDataTest)

Validate Insert, Update operations in View/Edit data with given test data
... ERROR

ERROR

runTest
(pgadmin.feature_tests.xss_checks_panels_and_query_tool_test.CheckForXssFeatureTest)

Test XSS check for panels and query tool ... ERROR

ERROR

runTest
(pgadmin.feature_tests.xss_checks_pgadmin_debugger_test.CheckDebuggerForXssFeatureTest)

Tests to check if Debugger is vulnerable to XSS ... ERROR

ERROR

runTest
(pgadmin.feature_tests.xss_checks_roles_control_test.CheckRoleMembershipControlFeatureTest)

Tests to check if Role membership control is vulnerable to XSS ... ERROR

ERROR


======================================================================

ERROR: runTest
(pgadmin.feature_tests.copy_selected_query_results_feature_test.CopySelectedQueryResultsFeatureTest)

Copy rows, column using button and keyboard shortcut

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py",
line 42, in runTest

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.copy_selected_query_results_feature_test.CopySelectedQueryResultsFeatureTest)

Copy rows, column using button and keyboard shortcut

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py",
line 200, in after

    self.page.close_query_tool()

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 119, in close_query_tool

    "//li[contains(@class, 'context-menu-item')]/span[contains(text(),"

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py",
line 80, in click

    self._execute(Command.CLICK_ELEMENT)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py",
line 628, in _execute

    return self._parent.execute(command, params)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",
line 320, in execute

    self.error_handler.check_response(response)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py",
line 242, in check_response

    raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.WebDriverException: Message: unknown error:
Element <span>...</span> is not clickable at point (420, 76). Other element
would receive the click: <div class="ajs-header">...</div>

  (Session info: chrome=72.0.3626.119)

  (Driver info: chromedriver=2.46.628411
(3324f4c8be9ff2f70a05a30ebc72ffb013e1a71e),platform=Mac OS X 10.14.3 x86_64)



======================================================================

ERROR: runTest
(pgadmin.feature_tests.file_manager_test.CheckFileManagerFeatureTest)

File manager feature test

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/file_manager_test.py",
line 51, in runTest

    self._navigate_to_query_tool()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/file_manager_test.py",
line 63, in _navigate_to_query_tool

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.file_manager_test.CheckFileManagerFeatureTest)

File manager feature test

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/file_manager_test.py",
line 45, in after

    self.page.close_query_tool(False)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 119, in close_query_tool

    "//li[contains(@class, 'context-menu-item')]/span[contains(text(),"

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py",
line 80, in click

    self._execute(Command.CLICK_ELEMENT)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py",
line 628, in _execute

    return self._parent.execute(command, params)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",
line 320, in execute

    self.error_handler.check_response(response)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py",
line 242, in check_response

    raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.WebDriverException: Message: unknown error:
Element <span>...</span> is not clickable at point (420, 76). Other element
would receive the click: <div class="ajs-header">...</div>

  (Session info: chrome=72.0.3626.119)

  (Driver info: chromedriver=2.46.628411
(3324f4c8be9ff2f70a05a30ebc72ffb013e1a71e),platform=Mac OS X 10.14.3 x86_64)



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_datatype_validation_test.PGDataypeFeatureTest)

Test checks for PG data-types output

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_datatype_validation_test.py",
line 130, in runTest

    self._schema_node_expandable()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_datatype_validation_test.py",
line 141, in _schema_node_expandable

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_datatype_validation_test.PGDataypeFeatureTest)

Test checks for PG data-types output

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_datatype_validation_test.py",
line 137, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_backup_restore_test.PGUtilitiesBackupFeatureTest)

Test for PG utilities - Backup and Restore

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py",
line 58, in runTest

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_backup_restore_test.PGUtilitiesBackupFeatureTest)

Test for PG utilities - Backup and Restore

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py",
line 158, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_backup_restore_test.PGUtilitiesBackupFeatureTest)

Test for XSS in Backup and Restore

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py",
line 58, in runTest

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_backup_restore_test.PGUtilitiesBackupFeatureTest)

Test for XSS in Backup and Restore

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py",
line 158, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for PG maintenance: database

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 66, in runTest

    self._open_maintenance_dialogue()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 73, in _open_maintenance_dialogue

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for PG maintenance: database

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 117, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for PG maintenance: table

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 66, in runTest

    self._open_maintenance_dialogue()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 73, in _open_maintenance_dialogue

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for PG maintenance: table

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 117, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for XSS in maintenance dialog

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 66, in runTest

    self._open_maintenance_dialogue()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 73, in _open_maintenance_dialogue

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.pg_utilities_maintenance_test.PGUtilitiesMaintenanceFeatureTest)

Test for XSS in maintenance dialog

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py",
line 117, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.query_tool_auto_complete_tests.QueryToolAutoCompleteFeatureTest)

Query tool auto complete feature test

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 45, in setUp

    self.before()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_tool_auto_complete_tests.py",
line 59, in before

    self._locate_database_tree_node()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_tool_auto_complete_tests.py",
line 159, in _locate_database_tree_node

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.query_tool_journey_test.QueryToolJourneyTest)

Tests the path through the query tool

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_tool_journey_test.py",
line 39, in runTest

    self._navigate_to_query_tool()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_tool_journey_test.py",
line 176, in _navigate_to_query_tool

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.query_tool_journey_test.QueryToolJourneyTest)

Tests the path through the query tool

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_tool_journey_test.py",
line 189, in after

    self.page.close_query_tool()

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 119, in close_query_tool

    "//li[contains(@class, 'context-menu-item')]/span[contains(text(),"

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py",
line 80, in click

    self._execute(Command.CLICK_ELEMENT)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py",
line 628, in _execute

    return self._parent.execute(command, params)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",
line 320, in execute

    self.error_handler.check_response(response)

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py",
line 242, in check_response

    raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.WebDriverException: Message: unknown error:
Element <span>...</span> is not clickable at point (420, 76). Other element
would receive the click: <div class="ajs-header">...</div>

  (Session info: chrome=72.0.3626.119)

  (Driver info: chromedriver=2.46.628411
(3324f4c8be9ff2f70a05a30ebc72ffb013e1a71e),platform=Mac OS X 10.14.3 x86_64)



======================================================================

ERROR: runTest (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest)

Query tool feature test

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 45, in setUp

    self.before()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_tool_tests.py",
line 36, in before

    self._locate_database_tree_node()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_tool_tests.py",
line 151, in _locate_database_tree_node

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.table_ddl_feature_test.TableDdlFeatureTest)

Test table DDL generation

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/table_ddl_feature_test.py",
line 35, in runTest

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.table_ddl_feature_test.TableDdlFeatureTest)

Test table DDL generation

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/table_ddl_feature_test.py",
line 48, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.view_data_dml_queries.CheckForViewDataTest)

Validate Insert, Update operations in View/Edit data with given test data

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_data_dml_queries.py",
line 107, in runTest

    self._tables_node_expandable()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_data_dml_queries.py",
line 211, in _tables_node_expandable

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.view_data_dml_queries.CheckForViewDataTest)

Validate Insert, Update operations in View/Edit data with given test data

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_data_dml_queries.py",
line 124, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.xss_checks_panels_and_query_tool_test.CheckForXssFeatureTest)

Test XSS check for panels and query tool

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py",
line 51, in runTest

    self._tables_node_expandable()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py",
line 78, in _tables_node_expandable

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.xss_checks_panels_and_query_tool_test.CheckForXssFeatureTest)

Test XSS check for panels and query tool

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py",
line 74, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.xss_checks_pgadmin_debugger_test.CheckDebuggerForXssFeatureTest)

Tests to check if Debugger is vulnerable to XSS

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py",
line 42, in runTest

    self._function_node_expandable()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py",
line 52, in _function_node_expandable

    self.page.toggle_open_tree_item('Databases')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.xss_checks_pgadmin_debugger_test.CheckDebuggerForXssFeatureTest)

Tests to check if Debugger is vulnerable to XSS

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py",
line 46, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



======================================================================

ERROR: runTest
(pgadmin.feature_tests.xss_checks_roles_control_test.CheckRoleMembershipControlFeatureTest)

Tests to check if Role membership control is vulnerable to XSS

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_roles_control_test.py",
line 37, in runTest

    self._role_node_expandable()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_roles_control_test.py",
line 49, in _role_node_expandable

    self.page.toggle_open_tree_item('Login/Group Roles')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 172, in toggle_open_tree_item

    "(@class='aciTreeText') and text()='" + tree_item_text + "']")

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 212, in find_by_xpath

    lambda driver: driver.find_element_by_xpath(xpath)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 383, in wait_for_element

    self._wait_for("element to exist", element_if_it_exists)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
element to exist



======================================================================

ERROR: runTest
(pgadmin.feature_tests.xss_checks_roles_control_test.CheckRoleMembershipControlFeatureTest)

Tests to check if Role membership control is vulnerable to XSS

----------------------------------------------------------------------

Traceback (most recent call last):

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feature_test.py",
line 68, in tearDown

    self.after()

  File
"/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/xss_checks_roles_control_test.py",
line 41, in after

    self.page.remove_server(self.server)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 147, in remove_server

    self.click_modal('OK')

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 63, in click_modal

    self.click_element(modal_button)

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 242, in click_element

    "clicking the element not to throw an exception", click_succeeded

  File
"/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgadmin_page.py",
line 458, in _wait_for

    "Timed out waiting for " + waiting_for_message

  File
"/Users/dpage/.virtualenvs/pgadmin4/lib/python3.7/site-packages/selenium/webdriver/support/wait.py",
line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for
clicking the element not to throw an exception



----------------------------------------------------------------------

Ran 18 tests in 917.703s


FAILED (errors=30)

Traceback (most recent call last):

  File "regression/runtests.py", line 450, in <module>

    test_utils.drop_database(connection, test_db_name)

  File
"/Users/dpage/git/pgadmin4/web/regression/python_test_utils/test_utils.py",
line 402, in drop_database

    pg_cursor.execute('''DROP DATABASE "%s"''' % database_name)

psycopg2.OperationalError: database "acceptance_test_db58902" is being
accessed by other users

DETAIL:  There is 1 other session using the database.


make: *** [check-feature] Error 1

(pgadmin4) dpage@hal:*~/git/pgadmin4*$

On Mon, Feb 25, 2019 at 10:09 AM Usman Muzaffar <
[email protected]> wrote:

> Hi Hackers,
>
> Please find here attached patch for the followings
> i) Fixes for the query tool related test cases, the tab name convention is
> changed which is catered in the patch.
> ii) The 'dependent' tab was not showing information until it is refreshed
> so handled it during automation(the issue was not reproducible manually).
> iii) New locator file is created to store locators/xpaths.
> iv) Changes in pgadmin_page file related to js.
>
>
> Patch by :
>           Usman & Aditya([email protected])
>
> --
>
>
> Thanks,
>
> Usman Muzaffar
> QA Team
> EnterpriseDB Corporation
>


-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Attachments:

  [application/zip] Archive.zip (2.1M, 3-Archive.zip)
  download

^ permalink  raw  reply  [nested|flat] 4+ messages in thread

* RE: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4
  2019-02-25 10:08 [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Usman Muzaffar <[email protected]>
@ 2019-06-04 15:03 ` Cleber da Silva <[email protected]>
  2019-06-05 08:27   ` Re: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Dave Page <[email protected]>
  1 sibling, 1 reply; 4+ messages in thread

From: Cleber da Silva @ 2019-06-04 15:03 UTC (permalink / raw)
  To: Usman Muzaffar <[email protected]>; pgadmin-hackers

Morning, how are you guys?
Sorry, but I am no longer want to be part of this list. Could you, please, take off my e-mail address?

Bests,

--
Cleber


Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986; for Windows 10

________________________________
From: Usman Muzaffar <[email protected]>
Sent: Monday, February 25, 2019 7:08:53 AM
To: pgadmin-hackers
Subject: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4

Hi Hackers,

Please find here attached patch for the followings
i) Fixes for the query tool related test cases, the tab name convention is changed which is catered in the patch.
ii) The 'dependent' tab was not showing information until it is refreshed so handled it during automation(the issue was not reproducible manually).
iii) New locator file is created to store locators/xpaths.
iv) Changes in pgadmin_page file related to js.


Patch by :
          Usman & Aditya([email protected]<mailto:[email protected]>)

--


Thanks,

Usman Muzaffar
QA Team
EnterpriseDB Corporation


^ permalink  raw  reply  [nested|flat] 4+ messages in thread

* Re: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4
  2019-02-25 10:08 [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Usman Muzaffar <[email protected]>
  2019-06-04 15:03 ` RE: [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Cleber da Silva <[email protected]>
@ 2019-06-05 08:27   ` Dave Page <[email protected]>
  0 siblings, 0 replies; 4+ messages in thread

From: Dave Page @ 2019-06-05 08:27 UTC (permalink / raw)
  To: Cleber da Silva <[email protected]>; +Cc: Usman Muzaffar <[email protected]>; pgadmin-hackers

See https://www.pgadmin.org/support/list/ or the headers in every email on
the list for info on how to manage your subscription.

On Tue, Jun 4, 2019 at 4:03 PM Cleber da Silva <[email protected]> wrote:

> Morning, how are you guys?
>
> Sorry, but I am no longer want to be part of this list. Could you, please,
> take off my e-mail address?
>
>
>
> Bests,
>
>
>
> --
>
> Cleber
>
>
>
>
>
> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986; for
> Windows 10
>
>
> ------------------------------
> *From:* Usman Muzaffar <[email protected]>
> *Sent:* Monday, February 25, 2019 7:08:53 AM
> *To:* pgadmin-hackers
> *Subject:* [pgAdmin4][RM3936] - Fixes for feature test due to changes in
> pgadmin4
>
> Hi Hackers,
>
> Please find here attached patch for the followings
> i) Fixes for the query tool related test cases, the tab name convention is
> changed which is catered in the patch.
> ii) The 'dependent' tab was not showing information until it is refreshed
> so handled it during automation(the issue was not reproducible manually).
> iii) New locator file is created to store locators/xpaths.
> iv) Changes in pgadmin_page file related to js.
>
>
> Patch by :
>           Usman & Aditya([email protected])
>
> --
>
>
> Thanks,
>
> Usman Muzaffar
> QA Team
> EnterpriseDB Corporation
>


-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


^ permalink  raw  reply  [nested|flat] 4+ messages in thread


end of thread, other threads:[~2019-06-05 08:27 UTC | newest]

Thread overview: 4+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2019-02-25 10:08 [pgAdmin4][RM3936] - Fixes for feature test due to changes in pgadmin4 Usman Muzaffar <[email protected]>
2019-02-25 11:47 ` Dave Page <[email protected]>
2019-06-04 15:03 ` Cleber da Silva <[email protected]>
2019-06-05 08:27   ` Dave Page <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox