Skip to content

Commit

Permalink
Merge pull request #717 from Altinity/issue-712-test-fix
Browse files Browse the repository at this point in the history
fix e2e test for issue-712
  • Loading branch information
Slach authored Feb 3, 2025
2 parents d974911 + a8d98d6 commit d2174e1
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 52 deletions.
4 changes: 2 additions & 2 deletions tests/testflows/steps/alerting/alert_rules/new/locators.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,13 @@ def new_folder_button(self):
def new_folder_name_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
f"/html/body/div[6]//*[@data-testid='data-testid alert-rule name-folder-name-field']")
f"//*[@data-testid='data-testid alert-rule name-folder-name-field']")

@property
def new_folder_create_button(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
f"/html/body/div[6]//*[@data-testid='data-testid alert-rule name-folder-name-create-button']")
f"//*[@data-testid='data-testid alert-rule name-folder-name-create-button']")

@property
def new_evaluation_group_button(self):
Expand Down
4 changes: 2 additions & 2 deletions tests/testflows/steps/dashboards/locators.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ def check_mark(self, dashboard_name):
def delete_button(self):
driver: WebDriver = current().context.driver
return driver.find_element(
SelectBy.CSS_SELECTOR,
f"[class='css-ttl745-button']"
SelectBy.XPATH,
f"//*[@data-testid='manage-actions']/button[span/text()='Delete']"
)

@property
Expand Down
14 changes: 7 additions & 7 deletions tests/testflows/steps/panel/locators.py
Original file line number Diff line number Diff line change
Expand Up @@ -316,22 +316,22 @@ def query_inspector_close_button(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.CSS_SELECTOR, f'[data-testid="data-testid Drawer close"]')

def adhoc_dropdown(self, label, variable_number):
def adhoc_dropdown(self, label):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {label}"]/../div/div[1]/div[{variable_number}]//input')
return driver.find_element(SelectBy.XPATH, f'//*[@data-testid="data-testid Dashboard template variables submenu Label {label}"]/..//input')

def adhoc_grafana_single_value(self, label, variable_number):
def adhoc(self, adhoc_name):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {label}"]/../div/div[1]/div[{variable_number}]//*[contains(@class, "singleValue")]')
return driver.find_element(SelectBy.XPATH, f'//*[@aria-label="Edit filter with key {adhoc_name}"]')

@property
def add_adhoc_filter_button(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.CSS_SELECTOR, f'[data-testid="AdHocFilter-add"]')
return driver.find_element(SelectBy.CSS_SELECTOR, f'[placeholder="Filter by label values"]')

def remove_adhoc_button(self, adhoc_name):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.CSS_SELECTOR, f'[data-testid="AdHocFilter-remove-{adhoc_name}"]')
return driver.find_element(SelectBy.CSS_SELECTOR, f'[aria-label="Remove filter with key {adhoc_name}"]')

@property
def refresh_button(self):
Expand All @@ -340,7 +340,7 @@ def refresh_button(self):

def annotation_toggle(self, annotation_name):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {annotation_name}"]/..//label[@aria-label="Toggle switch"]')
return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {annotation_name}"]/..//div/label')

def label_textfield(self, label):
driver: WebDriver = current().context.driver
Expand Down
12 changes: 6 additions & 6 deletions tests/testflows/steps/panel/query_options/locators.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,36 @@ def query_options_dropdown(self):
def max_data_points_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
f'//*[@class="gf-form" and .//text()="Max data points"]//input')
f'//input[@id="max-data-points-input"]')

@property
def interval_field(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
f'//*[@class="gf-form" and .//text()="Interval"]/label[@class="gf-form-label width-6"]')
f'//*[@class="css-1t8vb7c"]')

@property
def min_interval_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH, f'//*[@class="gf-form" and .//text()="Min interval"]//input')
return driver.find_element(SelectBy.XPATH, f'//input[@id="min-interval-input"]')

@property
def relative_time_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
f'//*[@class="gf-form" and .//text()="Relative time"]//input')
f'//input[@id="relative-time-input"]')

@property
def time_shift_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
f'//*[@class="gf-form" and .//text()="Time shift"]//input')
f'//input[@id="time-shift-input"]')

@property
def hide_time_info_toggle(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
f'//*[contains(@class,"InlineFieldRow") and .//text()="Hide time info"]//label[@aria-label="Toggle switch"]')
f'//div[@class="css-1n85obj"]//label[@for="hide-time-info-switch"]')

@property
def relative_time_info(self):
Expand Down
42 changes: 21 additions & 21 deletions tests/testflows/steps/panel/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -574,80 +574,80 @@ def click_save_button(self):


@TestStep(When)
def click_adhoc_dropdown(self, label, variable_number):
def click_adhoc_dropdown(self, adhoc_name):
"""Click adhoc dropdown."""

locators.adhoc_dropdown(label=label, variable_number=variable_number).click()
locators.adhoc(adhoc_name=adhoc_name).click()


@TestStep(When)
def get_adhoc_dropdown_value(self, label, variable_number):
def get_adhoc_dropdown_value(self, adhoc_name):
"""Get adhoc dropdown html."""

