code: def test_tdrp004_navigate_selected_cells(test):
      test.start_server(get_app())
  
      target = test.table("table")
  
      target.cell(0, 0).click()
      with test.hold(Keys.SHIFT):
          test.send_keys(
              Keys.DOWN + Keys.DOWN + Keys.RIGHT + Keys.RIGHT
          )
  
      selected = []
      for row in range(3):
          for col in range(3):
              selected.append(
                  dict(
                      row=row,
                      column=col,
                      column_id=rawDf.columns[col],
                      row_id=row + 3000,
                  )
              )
  
      for row in range(3):
          for col in range(3):
              # active = dict(
              #     row=row, column=col, column_id=rawDf.columns[col], row_id=row + 3000
              # )
  
              # assert test.find_element("#active_cell").get_attribute(
              #     "innerHTML"
              # ) == json.dumps(active)
              assert test.find_element("#start_cell").get_attribute(
                  "innerHTML"
              ) == json.dumps(selected[0])
              assert test.find_element("#end_cell").get_attribute(
                  "innerHTML"
              ) == json.dumps(selected[-1])
              assert test.find_element("#selected_cells").get_attribute(
                  "innerHTML"
              ) == json.dumps(selected)
              assert test.find_element("#selected_rows").get_attribute(
                  "innerHTML"
              ) in [
                  "None",
                  json.dumps([]),
              ]
              assert test.find_element(
                  "#selected_row_ids"
              ).get_attribute("innerHTML") in ["None", json.dumps([])]
  
              assert test.find_element(
                  "#derived_viewport_selected_rows"
              ).get_attribute("innerHTML") in ["None", json.dumps([])]
              assert test.find_element(
                  "#derived_viewport_selected_row_ids"
              ).get_attribute("innerHTML") in ["None", json.dumps([])]
              assert test.find_element(
                  "#derived_viewport_indices"
              ).get_attribute("innerHTML") == json.dumps(
                  list(range(10))
              )
              assert test.find_element(
                  "#derived_viewport_row_ids"
              ).get_attribute("innerHTML") == json.dumps(
                  list(range(3000, 3010))
              )
  
              assert test.find_element(
                  "#derived_virtual_selected_rows"
              ).get_attribute("innerHTML") in ["None", json.dumps([])]
              assert test.find_element(
                  "#derived_virtual_selected_row_ids"
              ).get_attribute("innerHTML") in ["None", json.dumps([])]
              assert test.find_element(
                  "#derived_virtual_indices"
              ).get_attribute("innerHTML") == json.dumps(
                  list(range(100))
              )
              assert test.find_element(
                  "#derived_virtual_row_ids"
              ).get_attribute("innerHTML") == json.dumps(
                  list(range(3000, 3100))
              )
  
              test.send_keys(Keys.TAB)
  
      assert test.get_log_errors() == []
  
file_path: dash/components/dash-table/tests/selenium/test_derived_props.py
imports: import dash
  from dash.dependencies import Input, Output
  from dash import html
  from dash.dash_table import DataTable
  from selenium.webdriver.common.keys import Keys
  import json
  import time
  import pandas
label_desc: Use image node_id 5 for calling a global function with example usage: test_tdrp004_navigate_selected_cells(test) without return types