Skip to content

support react 19#3646

Draft
T4rk1n wants to merge 9 commits into
devfrom
react19
Draft

support react 19#3646
T4rk1n wants to merge 9 commits into
devfrom
react19

Merge branch 'dev' into react19

e5b2dc6
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
GitHub Actions / Test Results Summary succeeded Apr 22, 2026 in 0s

3233 passed, 1 failed and 57 skipped

Tests failed

Report Passed Failed Skipped Time
test-results/background-test-results-py3.12/junit_async.xml 26✅ 74s
test-results/background-test-results-py3.12/junit_background.xml 36✅ 2⚪ 422s
test-results/background-test-results-py3.9/junit_async.xml 26✅ 76s
test-results/background-test-results-py3.9/junit_background.xml 36✅ 2⚪ 423s
test-results/dcc-test-results-py3.12-react18.3.1-group1/junit_intg.xml 164✅ 1⚪ 583s
test-results/dcc-test-results-py3.12-react18.3.1-group2/junit_intg.xml 135✅ 442s
test-results/dcc-test-results-py3.12-react18.3.1-group3/junit_intg.xml 33✅ 98s
test-results/dcc-test-results-py3.12-react19.2.0-group1/junit_intg.xml 164✅ 1⚪ 570s
test-results/dcc-test-results-py3.12-react19.2.0-group2/junit_intg.xml 135✅ 475s
test-results/dcc-test-results-py3.12-react19.2.0-group3/junit_intg.xml 33✅ 102s
test-results/dcc-test-results-py3.8-react18.3.1-group1/junit_intg.xml 164✅ 1⚪ 566s
test-results/dcc-test-results-py3.8-react18.3.1-group2/junit_intg.xml 134✅ 1❌ 443s
test-results/dcc-test-results-py3.8-react18.3.1-group3/junit_intg.xml 33✅ 133s
test-results/dcc-test-results-py3.8-react19.2.0-group1/junit_intg.xml 164✅ 1⚪ 596s
test-results/dcc-test-results-py3.8-react19.2.0-group2/junit_intg.xml 135✅ 461s
test-results/dcc-test-results-py3.8-react19.2.0-group3/junit_intg.xml 33✅ 96s
test-results/html-test-results-py3.12-react18.3.1/junit_html.xml 7✅ 10s
test-results/html-test-results-py3.12-react19.2.0/junit_html.xml 7✅ 12s
test-results/html-test-results-py3.8-react18.3.1/junit_html.xml 7✅ 9s
test-results/html-test-results-py3.8-react19.2.0/junit_html.xml 7✅ 6s
test-results/table-server-results-group1/junit_table.xml 84✅ 16⚪ 472s
test-results/table-server-results-group2/junit_table.xml 194✅ 3⚪ 479s
test-results/table-server-results-group3/junit_table.xml 151✅ 10⚪ 452s
test-results/test-main-results-py3.12-react18.3.1-group1/junit_intg.xml 127✅ 2⚪ 278s
test-results/test-main-results-py3.12-react18.3.1-group2/junit_intg.xml 108✅ 2⚪ 450s
test-results/test-main-results-py3.12-react18.3.1-group3/junit_intg.xml 96✅ 1⚪ 252s
test-results/test-main-results-py3.12-react19.2.0-group1/junit_intg.xml 127✅ 2⚪ 273s
test-results/test-main-results-py3.12-react19.2.0-group2/junit_intg.xml 109✅ 2⚪ 398s
test-results/test-main-results-py3.12-react19.2.0-group3/junit_intg.xml 96✅ 1⚪ 261s
test-results/test-main-results-py3.8-react18.3.1-group1/junit_intg.xml 127✅ 2⚪ 272s
test-results/test-main-results-py3.8-react18.3.1-group2/junit_intg.xml 108✅ 2⚪ 422s
test-results/test-main-results-py3.8-react18.3.1-group3/junit_intg.xml 96✅ 1⚪ 237s
test-results/test-main-results-py3.8-react19.2.0-group1/junit_intg.xml 127✅ 2⚪ 253s
test-results/test-main-results-py3.8-react19.2.0-group2/junit_intg.xml 108✅ 2⚪ 410s
test-results/test-main-results-py3.8-react19.2.0-group3/junit_intg.xml 96✅ 1⚪ 256s