return locators.adhoc_grafana_single_value(label=label, variable_number=variable_number).text
return locators.adhoc(adhoc_name=adhoc_name).text.split(' ')[2]

@TestStep(When)
def change_adhoc_value_order(self, label, variable_number, value_order):
def change_adhoc_value_order(self, adhoc_name, adhoc_label, value_order=0):
"""Change adhoc value."""

with By("clicking on adhoc dropdown"):
with delay():
click_adhoc_dropdown(label=label, variable_number=variable_number)
click_adhoc_dropdown(adhoc_name=adhoc_name)

with By("choosing value from adhoc dropdown"):
with delay():
choose_value_from_adhoc_dropdown(label=label, variable_number=variable_number, value_order=value_order)
choose_value_from_adhoc_dropdown(adhoc_label=adhoc_label, value_order=value_order)


@TestStep(When)
def change_adhoc_value(self, label, variable_number, variable_value):
def change_adhoc_value(self,adhoc_name, adhoc_label, variable_value):
"""Change adhoc value."""

with By("clicking on adhoc dropdown"):
with delay():
click_adhoc_dropdown(label=label, variable_number=variable_number)
click_adhoc_dropdown(adhoc_name=adhoc_name)

with By("entering value into adhoc dropdown"):
with delay():
enter_value_adhoc_dropdown(label=label, variable_number=variable_number, variable_value=variable_value)
enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value=variable_value)


@TestStep(When)
def get_dropdown_values_set(self, label, variable_number):
def get_dropdown_values_set(self, adhoc_name, adhoc_label):
"""Get dropdown values set."""

values_set = set()
with When(f"I get 0 dropdown value"):
change_adhoc_value_order(label=label, variable_number=variable_number, value_order=0)
value = get_adhoc_dropdown_value(label=label, variable_number=variable_number)
change_adhoc_value_order(adhoc_name=adhoc_name, adhoc_label=adhoc_label, value_order=0)
value = get_adhoc_dropdown_value(adhoc_name=adhoc_name)

order = 1
while not (value in values_set):
values_set.add(value)
with When(f"I get {order} dropdown value"):
change_adhoc_value_order(label=label, variable_number=variable_number, value_order=order)
value = get_adhoc_dropdown_value(label=label, variable_number=variable_number)
change_adhoc_value_order(adhoc_name=adhoc_name, adhoc_label=adhoc_label, value_order=order)
value = get_adhoc_dropdown_value(adhoc_name=adhoc_name)
order+=1

return values_set


@TestStep(When)
def choose_value_from_adhoc_dropdown(self, label, variable_number, value_order):
def choose_value_from_adhoc_dropdown(self, adhoc_label, value_order):
"""Choose value from adhoc dropdown value."""

for i in range(value_order):
locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(Keys.ARROW_DOWN)
locators.adhoc_dropdown(label=adhoc_label).send_keys(Keys.ARROW_DOWN)

locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(Keys.ENTER)
locators.adhoc_dropdown(label=adhoc_label).send_keys(Keys.ENTER)


@TestStep(When)
def enter_value_adhoc_dropdown(self, label, variable_number, variable_value):
def enter_value_adhoc_dropdown(self, adhoc_label, variable_value):
"""Enter value adhoc dropdown value."""

locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(variable_value)
locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(Keys.ENTER)
locators.adhoc_dropdown(label=adhoc_label).send_keys(variable_value)
locators.adhoc_dropdown(label=adhoc_label).send_keys(Keys.ENTER)


@TestStep(When)
Expand Down
28 changes: 18 additions & 10 deletions tests/testflows/tests/automated/adhoc_macro.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ def adhoc_macro_outline(self, dashboard_name, expected_adhoc_values, adhoc_label

with And("I get default adhoc value"):
with delay():
default_adhoc_value = panel.get_adhoc_dropdown_value(label=adhoc_label, variable_number=3)
default_adhoc_value = panel.get_adhoc_dropdown_value(adhoc_name=adhoc_name)

with When("I get every adhoc value"):
with delay():
adhoc_values = panel.get_dropdown_values_set(label=adhoc_label, variable_number=3)
adhoc_values = panel.get_dropdown_values_set(adhoc_name=adhoc_name, adhoc_label=adhoc_label)
note(adhoc_values)
assert adhoc_values == expected_adhoc_values, error()

Expand All @@ -55,15 +55,19 @@ def adhoc_macro_outline(self, dashboard_name, expected_adhoc_values, adhoc_label

with And("I enter adhoc name"):
with delay():
panel.enter_value_adhoc_dropdown(label=adhoc_label, variable_number=1, variable_value=adhoc_name)
panel.enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value=adhoc_name)

with And("I enter adhoc operator '='"):
with delay():
panel.enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value='=')

with And("I enter default adhoc value"):
with delay():
panel.change_adhoc_value(label=adhoc_label, variable_number=3, variable_value=default_adhoc_value)
panel.enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value=default_adhoc_value)

with And("I get every adhoc value after deleting and adding adhoc"):
with delay():
adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(label=adhoc_label, variable_number=3)
adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(adhoc_name=adhoc_name, adhoc_label=adhoc_label)

