code: def __init__(
      self,
      model: LayoutDOM,
      driver: WebDriver,
      output_file_url: str,
      has_no_console_errors: HasNoConsoleErrors,
  ) -> None:
      self._driver = driver
      self._model = model
      self._has_no_console_errors = has_no_console_errors
  
      save(self._model)
      self._driver.get(output_file_url)
      self.init_results()
  
      await_ready(driver, model)
  
imports: from __future__ import annotations
  import logging
  import socket
  import time
  from contextlib import closing
  from threading import Thread
  from typing import TYPE_CHECKING, Any, Callable, Protocol
  import pytest
  from selenium.webdriver.common.action_chains import ActionChains
  from selenium.webdriver.support import expected_conditions
  from selenium.webdriver.support.wait import WebDriverWait
  from tornado.ioloop import IOLoop
  from tornado.web import RequestHandler
  import bokeh.server.views.ws
  from bokeh.application.handlers.function import ModifyDoc
  from bokeh.io import save
  from bokeh.models import LayoutDOM, Plot
  from bokeh.server.server import Server
  from tests.support.util.selenium import INIT, RESULTS, find_matching_element, get_events_el
label_desc: Use image node_id 1 to create a new _BokehModelPage object from inherited base classes: _BokehPageMixin with example: obj = _BokehModelPage(model, driver, output_file_url, has_no_console_errors)