Loading load_check.py +100 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ import threading import time import unittest import random import os from selenium import webdriver from selenium.webdriver.common.by import By Loading Loading @@ -90,6 +91,11 @@ class MultipleTest(unittest.TestCase): self.max_connections = 50 self.ramp_up_time = 30 * 60 print("\n8. [선택] 스크린샷 저장 위치 (기본값: screenshots):") self.screenshot_base_dir = input().strip() or "screenshots" if not os.path.exists(self.screenshot_base_dir): os.makedirs(self.screenshot_base_dir) def setUp(self): self._get_user_inputs() # Initialize a list to hold driver instances for each thread Loading @@ -97,6 +103,21 @@ class MultipleTest(unittest.TestCase): self.verification_errors = [] self.accept_next_alert = True def _take_screenshot(self, driver, action_name): """Saves a screenshot with a unique, descriptive filename.""" try: time.sleep(0.2) session_folder = os.path.join(self.screenshot_base_dir, f"session_{driver.instance_number}") os.makedirs(session_folder, exist_ok=True) counter = getattr(driver, 'screenshot_counter', 0) + 1 setattr(driver, 'screenshot_counter', counter) counter_str = str(counter).zfill(4) filename = os.path.join(session_folder, f"{counter_str}_{action_name}.png") driver.save_screenshot(filename) # print(f"Screenshot saved: {filename}") except Exception as e: print(f"Error saving screenshot for session {driver.instance_number}: {e}") def _interact_with_time_filters(self, driver): """ Automates the interaction with time filter buttons on a webpage using Loading @@ -104,13 +125,19 @@ class MultipleTest(unittest.TestCase): dropdown and options found in sections like 'Performance/Operation' (성능/운영). """ driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div/div[2]/div/span[2]/div/button[2]/span").click() self._take_screenshot(driver, "time_filter_dropdown_click") driver.find_element(By.XPATH, "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 3 시간')]]").click() self._take_screenshot(driver, "3_hours_filter_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div/div[2]/div/span[2]/div/button[2]/span").click() self._take_screenshot(driver, "time_filter_dropdown_reopen") recent_7_days_button_xpath = "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 7 일')]]" driver.find_element(By.XPATH, recent_7_days_button_xpath).click() self._take_screenshot(driver, "7_days_filter_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div/div[2]/div/span[2]/div/button[2]/span").click() self._take_screenshot(driver, "time_filter_dropdown_reopen_2") recent_60_days_button_xpath = "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 60 일')]]" driver.find_element(By.XPATH, recent_60_days_button_xpath).click() self._take_screenshot(driver, "60_days_filter_click") def _interact_with_time_filters_for_la(self, driver): """ Loading @@ -122,6 +149,7 @@ class MultipleTest(unittest.TestCase): dropdown_button = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[@id='page-wrapper']/div/div/div/div/span/div/button[2]/span"))) dropdown_button.click() self._take_screenshot(driver, "la_time_filter_dropdown_click") except TimeoutException: print("Timeout waiting for the dropdown button in _interact_with_time_filters_for_la.") Loading @@ -129,6 +157,7 @@ class MultipleTest(unittest.TestCase): recent_6_hours_button = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 6 시간')]]"))) recent_6_hours_button.click() self._take_screenshot(driver, "la_6_hours_filter_click") except TimeoutException: print("Timeout waiting for '최근 6 시간' button in _interact_with_time_filters_for_la.") Loading @@ -136,6 +165,7 @@ class MultipleTest(unittest.TestCase): dropdown_button_reopen = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[@id='page-wrapper']/div/div/div/div/span/div/button[2]/span"))) dropdown_button_reopen.click() self._take_screenshot(driver, "la_time_filter_dropdown_reopen") except TimeoutException: print("Timeout waiting for the dropdown button to re-open in _interact_with_time_filters_for_la.") Loading @@ -143,6 +173,7 @@ class MultipleTest(unittest.TestCase): try: recent_7_days_button = wait.until(EC.element_to_be_clickable((By.XPATH, recent_7_days_button_xpath))) recent_7_days_button.click() self._take_screenshot(driver, "la_7_days_filter_click") except TimeoutException: print("Timeout waiting for '최근 7 일' button in _interact_with_time_filters_for_la.") Loading @@ -150,6 +181,7 @@ class MultipleTest(unittest.TestCase): dropdown_button_reopen_2 = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[@id='page-wrapper']/div/div/div/div/span/div/button[2]/span"))) dropdown_button_reopen_2.click() self._take_screenshot(driver, "la_time_filter_dropdown_reopen_2") except TimeoutException: print("Timeout waiting for the dropdown button to re-open (second time) in _interact_with_time_filters_for_la.") Loading @@ -157,12 +189,14 @@ class MultipleTest(unittest.TestCase): try: recent_60_days_button = wait.until(EC.element_to_be_clickable((By.XPATH, recent_60_days_button_xpath))) recent_60_days_button.click() self._take_screenshot(driver, "la_60_days_filter_click") except TimeoutException: print("Timeout waiting for '최근 60 일' button in _interact_with_time_filters_for_la.") def _login_action(self, driver, address, user_id, pw, wait): """Performs the login action.""" driver.get(address) self._take_screenshot(driver, "page_load") time.sleep(0.5) wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@type='text']"))).click() Loading @@ -170,109 +204,175 @@ class MultipleTest(unittest.TestCase): driver.find_element(By.XPATH, "//input[@type='text']").send_keys(user_id) driver.find_element(By.XPATH, "//input[@type='password']").clear() driver.find_element(By.XPATH, "//input[@type='password']").send_keys(pw) self._take_screenshot(driver, "credentials_entered") driver.find_element(By.XPATH, "//button[@type='button']").click() self._take_screenshot(driver, "login_button_click") time.sleep(0.5) def _dashboard_actions(self, driver): """Performs actions on the Dashboard.""" driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[1]/a/div").click() self._take_screenshot(driver, "dashboard_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/div/div[2]/div/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_first_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/div/div[2]/div[2]/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_second_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/div/div[2]/div[3]/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_third_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "dashboard_fourth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div[2]/div/div/div/div/div/div[2]/div/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_fifth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div[2]/div/div/div/div/div/div[2]/div[2]/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_sixth_element_click") def _topology_map_actions(self, driver): """Performs actions on the Topology Map.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[2]/a/div").click() self._take_screenshot(driver, "topology_map_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/article/div/div/div/div/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "topology_first_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/article/div/div/div/div/div/div[2]/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "topology_second_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/article/div/div/div/div/div/div[2]/div/div[2]/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "topology_third_element_click") def _performance_operation_actions(self, driver): """Performs actions on Performance/Operation.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[3]/a/div").click() self._take_screenshot(driver, "performance_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "performance_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div/span[2]/span").click() self._take_screenshot(driver, "performance_second_element_click") driver.find_element(By.ID, "tab-performance").click() self._take_screenshot(driver, "performance_tab_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div/div").click() self._take_screenshot(driver, "performance_third_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_fourth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div/div[2]/div/div[2]/div/div/span[2]/span/span/span/span/span[3]").click() self._take_screenshot(driver, "performance_fifth_element_click") analysis_tab = driver.find_element(By.ID, "tab-analysis") # This line is kept because a direct click was not working for the user. # It ensures the 'analysis' tab is clicked successfully. driver.execute_script("arguments[0].click();", analysis_tab) self._take_screenshot(driver, "analysis_tab_click_js") self._interact_with_time_filters(driver) driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[2]/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_sixth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[2]/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_seventh_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[2]/div[2]/div/div[2]/div/div/span[2]/span/span/span/span/span[3]").click() self._take_screenshot(driver, "performance_eighth_element_click") driver.find_element(By.ID, "tab-analysis").click() self._take_screenshot(driver, "analysis_tab_click") self._interact_with_time_filters(driver) driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_ninth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_tenth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div[2]/div/div[2]/div/div/span[2]/span/span/span/span/span[3]").click() self._take_screenshot(driver, "performance_eleventh_element_click") driver.find_element(By.ID, "tab-analysis").click() self._take_screenshot(driver, "analysis_tab_click_2") self._interact_with_time_filters(driver) def _log_analysis_actions(self, driver): """Performs actions on Log Analysis.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[5]/a/div").click() self._take_screenshot(driver, "log_analysis_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/span[2]/span/span").click() self._take_screenshot(driver, "log_analysis_element_click") self._interact_with_time_filters_for_la(driver) def _event_status_actions(self, driver): """Performs actions on Event Status.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[6]/a/div").click() self._take_screenshot(driver, "event_status_menu_click") driver.find_element(By.ID, "tab-event-status").click() self._take_screenshot(driver, "event_status_tab_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "event_status_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "event_status_first_element_click") driver.find_element(By.ID, "tab-event-hist").click() self._take_screenshot(driver, "event_hist_tab_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "event_hist_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "event_hist_first_element_click") self._interact_with_time_filters(driver) def _work_management_actions(self, driver, wait): """Performs actions on Work Management.""" time.sleep(0.5) wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@id='wrapper']/nav/ul/li[7]/a/div"))).click() self._take_screenshot(driver, "work_management_menu_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div[2]/div/div/div/div/div/div/div/label/span").click() self._take_screenshot(driver, "work_management_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div[2]/div/div/div/div/div/div/div/label[2]/span").click() self._take_screenshot(driver, "work_management_second_checkbox_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div[2]/div/div/div/div/div/div/div/label[3]/span").click() self._take_screenshot(driver, "work_management_third_checkbox_click") def _admin_settings_actions(self, driver): """Performs admin-specific settings actions.""" time.sleep(0.5) driver.find_element(By.XPATH, "//*[normalize-space(text()) and normalize-space(.)='초기 설정']/following::span[1]").click() self._take_screenshot(driver, "admin_settings_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/span/a/div").click() self._take_screenshot(driver, "admin_settings_menu_re_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='신규 장비 등록 및 관리 여부 설정이 가능합니다.'])[1]/following::button[1]").click() self._take_screenshot(driver, "admin_settings_first_button_click") time.sleep(0.5) driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='네트워크'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_network_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='서버'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_server_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='시설장비'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_device_click") time.sleep(0.5) driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='초기 설정'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_settings_menu_re_click_2") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize(.)='기준 정보 편집'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_settings_standard_info_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='수집/판단 기준'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_collection_standard_click") def _admin_alarm_settings_actions(self, driver): """Performs admin-specific alarm setting actions.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/span/a/div").click() self._take_screenshot(driver, "admin_alarm_settings_menu_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='초기 설정'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_alarm_settings_menu_re_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='각 자원별 이벤트 메시지와 공통 이벤트 등급을 설정하는 이벤트 부분과 E-Mail, 문자, 팝업 연계설정 및 알람 전송 결과를 확인 할 수 있습니다.'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_alarm_settings_event_setup_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='장비 연관 관계'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_alarm_settings_device_relation_click") driver.find_element(By.ID, "tab-AlarmIndividualSetting").click() self._take_screenshot(driver, "admin_alarm_individual_setting_tab_click") driver.find_element(By.XPATH, "//div[@id='pane-AlarmIndividualSetting']/div/div/div/div/div/div[2]/div[2]/div/div/div/div/div/div[2]/div/div/span[2]/span/span").click() self._take_screenshot(driver, "admin_alarm_first_element_click") driver.find_element(By.XPATH, "//div[@id='pane-AlarmIndividualSetting']/div/div/div/div[3]/div/div[2]/div[2]/label[2]/span").click() self._take_screenshot(driver, "admin_alarm_second_element_click") driver.find_element(By.XPATH, "//div[@id='pane-AlarmIndividualSetting']/div/div/div/div[3]/div/div[2]/div[3]/div[2]/div/div/div/div/div/div/span[2]/span/span").click() self._take_screenshot(driver, "admin_alarm_third_element_click") driver.find_element(By.XPATH, "//div[5]/div/div/div/div/div/div[3]/div/input").click() self._take_screenshot(driver, "admin_alarm_fourth_element_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='장비'])[2]/following::li[1]").click() self._take_screenshot(driver, "admin_alarm_fifth_element_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='자원구분'])[4]/following::div[2]").click() self._take_screenshot(driver, "admin_alarm_sixth_element_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='동작 상태'])[33]/following::li[1]").click() self._take_screenshot(driver, "admin_alarm_seventh_element_click") driver.find_element(By.XPATH, "//div[2]/div/div/button/i").click() self._take_screenshot(driver, "admin_alarm_eighth_element_click") def _execute_single_action_and_measure(self, driver, action_func, action_name, *args, **kwargs): """Executes a single action and measures its duration.""" Loading Loading
load_check.py +100 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ import threading import time import unittest import random import os from selenium import webdriver from selenium.webdriver.common.by import By Loading Loading @@ -90,6 +91,11 @@ class MultipleTest(unittest.TestCase): self.max_connections = 50 self.ramp_up_time = 30 * 60 print("\n8. [선택] 스크린샷 저장 위치 (기본값: screenshots):") self.screenshot_base_dir = input().strip() or "screenshots" if not os.path.exists(self.screenshot_base_dir): os.makedirs(self.screenshot_base_dir) def setUp(self): self._get_user_inputs() # Initialize a list to hold driver instances for each thread Loading @@ -97,6 +103,21 @@ class MultipleTest(unittest.TestCase): self.verification_errors = [] self.accept_next_alert = True def _take_screenshot(self, driver, action_name): """Saves a screenshot with a unique, descriptive filename.""" try: time.sleep(0.2) session_folder = os.path.join(self.screenshot_base_dir, f"session_{driver.instance_number}") os.makedirs(session_folder, exist_ok=True) counter = getattr(driver, 'screenshot_counter', 0) + 1 setattr(driver, 'screenshot_counter', counter) counter_str = str(counter).zfill(4) filename = os.path.join(session_folder, f"{counter_str}_{action_name}.png") driver.save_screenshot(filename) # print(f"Screenshot saved: {filename}") except Exception as e: print(f"Error saving screenshot for session {driver.instance_number}: {e}") def _interact_with_time_filters(self, driver): """ Automates the interaction with time filter buttons on a webpage using Loading @@ -104,13 +125,19 @@ class MultipleTest(unittest.TestCase): dropdown and options found in sections like 'Performance/Operation' (성능/운영). """ driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div/div[2]/div/span[2]/div/button[2]/span").click() self._take_screenshot(driver, "time_filter_dropdown_click") driver.find_element(By.XPATH, "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 3 시간')]]").click() self._take_screenshot(driver, "3_hours_filter_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div/div[2]/div/span[2]/div/button[2]/span").click() self._take_screenshot(driver, "time_filter_dropdown_reopen") recent_7_days_button_xpath = "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 7 일')]]" driver.find_element(By.XPATH, recent_7_days_button_xpath).click() self._take_screenshot(driver, "7_days_filter_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div/div[2]/div/span[2]/div/button[2]/span").click() self._take_screenshot(driver, "time_filter_dropdown_reopen_2") recent_60_days_button_xpath = "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 60 일')]]" driver.find_element(By.XPATH, recent_60_days_button_xpath).click() self._take_screenshot(driver, "60_days_filter_click") def _interact_with_time_filters_for_la(self, driver): """ Loading @@ -122,6 +149,7 @@ class MultipleTest(unittest.TestCase): dropdown_button = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[@id='page-wrapper']/div/div/div/div/span/div/button[2]/span"))) dropdown_button.click() self._take_screenshot(driver, "la_time_filter_dropdown_click") except TimeoutException: print("Timeout waiting for the dropdown button in _interact_with_time_filters_for_la.") Loading @@ -129,6 +157,7 @@ class MultipleTest(unittest.TestCase): recent_6_hours_button = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[contains(@class, 'el-popover')]//button[span[contains(text(), '최근 6 시간')]]"))) recent_6_hours_button.click() self._take_screenshot(driver, "la_6_hours_filter_click") except TimeoutException: print("Timeout waiting for '최근 6 시간' button in _interact_with_time_filters_for_la.") Loading @@ -136,6 +165,7 @@ class MultipleTest(unittest.TestCase): dropdown_button_reopen = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[@id='page-wrapper']/div/div/div/div/span/div/button[2]/span"))) dropdown_button_reopen.click() self._take_screenshot(driver, "la_time_filter_dropdown_reopen") except TimeoutException: print("Timeout waiting for the dropdown button to re-open in _interact_with_time_filters_for_la.") Loading @@ -143,6 +173,7 @@ class MultipleTest(unittest.TestCase): try: recent_7_days_button = wait.until(EC.element_to_be_clickable((By.XPATH, recent_7_days_button_xpath))) recent_7_days_button.click() self._take_screenshot(driver, "la_7_days_filter_click") except TimeoutException: print("Timeout waiting for '최근 7 일' button in _interact_with_time_filters_for_la.") Loading @@ -150,6 +181,7 @@ class MultipleTest(unittest.TestCase): dropdown_button_reopen_2 = wait.until(EC.element_to_be_clickable( (By.XPATH, "//div[@id='page-wrapper']/div/div/div/div/span/div/button[2]/span"))) dropdown_button_reopen_2.click() self._take_screenshot(driver, "la_time_filter_dropdown_reopen_2") except TimeoutException: print("Timeout waiting for the dropdown button to re-open (second time) in _interact_with_time_filters_for_la.") Loading @@ -157,12 +189,14 @@ class MultipleTest(unittest.TestCase): try: recent_60_days_button = wait.until(EC.element_to_be_clickable((By.XPATH, recent_60_days_button_xpath))) recent_60_days_button.click() self._take_screenshot(driver, "la_60_days_filter_click") except TimeoutException: print("Timeout waiting for '최근 60 일' button in _interact_with_time_filters_for_la.") def _login_action(self, driver, address, user_id, pw, wait): """Performs the login action.""" driver.get(address) self._take_screenshot(driver, "page_load") time.sleep(0.5) wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@type='text']"))).click() Loading @@ -170,109 +204,175 @@ class MultipleTest(unittest.TestCase): driver.find_element(By.XPATH, "//input[@type='text']").send_keys(user_id) driver.find_element(By.XPATH, "//input[@type='password']").clear() driver.find_element(By.XPATH, "//input[@type='password']").send_keys(pw) self._take_screenshot(driver, "credentials_entered") driver.find_element(By.XPATH, "//button[@type='button']").click() self._take_screenshot(driver, "login_button_click") time.sleep(0.5) def _dashboard_actions(self, driver): """Performs actions on the Dashboard.""" driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[1]/a/div").click() self._take_screenshot(driver, "dashboard_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/div/div[2]/div/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_first_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/div/div[2]/div[2]/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_second_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/div/div[2]/div[3]/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_third_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "dashboard_fourth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div[2]/div/div/div/div/div/div[2]/div/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_fifth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div[2]/div/div/div/div/div/div[2]/div[2]/div/span[2]/span/span").click() self._take_screenshot(driver, "dashboard_sixth_element_click") def _topology_map_actions(self, driver): """Performs actions on the Topology Map.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[2]/a/div").click() self._take_screenshot(driver, "topology_map_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/article/div/div/div/div/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "topology_first_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/article/div/div/div/div/div/div[2]/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "topology_second_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/article/div/div/div/div/div/div[2]/div/div[2]/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "topology_third_element_click") def _performance_operation_actions(self, driver): """Performs actions on Performance/Operation.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[3]/a/div").click() self._take_screenshot(driver, "performance_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "performance_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div/span[2]/span").click() self._take_screenshot(driver, "performance_second_element_click") driver.find_element(By.ID, "tab-performance").click() self._take_screenshot(driver, "performance_tab_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div/div").click() self._take_screenshot(driver, "performance_third_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_fourth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div/div[2]/div/div[2]/div/div/span[2]/span/span/span/span/span[3]").click() self._take_screenshot(driver, "performance_fifth_element_click") analysis_tab = driver.find_element(By.ID, "tab-analysis") # This line is kept because a direct click was not working for the user. # It ensures the 'analysis' tab is clicked successfully. driver.execute_script("arguments[0].click();", analysis_tab) self._take_screenshot(driver, "analysis_tab_click_js") self._interact_with_time_filters(driver) driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[2]/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_sixth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[2]/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_seventh_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[2]/div[2]/div/div[2]/div/div/span[2]/span/span/span/span/span[3]").click() self._take_screenshot(driver, "performance_eighth_element_click") driver.find_element(By.ID, "tab-analysis").click() self._take_screenshot(driver, "analysis_tab_click") self._interact_with_time_filters(driver) driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_ninth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div[2]/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "performance_tenth_element_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div[2]/div/div[2]/div/div/span[2]/span/span/span/span/span[3]").click() self._take_screenshot(driver, "performance_eleventh_element_click") driver.find_element(By.ID, "tab-analysis").click() self._take_screenshot(driver, "analysis_tab_click_2") self._interact_with_time_filters(driver) def _log_analysis_actions(self, driver): """Performs actions on Log Analysis.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[5]/a/div").click() self._take_screenshot(driver, "log_analysis_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div/div/article/div/div/div/div/div/div/span[2]/span/span").click() self._take_screenshot(driver, "log_analysis_element_click") self._interact_with_time_filters_for_la(driver) def _event_status_actions(self, driver): """Performs actions on Event Status.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/ul/li[6]/a/div").click() self._take_screenshot(driver, "event_status_menu_click") driver.find_element(By.ID, "tab-event-status").click() self._take_screenshot(driver, "event_status_tab_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "event_status_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "event_status_first_element_click") driver.find_element(By.ID, "tab-event-hist").click() self._take_screenshot(driver, "event_hist_tab_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[2]/label[2]/span/span").click() self._take_screenshot(driver, "event_hist_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/div/div/aside/div/div/div[3]/div[2]/div/div/div/div/div/div/span[2]/span/span[2]").click() self._take_screenshot(driver, "event_hist_first_element_click") self._interact_with_time_filters(driver) def _work_management_actions(self, driver, wait): """Performs actions on Work Management.""" time.sleep(0.5) wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@id='wrapper']/nav/ul/li[7]/a/div"))).click() self._take_screenshot(driver, "work_management_menu_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div[2]/div/div/div/div/div/div/div/label/span").click() self._take_screenshot(driver, "work_management_first_checkbox_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div[2]/div/div/div/div/div/div/div/label[2]/span").click() self._take_screenshot(driver, "work_management_second_checkbox_click") driver.find_element(By.XPATH, "//div[@id='page-wrapper']/div/div[2]/div/div/div/div/div/div/div/label[3]/span").click() self._take_screenshot(driver, "work_management_third_checkbox_click") def _admin_settings_actions(self, driver): """Performs admin-specific settings actions.""" time.sleep(0.5) driver.find_element(By.XPATH, "//*[normalize-space(text()) and normalize-space(.)='초기 설정']/following::span[1]").click() self._take_screenshot(driver, "admin_settings_menu_click") driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/span/a/div").click() self._take_screenshot(driver, "admin_settings_menu_re_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='신규 장비 등록 및 관리 여부 설정이 가능합니다.'])[1]/following::button[1]").click() self._take_screenshot(driver, "admin_settings_first_button_click") time.sleep(0.5) driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='네트워크'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_network_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='서버'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_server_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='시설장비'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_device_click") time.sleep(0.5) driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='초기 설정'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_settings_menu_re_click_2") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize(.)='기준 정보 편집'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_settings_standard_info_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='수집/판단 기준'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_settings_collection_standard_click") def _admin_alarm_settings_actions(self, driver): """Performs admin-specific alarm setting actions.""" time.sleep(0.5) driver.find_element(By.XPATH, "//div[@id='wrapper']/nav/span/a/div").click() self._take_screenshot(driver, "admin_alarm_settings_menu_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='초기 설정'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_alarm_settings_menu_re_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='각 자원별 이벤트 메시지와 공통 이벤트 등급을 설정하는 이벤트 부분과 E-Mail, 문자, 팝업 연계설정 및 알람 전송 결과를 확인 할 수 있습니다.'])[1]/following::span[1]").click() self._take_screenshot(driver, "admin_alarm_settings_event_setup_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='장비 연관 관계'])[1]/following::li[1]").click() self._take_screenshot(driver, "admin_alarm_settings_device_relation_click") driver.find_element(By.ID, "tab-AlarmIndividualSetting").click() self._take_screenshot(driver, "admin_alarm_individual_setting_tab_click") driver.find_element(By.XPATH, "//div[@id='pane-AlarmIndividualSetting']/div/div/div/div/div/div[2]/div[2]/div/div/div/div/div/div[2]/div/div/span[2]/span/span").click() self._take_screenshot(driver, "admin_alarm_first_element_click") driver.find_element(By.XPATH, "//div[@id='pane-AlarmIndividualSetting']/div/div/div/div[3]/div/div[2]/div[2]/label[2]/span").click() self._take_screenshot(driver, "admin_alarm_second_element_click") driver.find_element(By.XPATH, "//div[@id='pane-AlarmIndividualSetting']/div/div/div/div[3]/div/div[2]/div[3]/div[2]/div/div/div/div/div/div/span[2]/span/span").click() self._take_screenshot(driver, "admin_alarm_third_element_click") driver.find_element(By.XPATH, "//div[5]/div/div/div/div/div/div[3]/div/input").click() self._take_screenshot(driver, "admin_alarm_fourth_element_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='장비'])[2]/following::li[1]").click() self._take_screenshot(driver, "admin_alarm_fifth_element_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='자원구분'])[4]/following::div[2]").click() self._take_screenshot(driver, "admin_alarm_sixth_element_click") driver.find_element(By.XPATH, "(.//*[normalize-space(text()) and normalize-space(.)='동작 상태'])[33]/following::li[1]").click() self._take_screenshot(driver, "admin_alarm_seventh_element_click") driver.find_element(By.XPATH, "//div[2]/div/div/button/i").click() self._take_screenshot(driver, "admin_alarm_eighth_element_click") def _execute_single_action_and_measure(self, driver, action_func, action_name, *args, **kwargs): """Executes a single action and measures its duration.""" Loading