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 619b9af3a..33003a06d 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
@@ -12,6 +12,7 @@ import time
 
 from selenium.webdriver import ActionChains
 from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.common.by import By
 from regression.python_test_utils import test_utils
 from regression.feature_utils.base_feature_test import BaseFeatureTest
 from regression.feature_utils.locators import QueryToolLocators
@@ -62,7 +63,7 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
     def paste_values_to_scratch_pad(self):
         self.page.driver.switch_to.default_content()
         self.page.driver.switch_to.frame(
-            self.page.driver.find_element_by_tag_name("iframe"))
+            self.page.driver.find_element(By.TAG_NAME, "iframe"))
         scratch_pad_ele = self.page.find_by_css_selector(
             QueryToolLocators.scratch_pad_css)
         self.page.paste_values(scratch_pad_ele)
diff --git a/web/pgadmin/feature_tests/pg_datatype_validation_test.py b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
index cbc43a1e0..1f792a993 100644
--- a/web/pgadmin/feature_tests/pg_datatype_validation_test.py
+++ b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
@@ -137,7 +137,7 @@ class PGDataypeFeatureTest(BaseFeatureTest):
         self.page.click_modal('Save')
 
         self.page.wait_for_element_to_disappear(
-            lambda driver: driver.find_element_by_css_selector(".ajs-modal")
+            lambda driver: driver.find_element(By.CSS_SELECTOR, ".ajs-modal")
         )
         time.sleep(0.5)
 
@@ -200,8 +200,8 @@ class PGDataypeFeatureTest(BaseFeatureTest):
 
             # For every sample data-type value, check the expected output.
             cnt = 2
-            cells = canvas.find_elements_by_css_selector(
-                QueryToolLocators.query_output_cells)
+            cells = canvas.find_elements(
+                By.CSS_SELECTOR, QueryToolLocators.query_output_cells)
             # remove first element as it is row number.
             cells.pop(0)
             for val, cell, datatype in zip(
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 9a8650bb2..c990dbb98 100644
--- a/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py
+++ b/web/pgadmin/feature_tests/pg_utilities_backup_restore_test.py
@@ -87,8 +87,8 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
             (By.XPATH,
              NavMenuLocators.process_watcher_alertfier))
         self.page.wait_for_element_to_disappear(
-            lambda driver: driver.find_element_by_css_selector(
-                ".loading-logs"), 10)
+            lambda driver: driver.find_element(
+                By.CSS_SELECTOR, ".loading-logs"), 10)
 
         expected_backup_success_msg = "Successfully completed."
         self.assertEqual(status, expected_backup_success_msg)
@@ -133,8 +133,8 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
             (By.XPATH,
              NavMenuLocators.process_watcher_alertfier))
         self.page.wait_for_element_to_disappear(
-            lambda driver: driver.find_element_by_css_selector(
-                ".loading-logs"), 10)
+            lambda driver: driver.find_element(
+                By.CSS_SELECTOR, ".loading-logs"), 10)
         self.assertEqual(status, expected_backup_success_msg)
 
         # Check for XSS in Restore details
