fix(webdriver): address review feedback on cache warmup WebDriver changes

- Fix _auth() to authenticate self._driver in-place instead of creating
  a second, leaked driver (critical bug: persistent driver was never authenticated)
- Replace assert with explicit RuntimeError for driver creation failure
- Fix get_dash_url() to strip trailing slash from WEBDRIVER_BASEURL to
  avoid double-slash URLs (e.g. http://host//superset/dashboard/1/)
- Fix BaseScreenshot.get_screenshot() to call driver.destroy() in a
  try/finally block, preventing Selenium process leaks for one-off screenshots
- Fix webdriver_pool._destroy_driver() to directly call close()/quit()
  on the raw WebDriver since destroy() is now an instance method, not static

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Superset Dev
2026-04-07 14:11:23 -07:00
parent 2ac03e438c
commit 776ab3cb14
4 changed files with 18 additions and 8 deletions

View File

@@ -419,7 +419,8 @@ class WebDriverSelenium(WebDriverProxy):
def driver(self) -> WebDriver:
if not self._driver:
self._driver = self._create()
assert self._driver # for mypy
if not self._driver:
raise RuntimeError("WebDriver creation failed")
self._driver.set_window_size(*self._window)
if self._user:
self._auth(self._user)
@@ -558,10 +559,11 @@ class WebDriverSelenium(WebDriverProxy):
logger.debug("Init selenium driver")
return driver_class(**kwargs)
def _auth(self, user: User) -> WebDriver:
driver = self._create()
return machine_auth_provider_factory.instance.authenticate_webdriver(
driver, user
def _auth(self, user: User) -> None:
"""Authenticate the persistent driver in-place."""
assert self._driver is not None
machine_auth_provider_factory.instance.authenticate_webdriver(
self._driver, user
)
def _destroy(self, tries: int = 2) -> None: