From 40b382c7353be3c5701197f76fde1145bb9a60ee Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 16:18:27 +0000 Subject: [PATCH] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- vizro-core/tests/e2e/conftest.py | 16 +-- .../tests/e2e/dashboards/default/dashboard.py | 37 +------ .../e2e/dashboards/default/dashboard_pages.py | 103 ++++++++++++------ .../e2e/dashboards/wait_for_dashboard.sh | 2 +- vizro-core/tests/e2e/pytest.ini | 2 +- vizro-core/tests/e2e/test_charts.py | 3 +- vizro-core/tests/e2e/test_filters.py | 9 +- vizro-core/tests/e2e/test_pages.py | 21 ++-- vizro-core/tests/tests_utils/e2e_checkers.py | 23 ++-- .../custom_charts/bar_custom.py | 4 +- .../custom_components/new_dropdown.py | 14 +-- vizro-core/tests/tests_utils/e2e_helpers.py | 17 ++- .../tests/tests_utils/e2e_navigation.py | 8 +- vizro-core/tests/tests_utils/e2e_paths.py | 4 +- 14 files changed, 131 insertions(+), 132 deletions(-) diff --git a/vizro-core/tests/e2e/conftest.py b/vizro-core/tests/e2e/conftest.py index cc4feb915..52fb2095d 100644 --- a/vizro-core/tests/e2e/conftest.py +++ b/vizro-core/tests/e2e/conftest.py @@ -1,10 +1,10 @@ from datetime import datetime +import e2e_constants as cnst import pytest +from e2e_checkers import browser_console_warnings_checker from selenium.common import WebDriverException from selenium.webdriver.chrome.options import Options as ChromeOptions -from e2e_checkers import browser_console_warnings_checker -import e2e_constants as cnst # functions @@ -20,11 +20,7 @@ def pytest_setup_options(): def make_teardown(driver): # checking for browser console errors try: - log_levels = [ - level - for level in driver.get_log("browser") - if level["level"] == "SEVERE" or "WARNING" - ] + log_levels = [level for level in driver.get_log("browser") if level["level"] == "SEVERE" or "WARNING"] if log_levels: for log_level in log_levels: browser_console_warnings_checker(log_level, log_levels) @@ -35,10 +31,8 @@ def make_teardown(driver): # make a screenshot with a name of the test, date and time def take_screenshot(driver, nodeid): - file_name = ( - f'{nodeid}_{datetime.today().strftime("%Y-%m-%d_%H-%M-%S-%f")}.png'.replace( - "/", "_" - ).replace("::", "__") + file_name = f'{nodeid}_{datetime.today().strftime("%Y-%m-%d_%H-%M-%S-%f")}.png'.replace("/", "_").replace( + "::", "__" ) driver.save_screenshot(file_name) diff --git a/vizro-core/tests/e2e/dashboards/default/dashboard.py b/vizro-core/tests/e2e/dashboards/default/dashboard.py index 986e9107a..88e843da7 100644 --- a/vizro-core/tests/e2e/dashboards/default/dashboard.py +++ b/vizro-core/tests/e2e/dashboards/default/dashboard.py @@ -1,34 +1,12 @@ -from functools import partial +import e2e_constants as cnst +from dashboard_pages import ag_grid_page, datepicker_page, filters_page, homepage, kpi_indicators_page, parameters_page -import pandas as pd import vizro.models as vm -import vizro.plotly.express as px -import yaml -from flask_caching import Cache from vizro import Vizro -from vizro.actions import export_data, filter_interaction -from vizro.figures import kpi_card, kpi_card_reference -from vizro.managers import data_manager -from vizro.tables import dash_ag_grid, dash_data_table - -import e2e_constants as cnst -from e2e_custom_feature_helpers.custom_actions.custom_actions import my_custom_action -from e2e_custom_feature_helpers.custom_charts.bar_custom import bar_with_highlight -from e2e_custom_feature_helpers.custom_components.new_dropdown import NewDropdown -from e2e_custom_feature_helpers.custom_components.range_slider_non_cross import RangeSliderNonCross - -from dashboard_pages import homepage, filters_page, parameters_page, kpi_indicators_page, datepicker_page, ag_grid_page dashboard = vm.Dashboard( title="Vizro dashboard for integration testing", - pages=[ - homepage, - filters_page, - parameters_page, - kpi_indicators_page, - datepicker_page, - ag_grid_page - ], + pages=[homepage, filters_page, parameters_page, kpi_indicators_page, datepicker_page, ag_grid_page], navigation=vm.Navigation( pages={ cnst.GENERAL_ACCORDION: [ @@ -37,13 +15,8 @@ cnst.PARAMETERS_PAGE, cnst.KPI_INDICATORS_PAGE, ], - cnst.DATEPICKER_ACCORDION: [ - cnst.DATEPICKER_PAGE - ], - cnst.AG_GRID_ACCORDION: [ - cnst.TABLE_AG_GRID_PAGE - ], - + cnst.DATEPICKER_ACCORDION: [cnst.DATEPICKER_PAGE], + cnst.AG_GRID_ACCORDION: [cnst.TABLE_AG_GRID_PAGE], } ), theme="vizro_light", diff --git a/vizro-core/tests/e2e/dashboards/default/dashboard_pages.py b/vizro-core/tests/e2e/dashboards/default/dashboard_pages.py index 0f332b7bc..b07b48311 100644 --- a/vizro-core/tests/e2e/dashboards/default/dashboard_pages.py +++ b/vizro-core/tests/e2e/dashboards/default/dashboard_pages.py @@ -1,13 +1,13 @@ +import e2e_constants as cnst +import pandas as pd from flask_caching import Cache import vizro.models as vm -import e2e_constants as cnst import vizro.plotly.express as px -import pandas as pd from vizro.actions import export_data from vizro.figures import kpi_card, kpi_card_reference -from vizro.tables import dash_data_table, dash_ag_grid from vizro.managers import data_manager +from vizro.tables import dash_ag_grid, dash_data_table iris = px.data.iris() gapminder = px.data.gapminder() @@ -17,12 +17,67 @@ ) datepicker_df = pd.DataFrame( [ - ["2016-05-16 20:42:31", "Male", 35, "$30,000 to $39,999", "Employed for wages", "mechanical drafter", "Associate degree", None], - ["2016-05-16", "Male", 21, "$1 to $10,000", "Out of work and looking for work", "-", "Some college, no degree", "join clubs/socual clubs/meet ups"], - ["2016-05-17", "Male", 22, "$0", "Out of work but not currently looking for work", "unemployed, Some college", "no degree", "Other exercise"], - ["2016-05-18", "Male", 19, "$1 to $10,000", "A student", "student", "Some college, no degree", "Joined a gym/go to the gym"], - ["2016-05-18", "Male", 23, "$30,000 to $39,999", "Employed for wages", "Factory worker", "High school graduate, diploma or the equivalent (for example: GED)", None], - ["2016-05-19", "Male", 23, "$30,000 to $39,999", "Employed for wages", "Factory worker", "High school graduate, diploma or the equivalent (for example: GED)", None]], + [ + "2016-05-16 20:42:31", + "Male", + 35, + "$30,000 to $39,999", + "Employed for wages", + "mechanical drafter", + "Associate degree", + None, + ], + [ + "2016-05-16", + "Male", + 21, + "$1 to $10,000", + "Out of work and looking for work", + "-", + "Some college, no degree", + "join clubs/socual clubs/meet ups", + ], + [ + "2016-05-17", + "Male", + 22, + "$0", + "Out of work but not currently looking for work", + "unemployed, Some college", + "no degree", + "Other exercise", + ], + [ + "2016-05-18", + "Male", + 19, + "$1 to $10,000", + "A student", + "student", + "Some college, no degree", + "Joined a gym/go to the gym", + ], + [ + "2016-05-18", + "Male", + 23, + "$30,000 to $39,999", + "Employed for wages", + "Factory worker", + "High school graduate, diploma or the equivalent (for example: GED)", + None, + ], + [ + "2016-05-19", + "Male", + 23, + "$30,000 to $39,999", + "Employed for wages", + "Factory worker", + "High school graduate, diploma or the equivalent (for example: GED)", + None, + ], + ], columns=["time", "gender", "age", "income", "employment", "job_title", "edu_level", "improve_yourself_how"], ) @@ -32,9 +87,7 @@ def load_datepicker_data(): return datepicker_df -data_manager.cache = Cache( - config={"CACHE_TYPE": "FileSystemCache", "CACHE_DIR": "cache"} -) +data_manager.cache = Cache(config={"CACHE_TYPE": "FileSystemCache", "CACHE_DIR": "cache"}) data_manager["datepicker_df"] = load_datepicker_data data_manager["datepicker_df"].timeout = 10 @@ -273,15 +326,11 @@ def load_datepicker_data(): controls=[ vm.Parameter( targets=[f"{cnst.HISTOGRAM_GRAPH_ID}.color_discrete_map.setosa"], - selector=vm.Dropdown( - options=["NONE", "red", "blue"], multi=False, value="blue" - ), + selector=vm.Dropdown(options=["NONE", "red", "blue"], multi=False, value="blue"), ), vm.Parameter( targets=[f"{cnst.BAR_GRAPH_ID}.color_discrete_map.virginica"], - selector=vm.Dropdown( - options=["NONE", "red", "blue"], multi=False, value="blue" - ), + selector=vm.Dropdown(options=["NONE", "red", "blue"], multi=False, value="blue"), ), vm.Parameter( targets=[f"{cnst.BAR_GRAPH_ID}.title", f"{cnst.HISTOGRAM_GRAPH_ID}.title"], @@ -289,15 +338,11 @@ def load_datepicker_data(): ), vm.Parameter( targets=[f"{cnst.BAR_GRAPH_ID}.y"], - selector=vm.RadioItems( - options=["petal_width", "petal_length"], value="petal_width" - ), + selector=vm.RadioItems(options=["petal_width", "petal_length"], value="petal_width"), ), vm.Parameter( targets=[f"{cnst.BAR_GRAPH_ID}.opacity"], - selector=vm.Slider( - min=0, max=1, value=0.2, step=0.2, title="Bubble opacity" - ), + selector=vm.Slider(min=0, max=1, value=0.2, step=0.2, title="Bubble opacity"), ), vm.Parameter( targets=[f"{cnst.HISTOGRAM_GRAPH_ID}.range_x"], @@ -467,15 +512,11 @@ def load_datepicker_data(): vm.AgGrid( id=cnst.TABLE_AG_GRID_ID, title="Equal Title One", - figure=dash_ag_grid( - data_frame=gapminder, dashGridOptions={"pagination": True} - ), + figure=dash_ag_grid(data_frame=gapminder, dashGridOptions={"pagination": True}), ), vm.Graph( id=cnst.BOX_AG_GRID_PAGE_ID, - figure=px.box( - gapminder, x="continent", y="lifeExp", title="Equal Title One" - ) + figure=px.box(gapminder, x="continent", y="lifeExp", title="Equal Title One"), ), ], ) @@ -502,4 +543,4 @@ def load_datepicker_data(): selector=vm.RangeSlider(step=1000000.0, min=1000000, max=10000000), ), ], -) \ No newline at end of file +) diff --git a/vizro-core/tests/e2e/dashboards/wait_for_dashboard.sh b/vizro-core/tests/e2e/dashboards/wait_for_dashboard.sh index bc71caed7..08bde9d3e 100755 --- a/vizro-core/tests/e2e/dashboards/wait_for_dashboard.sh +++ b/vizro-core/tests/e2e/dashboards/wait_for_dashboard.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -tests/e2e/dashboards/wait-for-it.sh 127.0.0.1:5001 -t 30 \ No newline at end of file +tests/e2e/dashboards/wait-for-it.sh 127.0.0.1:5001 -t 30 diff --git a/vizro-core/tests/e2e/pytest.ini b/vizro-core/tests/e2e/pytest.ini index 5f90df5e9..8b5a65240 100644 --- a/vizro-core/tests/e2e/pytest.ini +++ b/vizro-core/tests/e2e/pytest.ini @@ -1,3 +1,3 @@ [pytest] markers = - e2e_integration_tests: marks only tests for running as e2e_integration \ No newline at end of file + e2e_integration_tests: marks only tests for running as e2e_integration diff --git a/vizro-core/tests/e2e/test_charts.py b/vizro-core/tests/e2e/test_charts.py index 9b87c3e13..46a27705f 100644 --- a/vizro-core/tests/e2e/test_charts.py +++ b/vizro-core/tests/e2e/test_charts.py @@ -1,6 +1,5 @@ -import pytest - import e2e_constants as cnst +import pytest from e2e_checkers import check_text from e2e_helpers import webdriver_click_waiter, webdriver_waiter from e2e_paths import href_path, nav_card_text_path diff --git a/vizro-core/tests/e2e/test_filters.py b/vizro-core/tests/e2e/test_filters.py index 1a313b157..8c28e2446 100644 --- a/vizro-core/tests/e2e/test_filters.py +++ b/vizro-core/tests/e2e/test_filters.py @@ -1,14 +1,11 @@ -import pytest -from hamcrest import assert_that, equal_to -from selenium.webdriver.common.by import By - import e2e_constants as cnst +import pytest from e2e_checkers import ( check_graph_is_loading, check_range_slider_value, check_slider_value, ) -from e2e_helpers import webdriver_click_waiter, webdriver_waiter, graph_load_waiter +from e2e_helpers import graph_load_waiter, webdriver_click_waiter, webdriver_waiter from e2e_navigation import page_select from e2e_paths import ( checklist_value_path, @@ -20,6 +17,8 @@ range_slider_value_path, slider_value_path, ) +from hamcrest import assert_that, equal_to +from selenium.webdriver.common.by import By pytestmark = pytest.mark.e2e_integration_tests diff --git a/vizro-core/tests/e2e/test_pages.py b/vizro-core/tests/e2e/test_pages.py index 0dd78f29f..ee3b500f9 100644 --- a/vizro-core/tests/e2e/test_pages.py +++ b/vizro-core/tests/e2e/test_pages.py @@ -1,15 +1,16 @@ -import pytest - import e2e_constants as cnst +import pytest from e2e_checkers import ( check_accordion, + check_ag_grid_theme_color, check_graph_color, check_text, - check_theme_color, check_ag_grid_theme_color, + check_theme_color, ) from e2e_helpers import ( + graph_load_waiter, webdriver_click_waiter, - webdriver_waiter, graph_load_waiter, + webdriver_waiter, ) from e2e_navigation import page_select from e2e_paths import ( @@ -79,8 +80,12 @@ def test_themes(dash_br_driver, dashboard_id): indirect=["dash_br_driver"], ) def test_ag_grid_themes(dash_br_driver, dashboard_id): - page_select(dash_br_driver, page_name=cnst.TABLE_AG_GRID_PAGE, - graph_id=cnst.BOX_AG_GRID_PAGE_ID, accordion_name=cnst.AG_GRID_ACCORDION) + page_select( + dash_br_driver, + page_name=cnst.TABLE_AG_GRID_PAGE, + graph_id=cnst.BOX_AG_GRID_PAGE_ID, + accordion_name=cnst.AG_GRID_ACCORDION, + ) if dashboard_id == cnst.DASHBOARD_DEFAULT: check_ag_grid_theme_color(dash_br_driver, ag_grid_id=cnst.TABLE_AG_GRID_ID, color=cnst.AG_GRID_LIGHT) webdriver_click_waiter(dash_br_driver, xpath=theme_toggle_path()) @@ -106,7 +111,9 @@ def test_themes_page_change(dash_br_driver, dashboard_id): def _logic(style_background, graph_color, theme_color): check_graph_color(dash_br_driver, xpath=graph_bar, style_background=style_background, color=graph_color) check_theme_color(dash_br_driver, color=theme_color) - webdriver_click_waiter(dash_br_driver, tab_path(tab_id=cnst.PARAMETERS_SUB_TAB_CONTAINER_TWO, classname="nav-link")) + webdriver_click_waiter( + dash_br_driver, tab_path(tab_id=cnst.PARAMETERS_SUB_TAB_CONTAINER_TWO, classname="nav-link") + ) check_graph_color(dash_br_driver, xpath=graph_bar, style_background=style_background, color=graph_color) page_select(dash_br_driver, page_name=cnst.FILTERS_PAGE, graph_id=cnst.SCATTER_GRAPH_ID) page_select(dash_br_driver, page_name=cnst.PARAMETERS_PAGE, graph_id=cnst.BAR_GRAPH_ID) diff --git a/vizro-core/tests/tests_utils/e2e_checkers.py b/vizro-core/tests/tests_utils/e2e_checkers.py index 483f96535..4462b7e61 100644 --- a/vizro-core/tests/tests_utils/e2e_checkers.py +++ b/vizro-core/tests/tests_utils/e2e_checkers.py @@ -1,10 +1,9 @@ -from hamcrest import assert_that, equal_to, any_of, contains_string -from selenium.webdriver.common.by import By -from selenium.webdriver.support.color import Color - import e2e_constants as cnst -from e2e_helpers import webdriver_waiter, graph_load_waiter +from e2e_helpers import graph_load_waiter, webdriver_waiter from e2e_paths import accordion_path +from hamcrest import any_of, assert_that, contains_string, equal_to +from selenium.webdriver.common.by import By +from selenium.webdriver.support.color import Color def check_text(driver, xpath, text): @@ -36,9 +35,7 @@ def browser_console_warnings_checker(log_level, log_levels): def check_graph_is_loading(driver, graph_id): - webdriver_waiter( - driver, f'//*[@id="{graph_id}"][@data-dash-is-loading="true"]' - ) + webdriver_waiter(driver, f'//*[@id="{graph_id}"][@data-dash-is-loading="true"]') graph_load_waiter(driver, graph_id) @@ -74,9 +71,7 @@ def check_slider_value(driver, num, elem_id): def check_accordion(driver, accordion_name): webdriver_waiter(driver, accordion_path(accordion_name)) - webdriver_waiter( - driver, f'//*{accordion_path(accordion_name)}[@aria-expanded="true"]' - ) + webdriver_waiter(driver, f'//*{accordion_path(accordion_name)}[@aria-expanded="true"]') def check_theme_color(driver, color): @@ -89,12 +84,10 @@ def check_ag_grid_theme_color(driver, ag_grid_id, color): def check_graph_color(driver, xpath, style_background, color): webdriver_waiter(driver, f'{xpath}[@style="{style_background}"]') - rgb = webdriver_waiter(driver, xpath).value_of_css_property( - "background-color" - ) + rgb = webdriver_waiter(driver, xpath).value_of_css_property("background-color") graph_color = Color.from_string(rgb).hex assert_that( graph_color, equal_to(color), reason=f"Graph color is '{graph_color}', but expected color is '{color}'", - ) \ No newline at end of file + ) diff --git a/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_charts/bar_custom.py b/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_charts/bar_custom.py index 3322057c2..39312f21e 100644 --- a/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_charts/bar_custom.py +++ b/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_charts/bar_custom.py @@ -6,7 +6,5 @@ def bar_with_highlight(data_frame, x, highlight_bar=None): """Custom chart to test using DatePicker with Parameter.""" fig = px.bar(data_frame=data_frame, x=x) - fig["data"][0]["marker"]["color"] = [ - "orange" if c == highlight_bar else "blue" for c in fig["data"][0]["x"] - ] + fig["data"][0]["marker"]["color"] = ["orange" if c == highlight_bar else "blue" for c in fig["data"][0]["x"]] return fig diff --git a/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_components/new_dropdown.py b/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_components/new_dropdown.py index 0b4ea883e..65a7204f9 100644 --- a/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_components/new_dropdown.py +++ b/vizro-core/tests/tests_utils/e2e_custom_feature_helpers/custom_components/new_dropdown.py @@ -1,13 +1,15 @@ from typing import List, Optional, Union -import vizro.models as vm from dash import dcc, html +import vizro.models as vm + try: from pydantic.v1 import Field, PrivateAttr except ImportError: from pydantic import Field, PrivateAttr from typing_extensions import Literal + from vizro.models import Action from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._base import VizroBaseModel, _log_call @@ -21,16 +23,12 @@ class NewDropdown(VizroBaseModel): """Categorical single/multi-selector `Dropdown` to be provided to `Filter`.""" type: Literal["new-dropdown"] = "new-dropdown" - options: Optional[MultiOptionType] = Field( - None, description="Possible options the user can select from" - ) + options: Optional[MultiOptionType] = Field(None, description="Possible options the user can select from") value: Optional[Union[SingleOptionType, MultiOptionType]] = Field( None, description="Options that are selected by default" ) - multi: bool = Field( - True, description="Whether to allow selection of multiple values" - ) - actions: List[Action] = [] # noqa: RUF012 + multi: bool = Field(True, description="Whether to allow selection of multiple values") + actions: List[Action] = [] title: Optional[str] = Field(None, description="Title to be displayed") # Component properties for actions and interactions diff --git a/vizro-core/tests/tests_utils/e2e_helpers.py b/vizro-core/tests/tests_utils/e2e_helpers.py index b59ebbcc1..c29c7674a 100644 --- a/vizro-core/tests/tests_utils/e2e_helpers.py +++ b/vizro-core/tests/tests_utils/e2e_helpers.py @@ -1,23 +1,22 @@ +from e2e_paths import graph_xaxis_tick_path from selenium.common import StaleElementReferenceException from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait -from e2e_paths import graph_xaxis_tick_path - def webdriver_click_waiter(driver, xpath): - WebDriverWait( - driver, 10, ignored_exceptions=StaleElementReferenceException - ).until(expected_conditions.element_to_be_clickable((By.XPATH, xpath))).click() + WebDriverWait(driver, 10, ignored_exceptions=StaleElementReferenceException).until( + expected_conditions.element_to_be_clickable((By.XPATH, xpath)) + ).click() def webdriver_waiter(driver, xpath): - elem = WebDriverWait( - driver, 30, ignored_exceptions=StaleElementReferenceException - ).until(expected_conditions.presence_of_element_located((By.XPATH, xpath))) + elem = WebDriverWait(driver, 30, ignored_exceptions=StaleElementReferenceException).until( + expected_conditions.presence_of_element_located((By.XPATH, xpath)) + ) return elem def graph_load_waiter(driver, graph_id): - webdriver_waiter(driver, graph_xaxis_tick_path(graph_id)) \ No newline at end of file + webdriver_waiter(driver, graph_xaxis_tick_path(graph_id)) diff --git a/vizro-core/tests/tests_utils/e2e_navigation.py b/vizro-core/tests/tests_utils/e2e_navigation.py index 694a82f87..b8617f8c4 100644 --- a/vizro-core/tests/tests_utils/e2e_navigation.py +++ b/vizro-core/tests/tests_utils/e2e_navigation.py @@ -1,14 +1,12 @@ import time -from e2e_helpers import webdriver_click_waiter, webdriver_waiter, graph_load_waiter -from e2e_paths import page_accordion_path, page_title_path, accordion_path +from e2e_helpers import graph_load_waiter, webdriver_click_waiter, webdriver_waiter +from e2e_paths import accordion_path, page_accordion_path, page_title_path def accordion_select(chromdriver, accordion_name): webdriver_click_waiter(chromdriver, accordion_path(accordion_name)) - webdriver_waiter( - chromdriver, f'//*{accordion_path(accordion_name)}[@aria-expanded="true"]' - ) + webdriver_waiter(chromdriver, f'//*{accordion_path(accordion_name)}[@aria-expanded="true"]') def page_select(driver, page_name, graph_id=None, accordion_name=None): diff --git a/vizro-core/tests/tests_utils/e2e_paths.py b/vizro-core/tests/tests_utils/e2e_paths.py index 0c4a1328f..7a5f38bb1 100644 --- a/vizro-core/tests/tests_utils/e2e_paths.py +++ b/vizro-core/tests/tests_utils/e2e_paths.py @@ -5,6 +5,7 @@ def href_path(href): def theme_toggle_path(): return '//*[@id="theme-selector"]' + # Navigation @@ -23,6 +24,7 @@ def page_title_path(page_title): def tab_path(tab_id, classname): return f'//*[@class="{classname}"][text()="{tab_id}"]' + # Components @@ -79,5 +81,3 @@ def button_path(button_text): def graph_path(graph_id): return f'//*[@id="{graph_id}"]//*[@class="main-svg"]' - -