@@ -209,15 +209,16 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
             try:
                 take_bckup.click()
                 if self.page.wait_for_element_to_disappear(
-                    lambda driver: driver.find_element_by_name(
+                    lambda driver: driver.find_element(
+                        By.NAME,
                         NavMenuLocators.backup_filename_txt_box_name)):
                     click = False
             except Exception:
                 pass
 
     def initiate_restore(self):
-        tools_menu = self.driver.find_element_by_link_text(
-            NavMenuLocators.tools_menu_link_text)
+        tools_menu = self.driver.find_element(
+            By.LINK_TEXT, NavMenuLocators.tools_menu_link_text)
         tools_menu.click()
 
         restore_obj = self.page.find_by_css_selector(
@@ -239,7 +240,8 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
         restore_btn.click()
 
         self.page.wait_for_element_to_disappear(
-            lambda driver: driver.find_element_by_css_selector(
+            lambda driver: driver.find_element(
+                By.CSS_SELECTOR,
                 NavMenuLocators.restore_file_name_txt_box_name))
 
     def _check_escaped_characters(self, source_code, string_to_find, source):
@@ -286,8 +288,8 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
         default_binary_path = self.server['default_binary_paths']
         if default_binary_path is not None:
             def get_server_version_string():
-                server_version = {130000: '13', 120000: '12', 110000: '11',
-                                  100000: '10', 90600: '9.6'}
+                server_version = {140000: '14', 130000: '13', 120000: '12',
+                                  110000: '11', 100000: '10', 90600: '9.6'}
                 for k, v in server_version.items():
                     if k <= self.server_information['server_version']:
                         return v
@@ -317,5 +319,5 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
         self.page.click_modal('Save')
 
         self.page.wait_for_element_to_disappear(
-            lambda driver: driver.find_element_by_css_selector(".ajs-modal")
+            lambda driver: driver.find_element(By.CSS_SELECTOR, ".ajs-modal")
         )
diff --git a/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py b/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py
index 344e6b2c4..481bf2cf2 100644
--- a/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py
+++ b/web/pgadmin/feature_tests/pg_utilities_maintenance_test.py
@@ -81,8 +81,8 @@ class PGUtilitiesMaintenanceFeatureTest(BaseFeatureTest):
         self._open_maintenance_dialogue()
         self.page.click_modal('OK')
         self.page.wait_for_element_to_disappear(
-            lambda driver: driver.find_element_by_xpath(
-                NavMenuLocators.maintenance_operation))
+            lambda driver: driver.find_element(
+                By.XPATH, NavMenuLocators.maintenance_operation))
 
         # Wait for the backup status alertfier
         self.wait.until(EC.visibility_of_element_located(
@@ -129,8 +129,8 @@ class PGUtilitiesMaintenanceFeatureTest(BaseFeatureTest):
             (By.XPATH,
              NavMenuLocators.process_watcher_alertfier))
         self.page.wait_for_element_to_disappear(
-            lambda driver: driver.find_element_by_css_selector(".loading-logs")
-        )
+            lambda driver: driver.find_element(
+                By.CSS_SELECTOR, ".loading-logs"))
 
         if status != "Successfully completed.":
             self.assertEqual(status, "Successfully completed.")
diff --git a/web/pgadmin/feature_tests/query_tool_tests.py b/web/pgadmin/feature_tests/query_tool_tests.py
index 1de2686de..fd8d20e04 100644
--- a/web/pgadmin/feature_tests/query_tool_tests.py
+++ b/web/pgadmin/feature_tests/query_tool_tests.py
@@ -468,8 +468,9 @@ SELECT relname FROM pg_catalog.pg_class
         canvas = self.wait.until(EC.presence_of_element_located(
             (By.CSS_SELECTOR, QueryToolLocators.query_output_canvas_css)))
 
-        el = canvas.find_elements_by_xpath(
-            QueryToolLocators.output_column_data_xpath.format(table_name))
+        el = canvas.find_elements(
+            By.XPATH, QueryToolLocators.output_column_data_xpath.format(
+                table_name))
 
         assert len(el) != 0, "Table '{}' is not created with auto " \
                              "commit enabled.".format(table_name)
@@ -561,8 +562,9 @@ SELECT relname FROM pg_catalog.pg_class
         canvas = self.wait.until(EC.presence_of_element_located(
             (By.CSS_SELECTOR, QueryToolLocators.query_output_canvas_css)))
 
-        el = canvas.find_elements_by_xpath(
-            QueryToolLocators.output_column_data_xpath.format(table_name))
+        el = canvas.find_elements(
+            By.XPATH, QueryToolLocators.output_column_data_xpath.format(
+                table_name))
 
         assert len(el) == 0, "Table '{}' created even after ROLLBACK due to " \
                              "sql error.".format(table_name)
diff --git a/web/pgadmin/feature_tests/test_copy_sql_to_query_tool.py b/web/pgadmin/feature_tests/test_copy_sql_to_query_tool.py
index f4b6ded7f..0ea06681c 100644
--- a/web/pgadmin/feature_tests/test_copy_sql_to_query_tool.py
+++ b/web/pgadmin/feature_tests/test_copy_sql_to_query_tool.py
@@ -56,8 +56,8 @@ class CopySQLFeatureTest(BaseFeatureTest):
             % self.test_table_name, 10), "No data displayed in SQL tab")
 
         # Fetch the inner html & check for escaped characters
-        source_code = self.driver.find_elements_by_xpath(
-            QueryToolLocators.code_mirror_data_xpath)
+        source_code = self.driver.find_elements(
+            By.XPATH, QueryToolLocators.code_mirror_data_xpath)
 
         sql_query = ''
         for data in source_code:
@@ -74,10 +74,10 @@ class CopySQLFeatureTest(BaseFeatureTest):
 
         self.driver.switch_to.default_content()
         self.driver.switch_to.frame(
-            self.driver.find_element_by_tag_name("iframe"))
+            self.driver.find_element(By.TAG_NAME, "iframe"))
 
-        code_mirror = self.driver.find_elements_by_xpath(
-            QueryToolLocators.code_mirror_data_xpath)
+        code_mirror = self.driver.find_elements(
+            By.XPATH, QueryToolLocators.code_mirror_data_xpath)
         query_tool_result = ''
         for data in code_mirror:
             query_tool_result += data.text
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 5cda88be7..2294b95cc 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
@@ -285,7 +285,7 @@ class CheckForXssFeatureTest(BaseFeatureTest):
 
         self.page.find_by_css_selector(".slick-header-column")
         cells = self.driver. \
