code: def test_js_on_change_executes(
      self, bokeh_model_page: BokehModelPage
  ) -> None:
      group = CheckboxButtonGroup(labels=LABELS)
      group.js_on_event(
          "button_click",
          CustomJS(code=RECORD("active", "cb_obj.origin.active")),
      )
  
      page = bokeh_model_page(group)
  
      el = find_element_for(page.driver, group, ".bk-btn:nth-child(3)")
      el.click()
  
      results = page.results
      assert results["active"] == [2]
  
      el = find_element_for(page.driver, group, ".bk-btn:nth-child(1)")
      el.click()
  
      results = page.results
      assert results["active"] == [0, 2]
  
      el = find_element_for(page.driver, group, ".bk-btn:nth-child(3)")
      el.click()
  
      results = page.results
      assert results["active"] == [0]
  
      assert page.has_no_console_errors()
  
file_path: bokeh/tests/integration/widgets/test_checkbox_button_group.py
imports: from __future__ import annotations
  import pytest
  from bokeh.layouts import column
  from bokeh.models import CheckboxButtonGroup, ColumnDataSource, CustomJS, 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 2 for calling the Test_CheckboxButtonGroup obj's underlying member method code with example usage: obj.test_js_on_change_executes(bokeh_model_page) without return types