import contextlib import logging from typing import TYPE_CHECKING if TYPE_CHECKING: from selenium.webdriver.remote.webdriver import WebDriver from config import ConfigManager _log = logging.getLogger("IDriver") _log.setLevel(logging.DEBUG) class IDriver(): browser: "WebDriver" _config_manager: "ConfigManager" def __init__(self, config_manager): self._config_manager = config_manager def terminate(self): self.browser.quit() def new_tab(self) -> str: ... def change_tab(self, tab_handler: str): ... def close_tab(self, tab_handler: str): with self.op_tab(tab_handler): self.browser.close() def open_url(self, url: str, tab_handler: str = ""): with self.op_tab(tab_handler): self.browser.get(url) @contextlib.contextmanager def op_tab(self, tab_handler: str): cur_handle = self.browser.current_window_handle _log.debug("切换Tab:旧Tab:%s,新Tab:%s", cur_handle, tab_handler) if tab_handler == "": tab_handler = cur_handle try: self.change_tab(tab_handler) _log.debug("切换至新Tab:%s", tab_handler) yield self finally: self.change_tab(cur_handle) _log.debug("切换至旧Tab:%s", cur_handle) def refresh(self, tab_handler: str = ""): with self.op_tab(tab_handler): self.browser.refresh() def screenshot(self, tab_handler: str = "") -> str: with self.op_tab(tab_handler): return self.browser.get_screenshot_as_base64()