-            find_elements_by_css_selector(".slick-header-column")
+            find_elements(By.CSS_SELECTOR, ".slick-header-column")
 
         # remove first element as it is row number.
         # currently 4th col
@@ -315,9 +315,9 @@ class CheckForXssFeatureTest(BaseFeatureTest):
             # Re-try logic
             try:
                 ActionChains(self.driver).move_to_element(
-                    self.driver.find_element_by_css_selector(
-                        'div.pgadmin-explain-container > svg > g > g > image'
-                    )
+                    self.driver.find_element(
+                        By.CSS_SELECTOR,
+                        'div.pgadmin-explain-container > svg > g > g > image')
                 ).click().perform()
                 break
             except Exception:
@@ -331,7 +331,8 @@ class CheckForXssFeatureTest(BaseFeatureTest):
                     )
                     raise
 
-        source_code = self.driver.find_element_by_css_selector(
+        source_code = self.driver.find_element(
+            By.CSS_SELECTOR,
             '.pgadmin-explain-details:not(.d-none)').get_attribute('innerHTML')
 
         self._check_escaped_characters(
diff --git a/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py b/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
index c04f1ad0f..d5c2b5f09 100644
--- a/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
+++ b/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
@@ -134,7 +134,7 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
             self._close_debugger()
 
     def _close_debugger(self):
-        self.page.driver.switch_to_default_content()
+        self.page.driver.switch_to.default_content()
         self.page.click_element(
             self.page.find_by_xpath(
                 "//*[@id='dockerContainer']/div/div[3]/div/div[2]/div[1]")
diff --git a/web/regression/feature_utils/pgadmin_page.py b/web/regression/feature_utils/pgadmin_page.py
index e648bc625..11ccabf28 100644
--- a/web/regression/feature_utils/pgadmin_page.py
+++ b/web/regression/feature_utils/pgadmin_page.py
@@ -193,7 +193,7 @@ class PgadminPage:
             " 'Remove Panel')]").click()
         if prompt:
             self.driver.switch_to.frame(
-                self.driver.find_elements_by_tag_name("iframe")[0])
+                self.driver.find_elements(By.TAG_NAME, "iframe")[0])
             time.sleep(.5)
             self.click_element(self.find_by_xpath(
                 '//button[contains(@class, "ajs-button") and '
@@ -241,8 +241,8 @@ class PgadminPage:
     def check_execute_option(self, option):
         """"This function will check auto commit or auto roll back based on
         user input. If button is already checked, no action will be taken"""
-        query_options = self.driver.find_element_by_css_selector(
-            QueryToolLocators.btn_query_dropdown)
+        query_options = self.driver.find_element(
+            By.CSS_SELECTOR, QueryToolLocators.btn_query_dropdown)
         expanded = query_options.get_attribute("aria-expanded")
         if expanded == "false":
             query_options.click()
@@ -250,8 +250,8 @@ class PgadminPage:
         def update_execute_option_setting(
                 css_selector_of_option_status, css_selector_of_option,):
             retry = 3
-            check_status = self.driver.find_element_by_css_selector(
-                css_selector_of_option_status)
+            check_status = self.driver.find_element(
+                By.CSS_SELECTOR, css_selector_of_option_status)
             if 'visibility-hidden' in check_status.get_attribute('class'):
                 while retry > 0:
                     self.find_by_css_selector(css_selector_of_option).click()
diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py
index 10397e122..541e8eff2 100644
--- a/web/regression/python_test_utils/test_utils.py
+++ b/web/regression/python_test_utils/test_utils.py
@@ -1439,11 +1439,7 @@ def get_parallel_sequential_module_list(module_list):
     """
     # list of files consisting tests that needs to be
     # executed sequentially
-    sequential_tests_file = [
-        'pgadmin.feature_tests.pg_utilities_backup_restore_test',
-        'pgadmin.feature_tests.pg_utilities_maintenance_test',
-        'pgadmin.feature_tests.keyboard_shortcut_test'
-    ]
+    sequential_tests_file = []
 
     #  list of tests can be executed in parallel
     parallel_tests = list(module_list)
diff --git a/web/regression/requirements.txt b/web/regression/requirements.txt
index 0a5ba0f36..78cd3ba9c 100644
--- a/web/regression/requirements.txt
+++ b/web/regression/requirements.txt
@@ -25,5 +25,5 @@ python-mimeparse==1.6.0
 testscenarios==0.5.0
 testtools==2.3.0
 traceback2==1.4.0
-selenium==4.0.0
+selenium==4.0.0a6
 coverage==5.0.1
