async def METHOD_NAME(self) -> dict:
    """Listen for mutation events and emit them as they are found.
    :Usage:
         ::
           async with driver.log.mutation_events() as event:
                pages.load("dynamic.html")
                driver.find_element(By.ID, "reveal").click()
                WebDriverWait(driver, 5)\
                    .until(EC.visibility_of(driver.find_element(By.ID, "revealed")))
            assert event["attribute_name"] == "style"
            assert event["current_value"] == ""
            assert event["old_value"] == "display:none;"
    """
    page = self.cdp.get_session_context("page.enable")
    await page.execute(self.devtools.page.enable())
    runtime = self.cdp.get_session_context("runtime.enable")
    await runtime.execute(self.devtools.runtime.enable())
    await runtime.execute(self.devtools.runtime.add_binding("__webdriver_attribute"))
    self.driver.pin_script(self._mutation_listener_js)
    script_key = await page.execute(
        self.devtools.page.add_script_to_evaluate_on_new_document(self._mutation_listener_js)
    )
    self.driver.pin_script(self._mutation_listener_js, script_key)
    self.driver.execute_script(f"return {self._mutation_listener_js}")
    event = {}
    async with runtime.wait_for(self.devtools.runtime.BindingCalled) as evnt:
        yield event
    payload = json.loads(evnt.value.payload)
    elements: list = self.driver.find_elements(By.CSS_SELECTOR, f"*[data-__webdriver_id={payload['target']}]")
    if not elements:
        elements.append(None)
    event["element"] = elements[0]
    event["attribute_name"] = payload["name"]
    event["current_value"] = payload["value"]
    event["old_value"] = payload["oldValue"]