mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Fixed feature tests.
This commit is contained in:
parent
02b0f35442
commit
683528b81c
@ -81,67 +81,83 @@ class PGDataypeFeatureTest(BaseFeatureTest):
|
||||
connection.close()
|
||||
|
||||
def _update_preferences(self):
|
||||
file_menu = self.page.find_by_css_selector(
|
||||
NavMenuLocators.file_menu_css)
|
||||
file_menu.click()
|
||||
retry = 2
|
||||
while retry > 0:
|
||||
try:
|
||||
file_menu = self.page.find_by_css_selector(
|
||||
NavMenuLocators.file_menu_css)
|
||||
file_menu.click()
|
||||
|
||||
self.page.retry_click(
|
||||
(By.CSS_SELECTOR, NavMenuLocators.preference_menu_item_css),
|
||||
(By.XPATH, NavMenuLocators.specified_preference_tree_node
|
||||
.format('Browser'))
|
||||
)
|
||||
self.page.retry_click(
|
||||
(By.CSS_SELECTOR,
|
||||
NavMenuLocators.preference_menu_item_css),
|
||||
(By.XPATH,
|
||||
NavMenuLocators.specified_preference_tree_node
|
||||
.format('Browser'))
|
||||
)
|
||||
|
||||
wait = WebDriverWait(self.page.driver, 10)
|
||||
wait = WebDriverWait(self.page.driver, 10)
|
||||
|
||||
browser_node = self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_preference_tree_node.format('Browser'))
|
||||
if self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_pref_node_exp_status.
|
||||
format('Browser')).get_attribute('aria-expanded') == 'false':
|
||||
ActionChains(self.driver).double_click(browser_node).perform()
|
||||
browser_node = self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_preference_tree_node.
|
||||
format('Browser'))
|
||||
if self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_pref_node_exp_status.
|
||||
format('Browser')).\
|
||||
get_attribute('aria-expanded') == 'false':
|
||||
ActionChains(self.driver).\
|
||||
double_click(browser_node).perform()
|
||||
|
||||
self.page.retry_click(
|
||||
(By.XPATH, NavMenuLocators.specified_sub_node_of_pref_tree_node.
|
||||
format('Browser', 'Display')),
|
||||
(By.XPATH, NavMenuLocators.show_system_objects_pref_label_xpath))
|
||||
self.page.retry_click(
|
||||
(By.XPATH, NavMenuLocators.
|
||||
specified_sub_node_of_pref_tree_node.
|
||||
format('Browser', 'Display')),
|
||||
(By.XPATH,
|
||||
NavMenuLocators.show_system_objects_pref_label_xpath))
|
||||
|
||||
# Wait till the preference dialogue box is displayed by checking the
|
||||
# visibility of Show System Object label
|
||||
wait.until(EC.presence_of_element_located(
|
||||
(By.XPATH, NavMenuLocators.show_system_objects_pref_label_xpath))
|
||||
)
|
||||
# Wait till the preference dialogue
|
||||
# box is displayed by checking the
|
||||
# visibility of Show System Object label
|
||||
wait.until(EC.presence_of_element_located(
|
||||
(By.XPATH,
|
||||
NavMenuLocators.show_system_objects_pref_label_xpath))
|
||||
)
|
||||
|
||||
maximize_button = self.page.find_by_xpath(
|
||||
NavMenuLocators.maximize_pref_dialogue_css)
|
||||
maximize_button.click()
|
||||
maximize_button = self.page.find_by_xpath(
|
||||
NavMenuLocators.maximize_pref_dialogue_css)
|
||||
maximize_button.click()
|
||||
|
||||
specified_preference_tree_node_name = 'Query Tool'
|
||||
sql_editor = self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_preference_tree_node.
|
||||
format(specified_preference_tree_node_name))
|
||||
if self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_pref_node_exp_status.
|
||||
format(specified_preference_tree_node_name)).\
|
||||
get_attribute('aria-expanded') == 'false':
|
||||
ActionChains(self.driver).double_click(sql_editor).perform()
|
||||
specified_preference_tree_node_name = 'Query Tool'
|
||||
sql_editor = self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_preference_tree_node.
|
||||
format(specified_preference_tree_node_name))
|
||||
if self.page.find_by_xpath(
|
||||
NavMenuLocators.specified_pref_node_exp_status.
|
||||
format(specified_preference_tree_node_name)).\
|
||||
get_attribute('aria-expanded') == 'false':
|
||||
ActionChains(self.driver).\
|
||||
double_click(sql_editor).perform()
|
||||
|
||||
option_node = \
|
||||
self.page.find_by_xpath("//*[@id='treeContainer']"
|
||||
"//div//span[text()='Editor']")
|
||||
option_node.click()
|
||||
option_node = \
|
||||
self.page.find_by_xpath("//*[@id='treeContainer']"
|
||||
"//div//span[text()='Editor']")
|
||||
option_node.click()
|
||||
|
||||
switch_box_element = self.page.find_by_xpath(
|
||||
NavMenuLocators.insert_bracket_pair_switch_btn)
|
||||
switch_box_element = self.page.find_by_xpath(
|
||||
NavMenuLocators.insert_bracket_pair_switch_btn)
|
||||
|
||||
switch_box_element.click()
|
||||
switch_box_element.click()
|
||||
|
||||
maximize_button = self.page.find_by_xpath(
|
||||
NavMenuLocators.maximize_pref_dialogue_css)
|
||||
maximize_button.click()
|
||||
time.sleep(0.5)
|
||||
maximize_button = self.page.find_by_xpath(
|
||||
NavMenuLocators.maximize_pref_dialogue_css)
|
||||
maximize_button.click()
|
||||
time.sleep(0.5)
|
||||
|
||||
# save and close the preference dialog.
|
||||
self.page.click_modal('Save', react_dialog=True)
|
||||
# save and close the preference dialog.
|
||||
self.page.click_modal('Save', react_dialog=True)
|
||||
break
|
||||
except Exception:
|
||||
retry -= 1
|
||||
|
||||
def _create_enum_type(self):
|
||||
query = """CREATE TYPE public.rainbow AS ENUM ('red', 'orange',
|
||||
|
@ -452,32 +452,37 @@ class QueryToolJourneyTest(BaseFeatureTest):
|
||||
# first column is rownum
|
||||
enumerated_should_be_editable = enumerate(cols_should_be_editable, 2)
|
||||
|
||||
import time
|
||||
time.sleep(0.5)
|
||||
for column_index, should_be_editable in enumerated_should_be_editable:
|
||||
is_editable = self._check_cell_editable(column_index)
|
||||
self.assertEqual(is_editable, should_be_editable)
|
||||
|
||||
def _check_cell_editable(self, cell_index):
|
||||
"""Checks if a cell in the first row of the resultset is editable"""
|
||||
cell_el = self.page.find_by_css_selector(
|
||||
QueryToolLocators.output_row_col.format(2, cell_index))
|
||||
|
||||
# Get existing value
|
||||
cell_value = int(cell_el.text)
|
||||
new_value = cell_value + 1
|
||||
# Try to update value
|
||||
cell_el.click()
|
||||
ActionChains(self.driver).double_click(cell_el).perform()
|
||||
ActionChains(self.driver).send_keys(new_value). \
|
||||
send_keys(Keys.ENTER).perform()
|
||||
time.sleep(0.5)
|
||||
# Check if the value was updated
|
||||
# Finding element again to avoid stale element reference exception
|
||||
cell_el = self.page.\
|
||||
find_by_css_selector(QueryToolLocators.
|
||||
output_row_col.format(2, cell_index))
|
||||
return int(cell_el.text) == new_value
|
||||
retry = 2
|
||||
while retry > 0:
|
||||
try:
|
||||
cell_el = self.page.find_by_css_selector(
|
||||
QueryToolLocators.output_row_col.format(2, cell_index))
|
||||
# Get existing value
|
||||
cell_value = int(cell_el.text)
|
||||
new_value = cell_value + 1
|
||||
# Try to update value
|
||||
ActionChains(self.driver).double_click(cell_el).perform()
|
||||
ActionChains(self.driver).send_keys(new_value).perform()
|
||||
ActionChains(self.driver).send_keys(Keys.TAB).perform()
|
||||
time.sleep(0.5)
|
||||
# Check if the value was updated
|
||||
# Finding element again to avoid stale element
|
||||
# reference exception
|
||||
cell_el = self.page. \
|
||||
find_by_css_selector(QueryToolLocators.
|
||||
output_row_col.format(2, cell_index))
|
||||
return int(cell_el.text) == new_value
|
||||
except Exception as e:
|
||||
print('Exception while reading cell value', file=sys.stderr)
|
||||
retry -= 1
|
||||
if retry == 0:
|
||||
raise Exception(e)
|
||||
|
||||
def _check_can_add_row(self):
|
||||
return self.page.check_if_element_exist_by_xpath(
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"comment": {
|
||||
"sample_test_case": {
|
||||
"colno": ["value to set", "value to verfiy", "data type"]
|
||||
"colno": ["value to set", "value to verify", "data type"]
|
||||
}
|
||||
},
|
||||
"table_insert_update_cases": {
|
||||
@ -16,9 +16,9 @@
|
||||
"8": ["", "[null]", "text"],
|
||||
"9": ["", "[51, 52]", "json"],
|
||||
"10": ["[61,62]", "[61,62]", "json"],
|
||||
"11": ["", "true", "bool"],
|
||||
"11": ["true", "true", "bool"],
|
||||
"12": ["", "[null]", "bool"],
|
||||
"13": ["", "false", "bool"],
|
||||
"13": ["false", "false", "bool"],
|
||||
"14": ["", "[null]", "text[]"],
|
||||
"15": ["{}", "{}", "text[]"],
|
||||
"16": ["{data,NULL,'',\"\"}", "{data,NULL,'',\"\"}", "text[]"],
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
|
||||
@ -161,9 +162,6 @@ CREATE TABLE public.nonintpkey
|
||||
config_data = config_data_json[config_key]
|
||||
|
||||
def _perform_test_for_table(self, table_name, config_data_local):
|
||||
# self.page.click_a_tree_node(
|
||||
# table_name,
|
||||
# TreeAreaLocators.sub_nodes_of_tables_node)
|
||||
table_node = self.page.check_if_element_exists_with_scroll(
|
||||
TreeAreaLocators.table_node(table_name))
|
||||
table_node.click()
|
||||
@ -220,76 +218,129 @@ CREATE TABLE public.nonintpkey
|
||||
Returns: None
|
||||
|
||||
"""
|
||||
self.wait.until(EC.visibility_of_element_located(
|
||||
(By.XPATH, xpath)), CheckForViewDataTest.TIMEOUT_STRING
|
||||
)
|
||||
cell_el = self.page.find_by_xpath(xpath)
|
||||
self.page.driver.execute_script("arguments[0].scrollIntoView(false)",
|
||||
cell_el)
|
||||
cell_el.click()
|
||||
ActionChains(self.driver).move_to_element(cell_el).double_click(
|
||||
cell_el
|
||||
).perform()
|
||||
cell_type = data[2]
|
||||
value = data[0]
|
||||
retry = 2
|
||||
while retry > 0:
|
||||
self.wait.until(EC.visibility_of_element_located(
|
||||
(By.XPATH, xpath)), CheckForViewDataTest.TIMEOUT_STRING
|
||||
)
|
||||
cell_el = self.page.find_by_xpath(xpath)
|
||||
self.page.driver.execute_script(
|
||||
"arguments[0].scrollIntoView(false)", cell_el)
|
||||
ActionChains(self.driver).move_to_element(cell_el).\
|
||||
double_click(cell_el).perform()
|
||||
cell_type = data[2]
|
||||
value = data[0]
|
||||
|
||||
if cell_type in ['int', 'int[]']:
|
||||
if cell_type in ['int', 'int[]'] and \
|
||||
self._update_numeric_cell(cell_el, value):
|
||||
break
|
||||
elif cell_type in ['text', 'text[]', 'boolean[]'] and \
|
||||
self._update_text_cell(cell_el, value):
|
||||
break
|
||||
elif cell_type in ['json', 'jsonb'] and \
|
||||
self._update_json_cell(cell_el, value):
|
||||
retry = 0
|
||||
elif cell_type in ['bool'] and \
|
||||
self._update_boolean_cell(cell_el, value):
|
||||
retry = 0
|
||||
else:
|
||||
print('Unable to update cell in try ' + str(retry),
|
||||
file=sys.stderr)
|
||||
retry -= 1
|
||||
|
||||
def _update_numeric_cell(self, cell_el, value):
|
||||
try:
|
||||
if value == 'clear':
|
||||
cell_el.find_element(By.CSS_SELECTOR, 'input').clear()
|
||||
else:
|
||||
ActionChains(self.driver).send_keys(value). \
|
||||
send_keys(Keys.ENTER).perform()
|
||||
elif cell_type in ['text', 'text[]', 'boolean[]']:
|
||||
retry = 2
|
||||
text_area_ele = None
|
||||
while retry > 0:
|
||||
try:
|
||||
text_area_ele = WebDriverWait(self.driver, 2).until(
|
||||
EC.visibility_of_element_located(
|
||||
(By.CSS_SELECTOR,
|
||||
QueryToolLocators.row_editor_text_area_css)))
|
||||
retry = 0
|
||||
except Exception:
|
||||
ActionChains(self.driver).move_to_element(cell_el).\
|
||||
double_click(cell_el).perform()
|
||||
retry -= 1
|
||||
self.assertIsNotNone(text_area_ele, 'Text editor did not open.')
|
||||
text_area_ele.clear()
|
||||
text_area_ele.click()
|
||||
text_area_ele.send_keys(value)
|
||||
# Click on editor's Save button
|
||||
self.page.find_by_css_selector(
|
||||
QueryToolLocators.text_editor_ok_btn_css).click()
|
||||
elif cell_type in ['json', 'jsonb']:
|
||||
platform = 'mac'
|
||||
if "platform" in self.driver.capabilities:
|
||||
platform = (self.driver.capabilities["platform"]).lower()
|
||||
elif "platformName" in self.driver.capabilities:
|
||||
platform = (self.driver.capabilities["platformName"]).lower()
|
||||
if 'mac' in platform:
|
||||
key_to_press = Keys.COMMAND
|
||||
else:
|
||||
key_to_press = Keys.CONTROL
|
||||
actions = ActionChains(self.driver)
|
||||
# actions.move_to_element(jsoneditor_area_ele).click().perform()
|
||||
actions.key_down(key_to_press).send_keys('a').key_up(key_to_press)\
|
||||
.send_keys(Keys.DELETE).perform()
|
||||
actions.send_keys(value) .perform()
|
||||
# Click on editor's Save button
|
||||
self.page.find_by_css_selector(
|
||||
QueryToolLocators.text_editor_ok_btn_css).click()
|
||||
send_keys(Keys.TAB).perform()
|
||||
return True
|
||||
except Exception:
|
||||
print('Exception occurred while updating int cell',
|
||||
file=sys.stderr)
|
||||
return False
|
||||
|
||||
def _update_text_cell(self, cell_el, value):
|
||||
retry = 2
|
||||
while retry > 0:
|
||||
try:
|
||||
text_area_ele = WebDriverWait(self.driver, 2).until(
|
||||
EC.visibility_of_element_located(
|
||||
(By.CSS_SELECTOR,
|
||||
QueryToolLocators.row_editor_text_area_css)))
|
||||
text_area_ele.clear()
|
||||
text_area_ele.click()
|
||||
text_area_ele.send_keys(value)
|
||||
# Click on editor's Save button
|
||||
self.page.find_by_css_selector(
|
||||
QueryToolLocators.text_editor_ok_btn_css).click()
|
||||
return True
|
||||
except Exception:
|
||||
print('Exception occurred while updating text cell',
|
||||
file=sys.stderr)
|
||||
ActionChains(self.driver).move_to_element(cell_el). \
|
||||
double_click(cell_el).perform()
|
||||
retry -= 1
|
||||
return False
|
||||
|
||||
def _update_json_cell(self, cell_el, value):
|
||||
platform = 'mac'
|
||||
if "platform" in self.driver.capabilities:
|
||||
platform = (self.driver.capabilities["platform"]).lower()
|
||||
elif "platformName" in self.driver.capabilities:
|
||||
platform = (self.driver.capabilities["platformName"]).lower()
|
||||
if 'mac' in platform:
|
||||
key_to_press = Keys.COMMAND
|
||||
else:
|
||||
# Boolean editor test for to True click
|
||||
checkbox_el = self.page.find_by_css_selector(
|
||||
QueryToolLocators.row_editor_checkbox_css)
|
||||
if data[1] == 'true':
|
||||
checkbox_el.click()
|
||||
# Boolean editor test for to False click
|
||||
elif data[1] == 'false':
|
||||
# Sets true
|
||||
checkbox_el.click()
|
||||
# Sets false
|
||||
ActionChains(self.driver).click(checkbox_el).perform()
|
||||
key_to_press = Keys.CONTROL
|
||||
retry = 2
|
||||
while retry > 0:
|
||||
try:
|
||||
WebDriverWait(self.driver, 2).until(
|
||||
EC.visibility_of_element_located(
|
||||
(By.CSS_SELECTOR,
|
||||
QueryToolLocators.json_editor_text_area_css)))
|
||||
actions = ActionChains(self.driver)
|
||||
actions.key_down(key_to_press).send_keys('a').\
|
||||
key_up(key_to_press).send_keys(Keys.DELETE).perform()
|
||||
actions.send_keys(value).perform()
|
||||
# Click on editor's Save button
|
||||
self.page.find_by_css_selector(
|
||||
QueryToolLocators.text_editor_ok_btn_css).click()
|
||||
return True
|
||||
except Exception:
|
||||
print('Exception occurred while updating json cell',
|
||||
file=sys.stderr)
|
||||
ActionChains(self.driver).move_to_element(cell_el). \
|
||||
double_click(cell_el).perform()
|
||||
retry -= 1
|
||||
return False
|
||||
|
||||
def _update_boolean_cell(self, cell_el, value):
|
||||
# Boolean editor test for to True click
|
||||
retry = 2
|
||||
while retry > 0:
|
||||
try:
|
||||
checkbox_el = self.page.find_by_css_selector(
|
||||
QueryToolLocators.row_editor_checkbox_css)
|
||||
if value == 'true':
|
||||
checkbox_el.click()
|
||||
# Boolean editor test for to False click
|
||||
elif value == 'false':
|
||||
# Sets true
|
||||
checkbox_el.click()
|
||||
# Sets false
|
||||
ActionChains(self.driver).click(checkbox_el).perform()
|
||||
ActionChains(self.driver).send_keys(Keys.TAB).perform()
|
||||
return True
|
||||
except Exception:
|
||||
print('Exception occurred while updating boolean cell',
|
||||
file=sys.stderr)
|
||||
ActionChains(self.driver).move_to_element(cell_el). \
|
||||
double_click(cell_el).perform()
|
||||
retry -= 1
|
||||
return False
|
||||
|
||||
def _view_data_grid(self, table_name):
|
||||
self.page.driver.find_element(By.LINK_TEXT, "Object").click()
|
||||
|
@ -354,14 +354,18 @@ class PgadminPage:
|
||||
"""
|
||||
retry = 2
|
||||
while retry > 0:
|
||||
webdriver.ActionChains(self.driver).double_click(
|
||||
tree_node_web_element).perform()
|
||||
if self.check_if_element_exist_by_xpath(tree_node_exp_check_xpath):
|
||||
return True
|
||||
elif retry == 1:
|
||||
return False
|
||||
else:
|
||||
time.sleep(1)
|
||||
try:
|
||||
webdriver.ActionChains(self.driver).double_click(
|
||||
tree_node_web_element).perform()
|
||||
if self.check_if_element_exist_by_xpath(
|
||||
tree_node_exp_check_xpath):
|
||||
return True
|
||||
elif retry == 1:
|
||||
return False
|
||||
else:
|
||||
time.sleep(1)
|
||||
retry -= 1
|
||||
except Exception:
|
||||
retry -= 1
|
||||
|
||||
def expand_server_group_node(self, server_group_name):
|
||||
@ -418,6 +422,8 @@ class PgadminPage:
|
||||
self.js_executor_scrollintoview_arg, server_node)
|
||||
if self.check_if_element_exist_by_xpath(
|
||||
server_node_exp_status_xpath, 2):
|
||||
# sleep for a while to expand tree completely
|
||||
time.sleep(0.4)
|
||||
server_expanded = True
|
||||
else:
|
||||
server_expanded = self.click_expand_server_node(
|
||||
|
Loading…
Reference in New Issue
Block a user