✅ test-results/background-test-results-py3.12/junit_async.xml

26 tests were completed in 74s with 26 passed, 0 failed and 0 skipped.

✅ test-results/background-test-results-py3.12/junit_background.xml

38 tests were completed in 422s with 36 passed, 0 failed and 2 skipped.

✅ test-results/background-test-results-py3.9/junit_async.xml

26 tests were completed in 76s with 26 passed, 0 failed and 0 skipped.

✅ test-results/background-test-results-py3.9/junit_background.xml

38 tests were completed in 423s with 36 passed, 0 failed and 2 skipped.

✅ test-results/dcc-test-results-py3.12-react18.3.1-group1/junit_intg.xml

165 tests were completed in 583s with 164 passed, 0 failed and 1 skipped.

✅ test-results/dcc-test-results-py3.12-react18.3.1-group2/junit_intg.xml

135 tests were completed in 442s with 135 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.12-react18.3.1-group3/junit_intg.xml

33 tests were completed in 98s with 33 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.12-react19.2.0-group1/junit_intg.xml

165 tests were completed in 570s with 164 passed, 0 failed and 1 skipped.

✅ test-results/dcc-test-results-py3.12-react19.2.0-group2/junit_intg.xml

135 tests were completed in 475s with 135 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.12-react19.2.0-group3/junit_intg.xml

33 tests were completed in 102s with 33 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.8-react18.3.1-group1/junit_intg.xml

165 tests were completed in 566s with 164 passed, 0 failed and 1 skipped.

❌ test-results/dcc-test-results-py3.8-react18.3.1-group2/junit_intg.xml

135 tests were completed in 443s with 134 passed, 1 failed and 0 skipped.

Test suite Passed Failed Skipped Time
pytest 134✅ 1❌ 443s

❌ pytest

components.dash-core-components.tests.integration.graph.test_graph_varia
  ✅ test_grva004_graph_prepend_trace[False]
  ✅ test_grva005_graph_extend_trace[True]
  ✅ test_grva005_graph_extend_trace[False]
  ✅ test_grva006_unmounted_graph_resize[True]
  ✅ test_grva006_unmounted_graph_resize[False]
  ✅ test_grva007_external_plotlyjs_prevents_lazy[False]
  ✅ test_grva007_external_plotlyjs_prevents_lazy[True]
  ✅ test_grva008_shapes_not_lost
  ✅ test_grva009_originals_maintained_for_responsive_override[True]
  ✅ test_grva009_originals_maintained_for_responsive_override[False]
  ✅ test_grva010_external_mathjax_prevents_lazy
  ✅ test_grva011_without_mathjax[True]
  ✅ test_grva011_without_mathjax[False]
  ✅ test_grva012_with_mathjax[True]
  ✅ test_grva012_with_mathjax[False]
  ✅ test_grva013_toggle_mathjax[True]
  ✅ test_grva013_toggle_mathjax[False]
  ✅ test_grva014_load_mathjax[True]
  ✅ test_grva014_load_mathjax[False]
components.dash-core-components.tests.integration.input.test_a11y_input
  ✅ test_a11y001_label_focuses_input[text]
  ✅ test_a11y001_label_focuses_input[number]
  ✅ test_a11y002_label_with_htmlFor_can_focus_input[text]
  ✅ test_a11y002_label_with_htmlFor_can_focus_input[number]
components.dash-core-components.tests.integration.input.test_debounce
  ✅ test_debounce_text_by_time
  ✅ test_debounce_number_by_time
components.dash-core-components.tests.integration.input.test_input_and_state
  ✅ test_state_and_inputs
