Fixed feature tests.

Changes included:
  1. Created function for traversing the browser tree.
  2. Fixed some synchronization issues.
  3. Modified locators.
  4. Test cases fix for the recent commits.
This commit is contained in:
Shubham Agarwal
2019-11-11 10:49:00 +05:30
committed by Akshay Joshi
parent ea0c077180
commit b48121335c
18 changed files with 590 additions and 155 deletions

View File

@@ -47,7 +47,7 @@ class BrowserToolBarFeatureTest(BaseFeatureTest):
file=sys.stderr, end="")
self.test_view_data_tool_button()
print("OK.", file=sys.stderr)
#
# Check for filtered rows button
print("\nFiltered Rows ToolBar Button ",
file=sys.stderr, end="")
@@ -60,9 +60,9 @@ class BrowserToolBarFeatureTest(BaseFeatureTest):
self.test_table_name)
def test_query_tool_button(self):
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.retry_click(
(By.CSS_SELECTOR,
BrowserToolBarLocators.open_query_tool_button_css),
@@ -70,9 +70,12 @@ class BrowserToolBarFeatureTest(BaseFeatureTest):
def test_view_data_tool_button(self):
self.page.select_tree_item(self.test_db)
self.page.toggle_open_tree_item('Schemas')
self.page.toggle_open_tree_item('public')
self.page.toggle_open_tables_node()
self.page.toggle_open_schema_node(
self.server['name'], self.server['db_password'],
self.test_db, 'public')
self.page.toggle_open_tables_node(
self.server['name'], self.server['db_password'],
self.test_db, 'public')
self.page.select_tree_item(self.test_table_name)
self.page.retry_click(

View File

@@ -39,9 +39,9 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
self.server, self.test_db, self.test_table_name)
def runTest(self):
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.open_query_tool()
self.page.fill_codemirror_area_with(
@@ -70,7 +70,7 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
QueryToolLocators.copy_button_css)
copy_button.click()
self.assertEqual('"Some-Name"\t"6"\t"some info"',
self.assertEqual('"Some-Name"\t6\t"some info"',
pyperclip.paste())
def _copies_rows_with_header(self):
@@ -87,9 +87,9 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
copy_button.click()
self.assertEqual("""\"some_column"\t"value"\t"details"
\"Some-Name"\t"6"\t"some info"
\"Some-Other-Name"\t"22"\t"some other info"
\"Yet-Another-Name"\t"14"\t"cool info\"""", pyperclip.paste())
\"Some-Name"\t6\t"some info"
\"Some-Other-Name"\t22\t"some other info"
\"Yet-Another-Name"\t14\t"cool info\"""", pyperclip.paste())
def _copies_columns(self):
pyperclip.copy("old clipboard contents")
@@ -116,7 +116,7 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
ActionChains(self.page.driver).key_down(
Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
self.assertEqual('"Some-Name"\t"6"\t"some info"',
self.assertEqual('"Some-Name"\t6\t"some info"',
pyperclip.paste())
def _copies_column_using_keyboard_shortcut(self):
@@ -154,8 +154,8 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
self.page.driver
).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
self.assertEqual("""\"Some-Other-Name"\t"22"
"Yet-Another-Name"\t"14\"""", pyperclip.paste())
self.assertEqual(
'"Some-Other-Name"\t22\n"Yet-Another-Name"\t14', pyperclip.paste())
def _shift_resizes_rectangular_selection(self):
pyperclip.copy("old clipboard contents")
@@ -180,8 +180,8 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
Keys.CONTROL
).send_keys('c').key_up(Keys.CONTROL).perform()
self.assertEqual("""\"Some-Other-Name"\t"22"\t"some other info"
"Yet-Another-Name"\t"14"\t"cool info\"""", pyperclip.paste())
self.assertEqual("""\"Some-Other-Name"\t22\t"some other info"
"Yet-Another-Name"\t14\t"cool info\"""", pyperclip.paste())
def _shift_resizes_column_selection(self):
pyperclip.copy("old clipboard contents")
@@ -198,9 +198,7 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
self.assertEqual(
"""\"Some-Name"\t"6"
"Some-Other-Name"\t"22"
"Yet-Another-Name"\t"14\"""",
'"Some-Name"\t6\n"Some-Other-Name"\t22\n"Yet-Another-Name"\t14',
pyperclip.paste())
def _mouseup_outside_grid_still_makes_a_selection(self):

View File

@@ -60,9 +60,9 @@ class CheckFileManagerFeatureTest(BaseFeatureTest):
print("OK.", file=sys.stderr)
def _navigate_to_query_tool(self):
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.open_query_tool()
def _create_new_file(self):

View File

@@ -149,9 +149,9 @@ class PGDataypeFeatureTest(BaseFeatureTest):
self.page.remove_server(self.server)
def _schema_node_expandable(self):
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
def _check_datatype(self):
# Slick grid does not render all the column if viewport is not enough

View File

@@ -64,9 +64,9 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
test_gui_helper.close_bgprocess_popup(self)
def runTest(self):
self.page.toggle_open_server(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.database_name)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.database_name)
# Backup
self.page.retry_click(
@@ -115,11 +115,11 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
self.assertEquals(status, "Successfully completed.")
self.page.find_by_css_selector(
NavMenuLocators.status_alertifier_more_btn_css).click()
self.wait.until(EC.visibility_of_element_located(
(By.XPATH, NavMenuLocators.process_watcher_alertfier)))
self.page.retry_click(
(By.CSS_SELECTOR,
NavMenuLocators.status_alertifier_more_btn_css),
(By.XPATH,
NavMenuLocators.process_watcher_alertfier))
backup_file = None
# Check for XSS in Backup details
@@ -143,9 +143,7 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
backup_file = command[int(command.find('--file')) +
8:int(command.find('--host')) - 2]
close_btn = self.page.find_by_xpath(
NavMenuLocators.process_watcher_close_button_xpath)
close_btn.click()
test_gui_helper.close_process_watcher(self)
# Restore
tools_menu = self.driver.find_element_by_link_text(
@@ -186,11 +184,11 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
self.assertEquals(status, "Successfully completed.")
self.page.find_by_css_selector(
NavMenuLocators.status_alertifier_more_btn_css).click()
self.wait.until(EC.visibility_of_element_located(
(By.XPATH, NavMenuLocators.process_watcher_alertfier)))
self.page.retry_click(
(By.CSS_SELECTOR,
NavMenuLocators.status_alertifier_more_btn_css),
(By.XPATH,
NavMenuLocators.process_watcher_alertfier))
# Check for XSS in Restore details
if self.is_xss_check:
@@ -206,9 +204,7 @@ class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
self.assertIn("pg_restore", str(command))
close_watcher = self.page.find_by_xpath(
NavMenuLocators.process_watcher_close_button_xpath)
close_watcher.click()
test_gui_helper.close_process_watcher(self)
if backup_file is not None:
if os.path.isfile(backup_file):

View File

@@ -90,20 +90,22 @@ class PGUtilitiesMaintenanceFeatureTest(BaseFeatureTest):
self.verify_command()
def _open_maintenance_dialogue(self):
self.page.toggle_open_server(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.database_name)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.database_name)
if self.test_level == 'table':
self.page.toggle_open_tree_item('Schemas')
self.page.toggle_open_tree_item('public')
self.page.toggle_open_tables_node()
self.page.toggle_open_schema_node(self.server['name'],
self.server['db_password'],
self.database_name, 'public')
self.page.toggle_open_tables_node(self.server['name'],
self.server['db_password'],
self.database_name, 'public')
self.page.select_tree_item(self.table_name)
self.page.retry_click(
(By.LINK_TEXT,
NavMenuLocators.tools_menu_link_text),
(By.CSS_SELECTOR, NavMenuLocators.maintenance_obj_css))
maintenance_obj = self.wait.until(EC.visibility_of_element_located(
(By.CSS_SELECTOR, NavMenuLocators.maintenance_obj_css)))
maintenance_obj.click()
@@ -118,11 +120,12 @@ class PGUtilitiesMaintenanceFeatureTest(BaseFeatureTest):
test_gui_helper.close_bgprocess_popup(self)
self.assertEquals(status, "Successfully completed.")
self.page.find_by_css_selector(
NavMenuLocators.status_alertifier_more_btn_css).click()
self.wait.until(EC.visibility_of_element_located(
(By.XPATH, NavMenuLocators.process_watcher_alertfier)))
self.page.retry_click(
(By.CSS_SELECTOR,
NavMenuLocators.status_alertifier_more_btn_css),
(By.XPATH,
NavMenuLocators.process_watcher_alertfier))
command = self.page.find_by_css_selector(
NavMenuLocators.
@@ -148,13 +151,12 @@ class PGUtilitiesMaintenanceFeatureTest(BaseFeatureTest):
"\nVACUUM VERBOSE"
" public." + self.table_name + ";")
self.page.find_by_xpath(
NavMenuLocators.process_watcher_close_button_xpath).click()
test_gui_helper.close_process_watcher(self)
def after(self):
test_gui_helper.close_bgprocess_popup(self)
self.page.remove_server(self.server)
test_utils.delete_table(self.server, self.test_db,
test_utils.delete_table(self.server, self.database_name,
self.table_name)
connection = test_utils.get_db_connection(
self.server['db'],

View File

@@ -56,9 +56,9 @@ class QueryToolAutoCompleteFeatureTest(BaseFeatureTest):
test_utils.create_table(self.server, self.test_db,
self.second_table_name)
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.open_query_tool()
self.page.wait_for_spinner_to_disappear()

View File

@@ -103,7 +103,7 @@ class QueryToolJourneyTest(BaseFeatureTest):
QueryToolLocators.copy_button_css)
copy_row.click()
self.assertEqual('"Some-Name"\t"6"\t"some info"',
self.assertEqual('"Some-Name"\t6\t"some info"',
pyperclip.paste())
def _test_copies_columns(self):
@@ -380,9 +380,9 @@ class QueryToolJourneyTest(BaseFeatureTest):
self.page.click_modal('Yes')
def _navigate_to_query_tool(self):
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.open_query_tool()
self.page.wait_for_spinner_to_disappear()

View File

@@ -35,9 +35,9 @@ class QueryToolFeatureTest(BaseFeatureTest):
def before(self):
self.page.wait_for_spinner_to_disappear()
self.page.add_server(self.server)
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.open_query_tool()
self.page.wait_for_spinner_to_disappear()
self._reset_options()
@@ -254,7 +254,7 @@ SELECT generate_series(1, {}) as id1, 'dummy' as id2""".format(
)
# Table height takes some time to update, for which their is no
# particular way
time.sleep(1)
time.sleep(2)
if canvas_ele.size['height'] == scrolling_height:
break
else:

View File

@@ -32,12 +32,12 @@ class TableDdlFeatureTest(BaseFeatureTest):
test_utils.create_table(self.server, self.test_db,
self.test_table_name)
self.page.toggle_open_server(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.toggle_open_tree_item('Schemas')
self.page.toggle_open_tree_item('public')
self.page.toggle_open_tree_item('Tables')
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.toggle_open_tables_node(
self.server['name'], self.server['db_password'],
self.test_db, 'public')
self.page.select_tree_item(self.test_table_name)
self.page.click_tab("SQL")

View File

@@ -122,12 +122,12 @@ CREATE TABLE public.nonintpkey
self.page.wait_for_spinner_to_disappear()
self.page.add_server(self.server)
self.page.toggle_open_tree_item(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.toggle_open_tree_item('Schemas')
self.page.toggle_open_tree_item('public')
self.page.toggle_open_tree_item('Tables')
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.toggle_open_tables_node(self.server['name'],
self.server['db_password'],
self.test_db, 'public')
self._load_config_data('table_insert_update_cases')
# iterate on both tables
@@ -349,13 +349,13 @@ CREATE TABLE public.nonintpkey
element = result_row.find_element_by_class_name("r" + str(idx))
self.page.driver.execute_script(
"arguments[0].scrollIntoView(false)", element)
self.assertEquals(element.text, config_check_data[str(idx)][1])
time.sleep(0.4)
self.assertEquals(element.text, config_check_data[str(idx)][1])
# scroll browser back to the left
# to reset position so other assertions can succeed
for idx in reversed(list(config_check_data.keys())):
time.sleep(0.4)
element = result_row.find_element_by_class_name("r" + str(idx))
self.page.driver.execute_script(
"arguments[0].scrollIntoView(false)", element)

View File

@@ -94,12 +94,12 @@ class CheckForXssFeatureTest(BaseFeatureTest):
self.server, self.test_db, self.test_table_name)
def _tables_node_expandable(self):
self.page.toggle_open_server(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.test_db)
self.page.toggle_open_tree_item('Schemas')
self.page.toggle_open_tree_item('public')
self.page.toggle_open_tree_item('Tables')
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.toggle_open_tables_node(self.server['name'],
self.server['db_password'],
self.test_db, 'public')
self.page.select_tree_item(self.test_table_name)
def _check_xss_in_browser_tree(self):

View File

@@ -39,10 +39,10 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
self.function_name = "a_test_function" + \
str(random.randint(10000, 65535))
test_utils.create_debug_function(
self.server, "postgres", self.function_name
self.server, self.test_db, self.function_name
)
if test_utils.does_function_exist(self.server, 'postgres',
if test_utils.does_function_exist(self.server, self.test_db,
self.function_name) != 'True':
raise Exception("The required function is not found")
@@ -54,15 +54,16 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
def after(self):
self.page.remove_server(self.server)
test_utils.drop_debug_function(self.server, "postgres",
test_utils.drop_debug_function(self.server, self.test_db,
self.function_name)
def _function_node_expandable(self):
self.page.toggle_open_server(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item('postgres')
self.page.toggle_open_tree_item('Schemas')
self.page.toggle_open_tree_item('public')
self.page.expand_database_node(
self.server['name'],
self.server['db_password'], self.test_db)
self.page.toggle_open_schema_node(self.server['name'],
self.server['db_password'],
self.test_db, 'public')
self.page.toggle_open_function_node()
self.page.select_tree_item(self.function_name + "()")

View File

@@ -58,7 +58,8 @@ class CheckRoleMembershipControlFeatureTest(BaseFeatureTest):
"<h1>test</h1>")
def _role_node_expandable(self, role):
self.page.toggle_open_server(self.server['name'])
self.page.expand_server_node(
self.server['name'], self.server['db_password'])
self.page.toggle_open_tree_item('Login/Group Roles')
self.page.select_tree_item(role)
@@ -93,6 +94,6 @@ class CheckRoleMembershipControlFeatureTest(BaseFeatureTest):
"""This will click and open membership tab of role"""
self.page.retry_click(
(By.XPATH,
"//a[normalize-space(text())='Membership']"),
(By.LINK_TEXT,
"Membership"),
(By.XPATH, "//input[@placeholder='Select members']"))