From f66cf7aeac35273aa535da6ff207a9cddc441e81 Mon Sep 17 00:00:00 2001 From: kinoshitakenta Date: Thu, 30 May 2024 15:36:23 +0800 Subject: [PATCH] feature: log in again after timeout, can handle the correct window --- utils/EIP_action.py | 3 ++- utils/utils.py | 29 +++++++++++++++++++++++------ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/utils/EIP_action.py b/utils/EIP_action.py index c53fb3d..77f321a 100644 --- a/utils/EIP_action.py +++ b/utils/EIP_action.py @@ -50,9 +50,10 @@ class Action(): # time.sleep(0.05) # dropdown_element = self.driver.find_element(By.ID, "CopyOfComboBox") - # # * 因沒有更換值,所以無法收回選單 + # # * 基於UI本身的邏輯,因下拉式選單沒有更換值,所以無法收回選單 # # // select = Select(dropdown_element) # # // select.select_by_value("1_0") # 考勤管理作業 + # # * 以下列方式替代 # dropdown_element.find_element( # By.XPATH, ".//option[@value='1_0']").click() # 考勤管理作業 diff --git a/utils/utils.py b/utils/utils.py index 3907e7f..1c4ce29 100644 --- a/utils/utils.py +++ b/utils/utils.py @@ -66,12 +66,29 @@ def keep_login_status(driver: webdriver.Chrome, login_info: LoginInfo): time.sleep(3) # * If login has pop a new window, switch main window to the new one. - for handle in driver.window_handles: - if handle != top_page: - new_page = handle + login_page_handle = "" + main_page_handle = "" - driver.switch_to.window(top_page) + for handle in driver.window_handles: + driver.switch_to.window(handle) + if "CHI MotorWeb - " in driver.title: + main_page_handle = handle + elif "CHI MOTOR WEB ERP 登入" in driver.title: + login_page_handle = handle + + # * get the page handle that should be stay + if main_page_handle: + stay_page_handle = main_page_handle + elif login_page_handle: + stay_page_handle = login_page_handle + else: + stay_page_handle = top_page + + # * close unnecessary pages + for handle in driver.window_handles: + if handle != stay_page_handle: + driver.switch_to.window(handle) driver.close() - driver.switch_to.window(new_page) - driver.maximize_window() + driver.switch_to.window(stay_page_handle) + driver.maximize_window()