components.dash-core-components.tests.integration.input.test_input_basics
  ✅ test_inbs001_all_types
  ✅ test_inbs002_user_class
  ✅ test_inbs003_styles_are_scoped
  ✅ test_inbs004_cursor_position_on_invalid_input[abcdddef-/-2-ab/cdddef-3]
  ✅ test_inbs004_cursor_position_on_invalid_input[abcdef-$-2-ab$cdef-3]
  ✅ test_inbs004_cursor_position_on_invalid_input[abcdef-$-3-abc$def-4]
  ✅ test_inbs004_cursor_position_on_invalid_input[abcdef-A-4-abcdAef-5]
components.dash-core-components.tests.integration.input.test_number_input
  ✅ test_inni001_invalid_numbers
  ✅ test_inni002_invalid_numbers_ui
  ✅ test_inni003_invalid_numbers_range
  ✅ test_inni004_steppers
  ✅ test_inni005_stepper_decrement_bug
  ✅ test_inni006_stepper_floating_point_precision[0.1]
  ✅ test_inni006_stepper_floating_point_precision[0.01]
  ✅ test_inni006_stepper_floating_point_precision[0.001]
  ✅ test_inni006_stepper_floating_point_precision[0.0001]
  ✅ test_inni007_stepper_very_small_steps[1e-05]
  ✅ test_inni007_stepper_very_small_steps[1e-06]
  ✅ test_inni010_valid_numbers
  ✅ test_inni011_min_max_bug
components.dash-core-components.tests.integration.interval.test_interval
  ✅ test_intv001_interval
  ✅ test_intv002_restart
components.dash-core-components.tests.integration.link.test_absolute_path
  ✅ test_lipa001_path
  ✅ test_lipa002_path
components.dash-core-components.tests.integration.link.test_link_children
  ✅ test_lich001_default
  ✅ test_lich002_children
components.dash-core-components.tests.integration.link.test_link_event
  ✅ test_link001_event
  ✅ test_link002_scroll
components.dash-core-components.tests.integration.link.test_title_prop
  ✅ test_liti001_prop
components.dash-core-components.tests.integration.loading.test_loading_component
  ✅ test_ldcp001_loading_component_initialization
  ✅ test_ldcp002_loading_component_action
  ✅ test_ldcp003_multiple_loading_components
  ✅ test_ldcp004_nested_loading_components
  ✅ test_ldcp005_dynamic_loading_component
  ✅ test_ldcp006_children_identity
  ✅ test_ldcp007_class_and_style_props
  ✅ test_ldcp008_graph_in_loading_fits_container_height
  ✅ test_ldcp009_loading_component_overlay_style
  ✅ test_ldcp010_loading_component_target_components
  ✅ test_ldcp011_loading_component_target_components
  ✅ test_ldcp012_loading_component_custom_spinner
  ✅ test_ldcp013_loading_component_display_show
  ✅ test_ldcp014_loading_component_delay_hide
  ✅ test_ldcp015_loading_component_delay_show
  ✅ test_ldcp016_loading_component_delay_hide
  ✅ test_ldcp017_loading_component_target_components_duplicates
  ✅ test_ldcp018_loading_component_target_components_wildcard
  ✅ test_ldcp019_loading_component_pattern_matching
components.dash-core-components.tests.integration.location.test_location_callback
  ✅ test_loca001_callbacks
  ✅ test_loca002_location_link
  ✅ test_loca003_location_callback
components.dash-core-components.tests.integration.markdown.test_markdown
  ✅ test_mkdw001_img
  ✅ test_mkdw002_dcclink
  ✅ test_mkdw003_without_mathjax[True]
  ✅ test_mkdw003_without_mathjax[False]
  ✅ test_mkdw004_inline_mathjax[True]
  ✅ test_mkdw004_inline_mathjax[False]
  ✅ test_mkdw005_block_mathjax[True]
  ✅ test_mkdw005_block_mathjax[False]
  ✅ test_mkdw006_toggle_mathjax[True]
  ✅ test_mkdw006_toggle_mathjax[False]
  ✅ test_mkdw007_load_mathjax[True]
  ✅ test_mkdw007_load_mathjax[False]
  ✅ test_mkdw008_mathjax_visual
  ✅ test_mkdw009_target_blank_links
  ✅ test_mkdw010_mathjax_with_html
components.dash-core-components.tests.integration.misc.test_bcdp_auto_id
  ✅ test_msai001_auto_id_assert
