diff --git a/browser/IDriver.py b/browser/IDriver.py index 4eff625..cb8b353 100644 --- a/browser/IDriver.py +++ b/browser/IDriver.py @@ -1,12 +1,32 @@ +import contextlib + + class IDriver(): def new_tab(self) -> str: ... + def get_current_tab(self) -> str: + ... + def change_tab(self, tab_handler: str): ... def open_url(self, url: str, tab_handler: str = ""): ... + @contextlib.contextmanager + def op_tab(self, tab_handler: str): + cur_handle = self.get_current_tab() + if tab_handler == "": + tab_handler = cur_handle + try: + self.change_tab(tab_handler) + yield self + finally: + self.change_tab(cur_handle) + + def refresh(self, tab_handler: str = ""): + ... + def screenshot(self, tab_handler: str = "") -> str: ... diff --git a/browser/chrome.py b/browser/chrome.py index b99ada5..939a3c9 100644 --- a/browser/chrome.py +++ b/browser/chrome.py @@ -45,15 +45,17 @@ class ChromeDriver(IDriver): return self.browser.switch_to.window(tab_handler) + def get_current_tab(self) -> str: + return self.browser.current_window_handle + def open_url(self, url: str, tab_handler: str = ""): - if tab_handler != "": - self.change_tab(tab_handler) - self.browser.get(url) + 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: - cur_handle = self.browser.current_window_handle - if tab_handler != "": - self.change_tab(tab_handler) - b64 = self.browser.get_screenshot_as_base64() - self.change_tab(cur_handle) - return b64 + with self.op_tab(tab_handler): + return self.browser.get_screenshot_as_base64() diff --git a/browser/edge.py b/browser/edge.py index 28648fc..4bb2e5a 100644 --- a/browser/edge.py +++ b/browser/edge.py @@ -38,6 +38,9 @@ class EdgeDriver(IDriver): return _handle return "" + def get_current_tab(self) -> str: + return self.browser.current_window_handle + def change_tab(self, tab_handler: str): if tab_handler not in self.browser.window_handles: return @@ -46,14 +49,13 @@ class EdgeDriver(IDriver): self.browser.switch_to.window(tab_handler) def open_url(self, url: str, tab_handler: str = ""): - if tab_handler != "": - self.change_tab(tab_handler) - self.browser.get(url) + 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: - cur_handle = self.browser.current_window_handle - if tab_handler != "": - self.change_tab(tab_handler) - b64 = self.browser.get_screenshot_as_base64() - self.change_tab(cur_handle) - return b64 + with self.op_tab(tab_handler): + return self.browser.get_screenshot_as_base64()