with Then("I check adhoc correctly displays values after recreating adhoc"):
assert adhoc_values_after_deleting_and_adding_adhoc == adhoc_values, error()
Expand All @@ -86,7 +90,7 @@ def adhoc_macro_outline(self, dashboard_name, expected_adhoc_values, adhoc_label
for adhoc_value in adhoc_values:
with When(f"I define adhoc value as {adhoc_value}"):
with delay():
panel.change_adhoc_value(label=adhoc_label, variable_number=3, variable_value=adhoc_value)
panel.change_adhoc_value(adhoc_name=adhoc_name, adhoc_label=adhoc_label, variable_value=adhoc_value)

with Then(f"I check reformatted query contains adhoc {adhoc_value}"):
with delay():
Expand Down Expand Up @@ -131,17 +135,21 @@ def default_adhoc(self):

with And("I enter adhoc name"):
with delay():
panel.enter_value_adhoc_dropdown(label="query0", variable_number=1, variable_value="default.test_grafana.country")
panel.enter_value_adhoc_dropdown(adhoc_label="query0", variable_value="default.test_grafana.country")

with And("I enter adhoc operator '='"):
with delay():
panel.enter_value_adhoc_dropdown(adhoc_label="query0", variable_value='=')

with And("I enter default adhoc value"):
with delay():
panel.change_adhoc_value(label="query0", variable_number=3, variable_value="US")
panel.enter_value_adhoc_dropdown(adhoc_label="query0", variable_value="US")

with And("I get every adhoc value after deleting and adding adhoc"):
with delay():
adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(label="query0", variable_number=3)
adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(adhoc_label="query0", adhoc_name="default.test_grafana.country")

with Then("I check adhoc correctly displays values after recreating adhoc"):
with Then("I check adhoc correctly displays values"):
assert adhoc_values_after_deleting_and_adding_adhoc == {'US', 'RU', 'EU', 'UK'}, error()


Expand Down
20 changes: 18 additions & 2 deletions tests/testflows/tests/automated/e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,14 @@ def annotations_without_time_reformatting(self):
with delay():
panel.take_screenshot_for_visualization(screenshot_name="event_tme_panel")

with Finally("I discard changes for panel"):
with delay(after=0.5):
panel.click_discard_button()

with And("I discard changes for dashboard"):
with delay(after=0.5):
dashboard.discard_changes_for_dashboard()

with When("I go to Annotation event_time"):
with delay():
dashboards.open_dashboard(dashboard_name="Annotation event_time")
Expand All @@ -205,6 +213,14 @@ def annotations_without_time_reformatting(self):
with delay():
panel.take_screenshot_for_visualization(screenshot_name="toUInt64_panel")

with Finally("I discard changes for panel"):
with delay(after=0.5):
panel.click_discard_button()

with And("I discard changes for dashboard"):
with delay(after=0.5):
dashboard.discard_changes_for_dashboard()

with Then("I compare screenshots"):
with delay():
assert actions.compare_screenshots_percent(screenshot_name_1="event_tme_panel", screenshot_name_2="toUInt64_panel") > 0.9, error()
Expand Down Expand Up @@ -232,11 +248,11 @@ def many_categories(self):
assert panel.check_no_labels(labels=["normalized_query_hash", "Too many points"]), error()
finally:
with Finally("I discard changes for panel"):
with delay():
with delay(after=0.5):
panel.click_discard_button()

with And("I discard changes for dashboard"):
with delay():
with delay(after=0.5):
dashboard.discard_changes_for_dashboard()

@TestFeature
Expand Down
6 changes: 4 additions & 2 deletions tests/testflows/tests/automated/sql_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ def add_metadata_toggle(self):
panel.click_on_the_visualization()

with Then("I check reformatted query"):
assert "/* grafana dashboard=test_sql_editor, user=1 */" in sql_editor.get_reformatted_query(query_name='A'), error()
assert "/* grafana dashboard" in sql_editor.get_reformatted_query(query_name='A'), error()
assert "test_sql_editor" in sql_editor.get_reformatted_query(query_name='A'), error()

try:
with Then("I click Add metadata toggle"):
Expand All @@ -66,7 +67,8 @@ def add_metadata_toggle(self):

with Then("I check reformatted query after clicking toggle"):
with delay():
assert not ("/* grafana dashboard=test_sql_editor, user=1 */" in sql_editor.get_reformatted_query(query_name='A')), error()
assert not ("/* grafana dashboard" in sql_editor.get_reformatted_query(query_name='A')), error()
assert not ("test_sql_editor" in sql_editor.get_reformatted_query(query_name='A')), error()

finally:
with Finally("I return Add metadata toggle status back"):
Expand Down
4 changes: 4 additions & 0 deletions tests/testflows/tests/automated/window_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,3 +166,7 @@ def feature(self):
else:
with Scenario(f"{panel_name} function"):
window_functions_outline(panel_name=panel_name, panel_names=panel_names)

with Finally("I discard changes for dashboard"):
with delay():
dashboard.discard_changes_for_dashboard()

0 comments on commit d2174e1

Please sign in to comment.