components.dash-core-components.tests.integration.misc.test_dcc_components_as_props
  ✅ test_mdcap001_dcc_components_as_props
components.dash-core-components.tests.integration.misc.test_inline
  ✅ test_inline_props
components.dash-core-components.tests.integration.misc.test_markdown_highlight
  ✅ test_msmh001_no_window_variable
  ✅ test_msmh002_window_override
  ✅ test_msmh003_update_md
components.dash-core-components.tests.integration.misc.test_persistence
  ❌ test_msps001_basic_persistence
	self = <conftest.DashCoreComponentsComposite object at 0x7fd3c1da0970>
components.dash-core-components.tests.integration.misc.test_platter
  ✅ test_mspl001_dcc_components_platter
components.dash-core-components.tests.integration.misc.test_popover_visibility
  ✅ test_mspv001_popover_visibility_when_app_is_smaller_than_popup
  ✅ test_mspv002_popover_visibility_when_app_is_scrolled_down
  ✅ test_mspv003_popover_contained_within_dash_app
  ✅ test_mspv004_popover_inherits_container_styles
components.dash-core-components.tests.integration.sliders.test_marks_density
  ✅ test_slsl_extreme_range_marks_density
  ✅ test_slsl_extreme_range_no_width
components.dash-core-components.tests.integration.sliders.test_sliders
  ✅ test_slsl001_always_visible_slider
  ✅ test_slsl002_always_visible_rangeslider
  ✅ test_slsl003_out_of_range_marks_slider
  ✅ test_slsl004_out_of_range_marks_rangeslider
  ✅ test_slsl005_slider_tooltip
  ✅ test_slsl006_rangeslider_tooltip
  ✅ test_slsl007_drag_value_slider
  ✅ test_slsl008_drag_value_rangeslider
  ✅ test_slsl009_loading_state
  ✅ test_slsl010_range_loading_state
  ✅ test_slsl011_horizontal_slider
  ✅ test_slsl012_vertical_slider
  ✅ test_slsl013_horizontal_range_slider
  ✅ test_slsl014_vertical_range_slider
  ✅ test_slsl015_range_slider_step_none
  ✅ test_slsl015_range_slider_no_min_max
  ✅ test_sls016_sliders_format_tooltips
  ✅ test_slsl017_marks_limit_500
  ✅ test_slsl018_marks_limit_exceeded
  ✅ test_slsl019_allow_direct_input_false
  ✅ test_slsl020_empty_mark_labels_keep_tick_alignment
components.dash-core-components.tests.integration.sliders.test_sliders_keyboard_input
  ✅ test_slkb001_input_constrained_by_min_max
  ✅ test_slkb002_range_input_constrained_by_min_max
  ✅ test_slkb003_input_constrained_by_step
  ✅ test_slkb004_range_input_constrained_by_step
  ✅ test_slkb005_input_decimals_precision
components.dash-core-components.tests.integration.sliders.test_sliders_shorthands
  ✅ test_slsh001_rangeslider_shorthand_props
  ✅ test_slsh002_sliders_marks_si_unit_format
components.dash-core-components.tests.integration.sliders.test_sliders_step
  ✅ test_slst001_step_params[test_case0]

✅ test-results/dcc-test-results-py3.8-react18.3.1-group3/junit_intg.xml

33 tests were completed in 133s with 33 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.8-react19.2.0-group1/junit_intg.xml

165 tests were completed in 596s with 164 passed, 0 failed and 1 skipped.

✅ test-results/dcc-test-results-py3.8-react19.2.0-group2/junit_intg.xml

135 tests were completed in 461s with 135 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.8-react19.2.0-group3/junit_intg.xml

33 tests were completed in 96s with 33 passed, 0 failed and 0 skipped.

✅ test-results/html-test-results-py3.12-react18.3.1/junit_html.xml

7 tests were completed in 10s with 7 passed, 0 failed and 0 skipped.

✅ test-results/html-test-results-py3.12-react19.2.0/junit_html.xml

7 tests were completed in 12s with 7 passed, 0 failed and 0 skipped.

