code: def test_server_on_change_round_trip(
      self, bokeh_server_page: BokehServerPage
  ) -> None:
      group = RadioButtonGroup(labels=LABELS)
  
      def modify_doc(doc):
          source = ColumnDataSource(
              dict(x=[1, 2], y=[1, 1], val=["a", "b"])
          )
          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):
              source.data["val"] = [group.active, "b"]
  
          group.on_event("button_click", cb)
          doc.add_root(column(group, plot))
  
      page = bokeh_server_page(modify_doc)
  
      el = find_element_for(page.driver, group, ".bk-btn:nth-child(3)")
      el.click()
  
      page.eval_custom_action()
  
      results = page.results
      assert results["data"]["val"] == [2, "b"]
  
      el = find_element_for(page.driver, group, ".bk-btn:nth-child(1)")
      el.click()
  
      page.eval_custom_action()
  
      results = page.results
      assert results["data"]["val"] == [0, "b"]
  
      assert page.has_no_console_errors()
  
file_path: bokeh/tests/integration/widgets/test_radio_button_group.py
imports: from __future__ import annotations
  import pytest
  from bokeh.layouts import column
  from bokeh.models import ColumnDataSource, CustomJS, Plot, RadioButtonGroup, 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 1 for calling the Test_RadioButtonGroup obj's underlying member method code with example usage: obj.test_server_on_change_round_trip(bokeh_server_page) without return types