code: def test_server_on_change_round_trip(
      self, bokeh_server_page: BokehServerPage
  ) -> None:
      button = Dropdown(label="Dropdown button", menu=items)
  
      def modify_doc(doc):
          source = ColumnDataSource(dict(x=[1, 2], y=[1, 1]))
          plot = Plot(
              height=400,
              width=400,
              x_range=Range1d(0, 1),
              y_range=Range1d(0, 1),
              min_border=0,
          )
          plot.add_glyph(source, Scatter(x="x", y="y", size=20))
          plot.tags.append(
              CustomJS(
                  name="custom-action",
                  args=dict(s=source),
                  code=RECORD("data", "s.data"),
              )
          )
  
          def cb(event):
              item = event.item
              if item == "item_1_value":
                  source.data = dict(x=[10, 20], y=[10, 10])
              elif item == "item_2_value":
                  source.data = dict(x=[100, 200], y=[100, 100])
              elif item == "item_3_value":
                  source.data = dict(x=[1000, 2000], y=[1000, 1000])
  
          button.on_event("menu_item_click", cb)
          doc.add_root(column(button, plot))
  
      page = bokeh_server_page(modify_doc)
  
      button_el = find_element_for(page.driver, button, "button")
      button_el.click()
  
      item = find_element_for(
          page.driver, button, ".bk-menu > *:nth-child(1)"
      )
      item.click()
  
      page.eval_custom_action()
  
      results = page.results
      assert results == {"data": {"x": [10, 20], "y": [10, 10]}}
  
      button_el = find_element_for(page.driver, button, "button")
      button_el.click()
  
      item = find_element_for(
          page.driver, button, ".bk-menu > *:nth-child(3)"
      )
      item.click()
  
      page.eval_custom_action()
  
      results = page.results
      assert results == {"data": {"x": [1000, 2000], "y": [1000, 1000]}}
  
      button_el = find_element_for(page.driver, button, "button")
      button_el.click()
  
      item = find_element_for(
          page.driver, button, ".bk-menu > *:nth-child(2)"
      )
      item.click()
  
      page.eval_custom_action()
  
      results = page.results
      assert results == {"data": {"x": [100, 200], "y": [100, 100]}}
  
      assert page.has_no_console_errors()
  
file_path: bokeh/tests/integration/widgets/test_dropdown.py
imports: from __future__ import annotations
  import pytest
  from bokeh.core.enums import ButtonType
  from bokeh.layouts import column
  from bokeh.models import ColumnDataSource, CustomJS, Dropdown, Plot, Range1d, Scatter
  from tests.support.plugins.project import BokehModelPage, BokehServerPage
  from tests.support.util.selenium import RECORD, find_element_for
label_desc: Use image node_id 3 for calling the Test_Dropdown obj's underlying member method code with example usage: obj.test_server_on_change_round_trip(bokeh_server_page) without return types