✅ test-results/html-test-results-py3.8-react18.3.1/junit_html.xml

7 tests were completed in 9s with 7 passed, 0 failed and 0 skipped.

✅ test-results/html-test-results-py3.8-react19.2.0/junit_html.xml

7 tests were completed in 6s with 7 passed, 0 failed and 0 skipped.

✅ test-results/table-server-results-group1/junit_table.xml

100 tests were completed in 472s with 84 passed, 0 failed and 16 skipped.

✅ test-results/table-server-results-group2/junit_table.xml

197 tests were completed in 479s with 194 passed, 0 failed and 3 skipped.

✅ test-results/table-server-results-group3/junit_table.xml

161 tests were completed in 452s with 151 passed, 0 failed and 10 skipped.

✅ test-results/test-main-results-py3.12-react18.3.1-group1/junit_intg.xml

129 tests were completed in 278s with 127 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.12-react18.3.1-group2/junit_intg.xml

110 tests were completed in 450s with 108 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.12-react18.3.1-group3/junit_intg.xml

97 tests were completed in 252s with 96 passed, 0 failed and 1 skipped.

✅ test-results/test-main-results-py3.12-react19.2.0-group1/junit_intg.xml

129 tests were completed in 273s with 127 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.12-react19.2.0-group2/junit_intg.xml

111 tests were completed in 398s with 109 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.12-react19.2.0-group3/junit_intg.xml

97 tests were completed in 261s with 96 passed, 0 failed and 1 skipped.

✅ test-results/test-main-results-py3.8-react18.3.1-group1/junit_intg.xml

129 tests were completed in 272s with 127 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.8-react18.3.1-group2/junit_intg.xml

110 tests were completed in 422s with 108 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.8-react18.3.1-group3/junit_intg.xml

97 tests were completed in 237s with 96 passed, 0 failed and 1 skipped.

✅ test-results/test-main-results-py3.8-react19.2.0-group1/junit_intg.xml

129 tests were completed in 253s with 127 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.8-react19.2.0-group2/junit_intg.xml

110 tests were completed in 410s with 108 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.8-react19.2.0-group3/junit_intg.xml

97 tests were completed in 256s with 96 passed, 0 failed and 1 skipped.

Annotations

Check failure on line 0 in test-results/dcc-test-results-py3.8-react18.3.1-group2/junit_intg.xml

See this annotation in the file changed.

@github-actions github-actions / Test Results Summary

pytest ► components.dash-core-components.tests.integration.misc.test_persistence ► test_msps001_basic_persistence

Failed test found in:
  test-results/dcc-test-results-py3.8-react18.3.1-group2/junit_intg.xml
Error:
  self = <conftest.DashCoreComponentsComposite object at 0x7fd3c1da0970>
Raw output
self = <conftest.DashCoreComponentsComposite object at 0x7fd3c1da0970>
method = <dash.testing.wait.text_to_equal object at 0x7fd3b10085e0>
timeout = None
msg = <bound method text_to_equal.message of <dash.testing.wait.text_to_equal object at 0x7fd3b10085e0>>

    def _wait_for(self, method, timeout, msg):
        """Abstract generic pattern for explicit WebDriverWait."""
        try:
            _wait = (
                self._wd_wait
                if timeout is None
                else WebDriverWait(self.driver, timeout)
            )
            logger.debug(
                "method, timeout, poll => %s %s %s",
                method,
                _wait._timeout,  # pylint: disable=protected-access
                _wait._poll,  # pylint: disable=protected-access
            )
    
>           return _wait.until(method)

