通用方法不下放,提取部分方法

This commit is contained in:
Jerry Yan 2022-07-15 16:00:10 +08:00
parent 134cf0186a
commit d0e067ae44
3 changed files with 39 additions and 22 deletions

View File

@ -27,10 +27,12 @@ class IDriver():
... ...
def close_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 = ""): def open_url(self, url: str, tab_handler: str = ""):
... with self.op_tab(tab_handler):
self.browser.get(url)
@contextlib.contextmanager @contextlib.contextmanager
def op_tab(self, tab_handler: str): def op_tab(self, tab_handler: str):
@ -47,7 +49,9 @@ class IDriver():
_log.debug("切换至旧Tab%s", cur_handle) _log.debug("切换至旧Tab%s", cur_handle)
def refresh(self, tab_handler: str = ""): def refresh(self, tab_handler: str = ""):
... with self.op_tab(tab_handler):
self.browser.refresh()
def screenshot(self, tab_handler: str = "") -> str: def screenshot(self, tab_handler: str = "") -> str:
... with self.op_tab(tab_handler):
return self.browser.get_screenshot_as_base64()

View File

@ -52,19 +52,3 @@ class ChromeDriver(IDriver):
if tab_handler not in self.browser.window_handles: if tab_handler not in self.browser.window_handles:
return return
self.browser.switch_to.window(tab_handler) self.browser.switch_to.window(tab_handler)
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)
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()

View File

@ -5,7 +5,7 @@ from browser.chrome import ChromeDriver
from common import Singleton from common import Singleton
if TYPE_CHECKING: if TYPE_CHECKING:
from typing import Type, List from typing import Type, List, Optional
from browser.IDriver import IDriver from browser.IDriver import IDriver
from config import ConfigManager from config import ConfigManager
from common.items import TabInfo from common.items import TabInfo
@ -29,6 +29,14 @@ class BrowserManager(metaclass=Singleton):
self._tabs: "List[TabInfo]" = [] self._tabs: "List[TabInfo]" = []
_log.debug("初始化完毕") _log.debug("初始化完毕")
def _check_tab_valid(self, tab_info: "TabInfo") -> "bool":
if tab_info not in self._tabs:
for _tab in self._tabs:
if _tab.tab_handler == tab_info.tab_handler:
return True
return False
return True
@property @property
def driver(self): def driver(self):
return self._driver return self._driver
@ -46,7 +54,7 @@ class BrowserManager(metaclass=Singleton):
self._tabs.append(tab_info) self._tabs.append(tab_info)
def close_tab(self, tab_info: "TabInfo"): def close_tab(self, tab_info: "TabInfo"):
if tab_info not in self._tabs: if self._check_tab_valid(tab_info):
_log.warning("提供的标签不在标签组中,不予执行") _log.warning("提供的标签不在标签组中,不予执行")
return return
_log.debug("关闭标签:%s", tab_info.tab_handler) _log.debug("关闭标签:%s", tab_info.tab_handler)
@ -54,6 +62,27 @@ class BrowserManager(metaclass=Singleton):
_log.info("关闭标签完毕:%s", tab_info.tab_handler) _log.info("关闭标签完毕:%s", tab_info.tab_handler)
self._tabs.remove(tab_info) self._tabs.remove(tab_info)
def refresh_tab(self, tab_info: "TabInfo"):
if self._check_tab_valid(tab_info):
_log.warning("提供的标签不在标签组中,不予执行")
return
_log.debug("刷新标签:%s", tab_info.tab_handler)
self._driver.refresh(tab_info.tab_handler)
def terminate(self): def terminate(self):
if self._driver: if self._driver:
self._driver.terminate() self._driver.terminate()
def find_tab_handler_by_url(self, url: str) -> "Optional[str]":
for tab_info in self._tabs:
if url == tab_info.url:
return tab_info.tab_handler
def create_or_refresh(self, tab_info: "TabInfo") -> "str":
handler = self.find_tab_handler_by_url(tab_info.url)
if handler is not None:
tab_info.tab_handler = handler
self.refresh_tab(tab_info)
else:
self.open_tab(tab_info)
return tab_info.tab_handler