/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/dash/testing/browser.py:288: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <selenium.webdriver.support.wait.WebDriverWait (session="c715eb9fb0c00ca99ac20f4081887e01")>
method = <dash.testing.wait.text_to_equal object at 0x7fd3b10085e0>
message = ''

    def until(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value does not evaluate to ``False``.
    
        :param method: callable(WebDriver)
        :param message: optional message for :exc:`TimeoutException`
        :returns: the result of the last call to `method`
        :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
        """
        screen = None
        stacktrace = None
    
        end_time = time.monotonic() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if value:
                    return value
            except self._ignored_exceptions as exc:
                screen = getattr(exc, 'screen', None)
                stacktrace = getattr(exc, 'stacktrace', None)
            time.sleep(self._poll)
            if time.monotonic() > end_time:
                break
>       raise TimeoutException(message, screen, stacktrace)
E       selenium.common.exceptions.TimeoutException: Message:

/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/selenium/webdriver/support/wait.py:87: TimeoutException

The above exception was the direct cause of the following exception:

dash_dcc = <conftest.DashCoreComponentsComposite object at 0x7fd3c1da0970>

    def test_msps001_basic_persistence(dash_dcc):
        app = Dash(__name__)
    
        app.layout = html.Div(
            [
                dcc.Checklist(
                    id="checklist",
                    options=[
                        {"label": "Slow #x1F422", "value": "#x1F422"},
                        {"label": "Fast #x1F3CE️", "value": "#x1F3CE️"},
                        {"label": "Faster #x1F680", "value": "#x1F680"},
                    ],
                    value=["#x1F3CE️"],
                    persistence=True,
                ),
                dcc.DatePickerRange(
                    id="datepickerrange",
                    start_date="2017-08-21",
                    end_date="2024-04-08",
                    initial_visible_month="2019-05-01",
                    persistence=True,
                ),
                dcc.DatePickerSingle(
                    id="datepickersingle", date="2019-01-01", persistence=True
                ),
                dcc.Dropdown(
                    id="dropdownsingle",
                    options=[
                        {"label": "One 1️⃣", "value": "1️⃣"},
                        {"label": "Two 2️⃣", "value": "2️⃣"},
                        {"label": "Three 3️⃣", "value": "3️⃣"},
                    ],
                    value="2️⃣",
                    persistence=True,
                ),
                dcc.Dropdown(
                    id="dropdownmulti",
                    options=[
                        {"label": "Four 4️⃣", "value": "4️⃣"},
                        {"label": "Five 5️⃣", "value": "5️⃣"},
                        {"label": "Six 6️⃣", "value": "6️⃣"},
                    ],
                    value=["4️⃣"],
                    multi=True,
                    persistence=True,
                ),
                dcc.Input(id="input", value="yes", persistence=True),
                dcc.RadioItems(
                    id="radioitems",
                    options=[
                        {"label": "Red", "value": "r"},
                        {"label": "Green", "value": "g"},
                        {"label": "Blue", "value": "b"},
                    ],
                    value="b",
                    persistence=True,
                ),
                dcc.RangeSlider(
                    id="rangeslider", min=0, max=10, step=1, value=[3, 7], persistence=True
                ),
                dcc.Slider(id="slider", min=20, max=30, step=1, value=25, persistence=True),
                dcc.Tabs(
                    id="tabs",
                    children=[
                        dcc.Tab(label="Eh?", children="Tab A", value="A"),
                        dcc.Tab(label="Bee", children="Tab B", value="B"),
                        dcc.Tab(label="Sea", children="Tab C", value="C"),
                    ],
                    value="A",
                    persistence=True,
                ),
                dcc.Textarea(id="textarea", value="knock knock", persistence=True),
                html.Div(id="settings"),
            ]
        )
    
        @app.callback(
            Output("settings", "children"),
            [
                Input("checklist", "value"),
                Input("datepickerrange", "start_date"),
                Input("datepickerrange", "end_date"),
                Input("datepickersingle", "date"),
                Input("dropdownsingle", "value"),
                Input("dropdownmulti", "value"),
                Input("input", "value"),
                Input("radioitems", "value"),
                Input("rangeslider", "value"),
                Input("slider", "value"),
                Input("tabs", "value"),
                Input("textarea", "value"),
            ],
        )
        def make_output(*args):
            return json.dumps(args)
    
        initial_settings = [
            ["#x1F3CE️"],
            "2017-08-21",
            "2024-04-08",
            "2019-01-01",
            "2️⃣",
            ["4️⃣"],
            "yes",
            "b",
            [3, 7],
            25,
            "A",
            "knock knock",
        ]
    
        dash_dcc.start_server(app)
        dash_dcc.driver.set_window_size(1024, 768)
        dash_dcc.wait_for_text_to_equal("#settings", json.dumps(initial_settings))
    
        dash_dcc.find_element('#checklist [data-option-index="2"] input').click()  # #x1F680
    
        dash_dcc.select_date_range("datepickerrange", day_range=(4,))
        dash_dcc.select_date_range("datepickerrange", day_range=(14,), start_first=False)
    
        dash_dcc.find_element("#datepickersingle").click()
        dash_dcc.select_date_single("datepickersingle", day="20")
    
        dash_dcc.find_element("#dropdownsingle").click()
        dash_dcc.find_element(".dash-dropdown-content .dash-dropdown-search").send_keys(
            "one" + Keys.ENTER
        )
    
        dash_dcc.find_element("#dropdownmulti").click()
        dash_dcc.find_element(".dash-dropdown-content .dash-dropdown-search").send_keys(
            "six"
        )
        sleep(0.2)
        dash_dcc.find_element(".dash-dropdown-content .dash-dropdown-option").click()
    
        dash_dcc.find_element("#input").send_keys(" maybe")
    
        dash_dcc.find_element('#radioitems [data-option-index="0"] input').click()  # red
    
        range_slider = dash_dcc.find_element("#rangeslider")
        dash_dcc.click_at_coord_fractions(range_slider, 0.5, 0.25)  # 5
        dash_dcc.click_at_coord_fractions(range_slider, 0.8, 0.25)  # 8
    
        slider = dash_dcc.find_element("#slider")
        dash_dcc.click_at_coord_fractions(slider, 0.2, 0.25)  # 22
    
        dash_dcc.find_element("#tabs .tab:last-child").click()  # C
    
        dash_dcc.find_element("#textarea").send_keys(Keys.ENTER + "who's there?")
    
        edited_settings = [
            ["#x1F3CE️", "#x1F680"],
            "2019-05-04",
            "2019-05-14",
            "2019-01-20",
            "1️⃣",
            ["4️⃣", "6️⃣"],
            "yes maybe",
            "r",
            [5, 8],
            22,
            "C",
            "knock knock\nwho's there?",
        ]
    
>       dash_dcc.wait_for_text_to_equal("#settings", json.dumps(edited_settings))

tests/integration/misc/test_persistence.py:174: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/dash/testing/browser.py:367: in wait_for_text_to_equal
    return self._wait_for(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <conftest.DashCoreComponentsComposite object at 0x7fd3c1da0970>
method = <dash.testing.wait.text_to_equal object at 0x7fd3b10085e0>
timeout = None
msg = <bound method text_to_equal.message of <dash.testing.wait.text_to_equal object at 0x7fd3b10085e0>>

    def _wait_for(self, method, timeout, msg):
        """Abstract generic pattern for explicit WebDriverWait."""
        try:
            _wait = (
                self._wd_wait
                if timeout is None
                else WebDriverWait(self.driver, timeout)
            )
            logger.debug(
                "method, timeout, poll => %s %s %s",
                method,
                _wait._timeout,  # pylint: disable=protected-access
                _wait._poll,  # pylint: disable=protected-access
            )
    
            return _wait.until(method)
        except Exception as err:
            if callable(msg):
                message = msg(self.driver)
            else:
                message = msg
>           raise TimeoutException(str(message)) from err
E           selenium.common.exceptions.TimeoutException: Message: text -> [["\ud83c\udfce\ufe0f", "\ud83d\ude80"], "2019-05-04", "2019-05-14", "2019-01-20", "1\ufe0f\u20e3", ["4\ufe0f\u20e3", "6\ufe0f\u20e3"], "yes maybe", "r", [5, 8], 22, "C", "knock knock\nwho's there?"] not found within 10s, found: [["\ud83c\udfce\ufe0f", "\ud83d\ude80"], "2019-05-04", "2019-05-14", "2019-01-20", null, ["4\ufe0f\u20e3", "6\ufe0f\u20e3"], "yes maybe", "r", [5, 8], 22, "C", "knock knock\nwho's there?"]

/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/dash/testing/browser.py:294: TimeoutException