diff options
| author | auto_kg <[email protected]> | 2024-11-22 19:15:29 +0800 |
|---|---|---|
| committer | auto_kg <[email protected]> | 2024-11-22 19:15:29 +0800 |
| commit | 005b48cd72629ea5e54ce1ae1270084e74a6d61c (patch) | |
| tree | 2e7e7838c2c13edd110f2fdaa47543af723d5999 | |
| parent | 1302542a97eaec10e5b69d58e9d3bc4be6967c8b (diff) | |
hijack、tcp option 适配修改
| -rw-r--r-- | cases/profiles/test_traffic_mirroring_profiles.py | 10 | ||||
| -rw-r--r-- | common/ui_common/profiles/dns_records.py | 61 | ||||
| -rw-r--r-- | common/ui_common/profiles/hijack_files.py | 287 | ||||
| -rw-r--r-- | common/ui_common/profiles/tcp_proxy_profiles.py | 712 |
4 files changed, 643 insertions, 427 deletions
diff --git a/cases/profiles/test_traffic_mirroring_profiles.py b/cases/profiles/test_traffic_mirroring_profiles.py index b57536d8..900b7805 100644 --- a/cases/profiles/test_traffic_mirroring_profiles.py +++ b/cases/profiles/test_traffic_mirroring_profiles.py @@ -43,13 +43,13 @@ class TestTrafficMirroringProfiles: trafficMirroringProfiles_name = trafficMirroringProfiles.create(data) time.sleep(3) trafficMirroringProfiles.query(data, require_assertion=1, Name=trafficMirroringProfiles_name) - trafficMirroringProfiles.audit_log("Create") - trafficMirroringProfiles_dict = trafficMirroringProfiles.query(data, require_assertion=1, Name=trafficMirroringProfiles_name) + # trafficMirroringProfiles.audit_log("Create") + # trafficMirroringProfiles_dict = trafficMirroringProfiles.query(data, require_assertion=1, Name=trafficMirroringProfiles_name) trafficMirroringProfiles.modify(data) time.sleep(3) - trafficMirroringProfiles_dict2 = trafficMirroringProfiles.query(data, require_assertion=2, ID=trafficMirroringProfiles_dict["ID"]) - trafficMirroringProfiles.audit_log("Edit") - trafficMirroringProfiles.query(data, require_assertion=2, ID=trafficMirroringProfiles_dict["ID"]) + trafficMirroringProfiles_dict2 = trafficMirroringProfiles.query(data, require_assertion=2, Name=trafficMirroringProfiles_name) + # trafficMirroringProfiles.audit_log("Edit") + # trafficMirroringProfiles.query(data, require_assertion=2, Name=trafficMirroringProfiles_name) # print(trafficMirroringProfiles_id, trafficMirroringProfiles_name) trafficMirroringProfiles.delete() diff --git a/common/ui_common/profiles/dns_records.py b/common/ui_common/profiles/dns_records.py index 12fc328e..199613f3 100644 --- a/common/ui_common/profiles/dns_records.py +++ b/common/ui_common/profiles/dns_records.py @@ -420,7 +420,9 @@ class DnsRecords: self.driver.find_element(By.XPATH, dns_records_profile_page_input_name_posxpath).send_keys(new_Name) self.random_name = self.random_name+new_Name #修改description内容 - self.driver.find_element(By.XPATH, dns_records_profile_page_text_area_description_posxpath).clear() + element = self.driver.find_element(By.XPATH, dns_records_profile_page_text_area_description_posxpath) + element.send_keys(Keys.CONTROL, "a") + element.send_keys(Keys.DELETE) self.driver.find_element(By.XPATH, dns_records_profile_page_text_area_description_posxpath).send_keys(data["description"].split("->")[-1]) self.driver.find_element(By.XPATH, dns_records_profile_page_button_ok_posxpath).click() # if self.driver.find_element(By.CSS_SELECTOR, dnsRecordsProfilePage_button_warningSaveYes_posCss).is_displayed(): @@ -734,16 +736,16 @@ class DnsRecords: self.first_row_checkBox_element.click() # 调用公共的link创建逻辑 Des_ID_list, Request_ID, Sou_ID_list = self.profiles_po.linkdata(link_list_dict, - listPage_profile_dnsRecords_linkButton_posId, + listpage_profile_dns_records_link_button_posxpath, listPage_linkTips_dnsRecords_button_save_posXpath, listPage_linkTips_dnsRecords_button_add_posXpath, listPage_linkTips_dnsRecords_button_OK_posXpath) try: - self._search(data, require_assertion=1, ID=search_dict["ID"]) + self._search(data, require_assertion=1, Name=search_dict["Name"]) # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_dnsRecords_editButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_dns_records_edit_button_posxpath).click() self.driver.refresh() # save data src_val_dict = self._get_value_dict(data) @@ -760,7 +762,7 @@ class DnsRecords: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_dnsRecords_editButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_dns_records_edit_button_posxpath).click() time.sleep(2) self.driver.refresh() des_val_dict = self._get_value_dict(data) @@ -770,13 +772,13 @@ class DnsRecords: # 跳转到源 cluster self.profiles_po.change_sou_vsys() # update data - self._search(data, require_assertion=1, ID=search_dict["ID"]) + self._search(data, require_assertion=1, Name=search_dict["Name"]) self._modify(data) - self._search(data, require_assertion=0, ID=search_dict["ID"]) + self._search(data, require_assertion=0, Name=search_dict["Name"]) # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_dnsRecords_editButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_dns_records_edit_button_posxpath).click() self.driver.refresh() # save data sou_value_dict = self._get_value_dict(data) @@ -797,7 +799,6 @@ class DnsRecords: self._just_goto_dns_record_page() self._delete_des(Des_ID_list, data) # 删除数据 time.sleep(3) - # 删除policy links记录 self.profiles_po._del_policy_links(Request_ID) # 删除源vsys数据 @@ -858,7 +859,7 @@ class DnsRecords: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_dnsRecords_editButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_dns_records_edit_button_posxpath).click() self.driver.refresh() des_val_dict_two = self._get_value_dict(data) print("des_val_dict_two ===========", des_val_dict_two) @@ -875,43 +876,27 @@ class DnsRecords: profile_public = ProfilesPublicOperations(self.driver) profile_public.change_vsys(vsys_name="UIAutoTestVsys") self._just_goto_dns_record_page() - self._delete_source(Sou_ID_list, data) # 删除数据 + self._delete_data(Sou_ID_list, data) # 删除数据 - def _delete_des(self, Des_ID_list, data): - self.driver.find_element(By.ID, 'select-label').click() - self.driver.find_element(By.XPATH, - "//li[starts-with(@id, '1-_FilteredSearch_ElRow_')]//span[normalize-space(text())='ID']").click() - self.driver.find_element(By.XPATH, - '//input[contains(@placeholder, "Support")]').send_keys(Des_ID_list[0]) - self.driver.find_element(By.ID, mainPage_profileSearch_buttonSearch_posId).click() + def _delete_data(self, Des_ID_list, data): + self.driver.find_element(By.XPATH, mainpage_profile_search_select_label_posxpath).send_keys(Des_ID_list[0]) + self.driver.find_element(By.XPATH, listpage_profile_search_dns_records_drop_down_item_posxpath.format( + replace_name='UUID')).click() + self.driver.find_element(By.XPATH, mainpage_profile_search_button_search_posxpath).click() time.sleep(1) self.driver.find_element(By.XPATH, - "//div[@class='el-checkbox-group']//span[@class='el-checkbox__input']/span[@class='el-checkbox__inner']").click() + listpage_profile_dns_records_del_button_posxpath).click() # 确认删除 - self.driver.find_element(By.XPATH, - "//p[normalize-space(text())='Delete']").click() - self.driver.find_element(By.CSS_SELECTOR, - listPage_dialogTips_dnsRecords_button_yes_posCss).click() + self.driver.find_element(By.XPATH, listpage_dialogtips_dns_records_button_yes_posxpath).click() + # self.driver.find_element(By.CSS_SELECTOR, listPage_dialogTips_responsePages_button_yes_posCss).click() - def _delete_source(self, Sou_ID_list, data): - self.driver.find_element(By.ID, 'select-label').click() - self.driver.find_element(By.XPATH, - "//li[starts-with(@id, '1-_FilteredSearch_ElRow_')]//span[normalize-space(text())='ID']").click() - self.driver.find_element(By.XPATH, '//input[contains(@placeholder, "Support")]').send_keys(Sou_ID_list[0]) - self.driver.find_element(By.ID, mainPage_profileSearch_buttonSearch_posId).click() - time.sleep(1) - self.driver.find_element(By.XPATH, - "//div[@class='el-checkbox-group']//span[@class='el-checkbox__input']/span[@class='el-checkbox__inner']").click() - # 确认删除 - self.driver.find_element(By.XPATH, "//p[normalize-space(text())='Delete']").click() - self.driver.find_element(By.CSS_SELECTOR, listPage_dialogTips_dnsRecords_button_yes_posCss).click() @screenshot_on_failure def _just_goto_dns_record_page(self, vsys_name_2=""): # 菜单操作,定位到ssl_decryption_keyrings列表页 - # self.driver.find_element(By.CSS_SELECTOR, mainPage_navigationBar_logo_posCss).click() - self.driver.find_element(By.ID, mainPage_firstLevelMenu_profiles_posId).click() - element = self.driver.find_element(By.ID, mainPage_secondLevelMenu_dnsRecords_posId) + self.driver.find_element(By.XPATH, mainpage_navigation_bar_logo_posxpath).click() + self.driver.find_element(By.XPATH, mainpage_first_level_menu_profiles_posxpath).click() + element = self.driver.find_element(By.XPATH, mainpage_second_level_menu_dns_records_posxpath) self.driver.execute_script("arguments[0].click()", element) # 强制点击 @screenshot_on_failure diff --git a/common/ui_common/profiles/hijack_files.py b/common/ui_common/profiles/hijack_files.py index c93129d7..172c1458 100644 --- a/common/ui_common/profiles/hijack_files.py +++ b/common/ui_common/profiles/hijack_files.py @@ -1,5 +1,6 @@ # -*- coding: UTF-8 -*- import time +import datetime from selenium.common.exceptions import NoSuchElementException from common.driver_common.mywebdriver import MyWebDriver from selenium.webdriver.common.by import By @@ -26,6 +27,7 @@ class HijackFiles: self.driver = demo_fixture # 调用profiles公共方法操作、删除、查询, self.profiles_po = ProfilesPublicOperations(self.driver) + self.config_parser = configparser.ConfigParser() try: if self.driver.element_isExist(By.XPATH, '//*[@class="iconfont icon-Delete_X"]'): element = self.driver.find_element(By.XPATH, '//*[@class="iconfont icon-Delete_X"]') @@ -33,28 +35,29 @@ class HijackFiles: except NoSuchElementException: pass - def hijackFiles_case(self, data: {}): + def hijack_files_case(self, data: {}): self._create(data) #创建 time.sleep(3) self._query(data, require_assertion=1, Name=self.random_name) #创建后查询 if data["model"].strip().lower() == "modify": #修改测试时,执行修改方法 self._modify(data) time.sleep(2) - self._query(data, require_assertion=2, ID=self.first_row_ID_content) + self._query(data, require_assertion=2, Name=self.random_name) self._del() @screenshot_on_failure def _goto_subProfilePage(self, vsys_name_2=""): # 菜单操作,定位到ssl_decryption_keyrings列表页 - # self.driver.find_element(By.CSS_SELECTOR, mainPage_navigationBar_logo_posCss).click() + self.driver.find_element(By.XPATH, mainpage_navigation_bar_logo_posxpath).click() self.profiles_po.change_vsys(vsys_name=vsys_name_2) - self.driver.find_element(By.ID, mainPage_firstLevelMenu_profiles_posId).click() - self.driver.find_element(By.ID, mainPage_secondLevelMenu_hijackFiles_posId).click() + self.driver.find_element(By.XPATH, mainpage_first_level_menu_profiles_posxpath).click() + element = self.driver.find_element(By.XPATH, mainpage_second_level_menu_hijack_files_posxpath) + self.driver.execute_script("arguments[0].click()", element) @screenshot_on_failure def _just_goto_hijack_page(self, vsys_name_2=""): # 菜单操作,定位到ssl_decryption_keyrings列表页 - # self.driver.find_element(By.CSS_SELECTOR, mainPage_navigationBar_logo_posCss).click() + # self.driver.find_element(By.CSS_SELECTOR, mainpage_navigation_bar_logo_posxpath).click() self.driver.find_element(By.ID, mainPage_firstLevelMenu_profiles_posId).click() self.driver.find_element(By.ID, mainPage_secondLevelMenu_hijackFiles_posId).click() @@ -68,20 +71,20 @@ class HijackFiles: self._goto_subProfilePage() #创建 #点击create - self.driver.find_element(By.ID, listPage_profile_hijackFiles_createButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_hijack_files_create_button_posxpath).click() #在打开页面操作:输入name # Name if source_name: self.random_name = source_name[0] - self.driver.find_element(By.ID, hijackFiles_input_Name_posId).send_keys(self.random_name) + self.driver.find_element(By.XPATH, hijack_files_input_name_posxpath).send_keys(self.random_name) else: self.random_name = self.my_random.random_name() - self.driver.find_element(By.ID, hijackFiles_input_Name_posId).send_keys(self.random_name) + self.driver.find_element(By.XPATH, hijack_files_input_name_posxpath).send_keys(self.random_name) self.driver.find_element(By.XPATH, "//label[text()='Name']").click() #页面其它选项操作 self._operate_page(data, operation_type="create") #点击OK - self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_oK_posCss).click() + self.driver.find_element(By.XPATH, hijack_files_button_ok_posxpath).click() if len(self.random_name) < 4: # name不符合要求 if self.driver.element_isExist(By.XPATH, "//label[text()='Name']/parent::div//div[@class='el-form-item__error']"): @@ -93,7 +96,7 @@ class HijackFiles: else: print("name less than 4,no error message") # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_cancel_posCss).click() + self.driver.find_element(By.CSS_SELECTOR, hijack_files_button_cancel_posxpath).click() if self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).is_displayed(): self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).click() elif data["file"].split("->")[0].strip() == "" or "Exceed20MFile" in data["file"].split("->")[0].strip(): #未上传文件/超过20M @@ -103,7 +106,7 @@ class HijackFiles: pytest_check.equal(self.exceed20M, "File size upload limit is 20MB", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_cancel_posCss).click() + self.driver.find_element(By.CSS_SELECTOR, hijack_files_button_cancel_posxpath).click() if self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).is_displayed(): self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).click() elif data["file_type"].split("->")[0].strip() == "": #未选择文件类型 @@ -111,7 +114,7 @@ class HijackFiles: pytest_check.equal(error_content, "Please enter the content", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_cancel_posCss).click() + self.driver.find_element(By.CSS_SELECTOR, hijack_files_button_cancel_posxpath).click() if self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).is_displayed(): self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).click() elif self.driver.element_isExist(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss): @@ -121,7 +124,7 @@ class HijackFiles: pytest_check.equal(error_content, "Download Name should contain 1 to 128 characters.", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_cancel_posCss).click() + self.driver.find_element(By.CSS_SELECTOR, hijack_files_button_cancel_posxpath).click() if self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).is_displayed(): self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).click() elif data["file"].split("->")[0].split(".")[-1] not in data["file_type"].split("->")[0]: # file和file_type不匹配 @@ -129,8 +132,9 @@ class HijackFiles: print(data["file"].split("->")[0].split(".")[-1]) print(data["file_type"].split("->")[0]) info_except = "INVALID REQUEST:Type and File are not matched." - error_content = self.driver.find_element(By.XPATH, "//p[@class='el-message__content']").text.strip() - pytest_check.equal(info_except, error_content, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + if self.driver.isElementExist("//p[@class='el-message__content']"): + error_content = self.driver.find_element(By.XPATH, "//p[@class='el-message__content']").text.strip() + pytest_check.equal(info_except, error_content, msg="所在行数{}".format(inspect.currentframe().f_lineno)) return 999 return self.random_name @@ -155,23 +159,23 @@ class HijackFiles: if file != "": file_abspath = self._abs_path(file) #上传文件 - self.driver.find_element(By.XPATH, hijackFiles_input_fileUpLoad_posXpath).send_keys(file_abspath) + self.driver.find_element(By.XPATH, hijack_files_input_file_upload_posxpath).send_keys(file_abspath) #判断文件大小是否超出20M if file == "exceed20mfile.html": self.exceed20M = self.driver.find_element(By.XPATH, "//p[@class='el-message__content']").text.strip() pytest_check.equal(self.exceed20M, "File size upload limit is 20MB", msg="所在行数{}".format(inspect.currentframe().f_lineno)) #download name 下载文件名称操作 - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="download_name", element_position=hijackFiles_switch_downLoadName_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="download_name", element_position=hijack_files_switch_download_name_posxpath) #file type 文件类型操作 file_type = self._get_value_from_data(data, key="file_type", data_index=data_index) if file_type != no_modify and file_type: #修改时不用修改数据直接跳过 #点击type添加按钮 - self.driver.find_element(By.XPATH, hijackFiles_button_fileType_posXpath).click() + self.driver.find_element(By.XPATH, hijack_files_button_file_type_posxpath).click() element_type_replace_name = {'gif': 'image/gif', 'jpeg': 'image/jpeg', 'png': 'image/png', 'svg+xml': 'image/svg+xml', 'exe': 'application/x-msdos-program', 'apk': 'application/vnd.android.package-archive', 'html': 'text/html'} if file_type not in element_type_replace_name.keys(): raise f"文件类型错误。用例数据类型为:{file_type}, 可选择文件类型为:{list(element_type_replace_name.keys())}" - element_tablist_type = self.driver.find_element(By.XPATH, hijackFiles_tablist_fileType_posXpath.format(replaceName=element_type_replace_name[file_type])) + element_tablist_type = self.driver.find_element(By.XPATH, hijack_files_tablist_file_type_posXpath.format(replace_name=element_type_replace_name[file_type])) self.driver.execute_script("arguments[0].click()", element_tablist_type) # 强制点击 def _abs_path(self, file_name): @@ -216,19 +220,19 @@ class HijackFiles: switch_value: str = self._get_value_from_data(data, key=switch_name, data_index=data_index) #提取数据 Mirror Server Response if switch_value != no_modify: #编辑时,有不修改则不用执行 #先获取当前页面中开关状态 include_root_current_class : class="el-switch is-checked" 有is-checked当前状态为开,没有is-chedked当前状态为关 - swith_current_class = self.driver.find_element(By.XPATH, element_position).get_attribute("class") + swith_current_class = self.driver.find_element(By.XPATH, f"{element_position}/span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if ("mirror" in switch_value) and ("server" in switch_value) and ("response" in switch_value): #数据中为Mirror Server Response,使用默认名称,不修改; on时需要打开这个开关 - if "is-checked" in swith_current_class: #页面当前为开,不用点击开关 + if "Mui-checked" in swith_current_class: #页面当前为开,不用点击开关 pass else: #页面当前为关,需要点击开关 - self.driver.find_element(By.XPATH, f"{element_position}/span[2]").click() + self.driver.find_element(By.XPATH, f"{element_position}//input").click() else: ##数据中为其它名称,则需要修改默认名称 - if "is-checked" in swith_current_class: #页面当前为开,需要先关闭开关,在输入值 - self.driver.find_element(By.XPATH, f"{element_position}/span[2]").click() + if "Mui-checked" in swith_current_class: #页面当前为开,需要先关闭开关,在输入值 + self.driver.find_element(By.XPATH, f"{element_position}//input").click() #输入修改名称值 - self.driver.find_element(By.XPATH, hijackFiles_input_downLoadName_posXpath).clear() - self.driver.find_element(By.XPATH, hijackFiles_input_downLoadName_posXpath).send_keys(switch_value) - + self.driver.find_element(By.XPATH, hijack_files_input_download_name_posxpath).send_keys(Keys.CONTROL + "a") + self.driver.find_element(By.XPATH, hijack_files_input_download_name_posxpath).send_keys(Keys.DELETE) + self.driver.find_element(By.XPATH, hijack_files_input_download_name_posxpath).send_keys(switch_value) @screenshot_on_failure def _query(self, data: {}, vsys_name_2="", require_assertion=0, **kwargs): @@ -241,46 +245,48 @@ class HijackFiles: #打开该列表 self._goto_subProfilePage(vsys_name_2=vsys_name_2) #first_row查询到的第一行内容。map_header_className为需要使用的到字典,用来提取第一行的结果。 - result = self.profiles_po.query(listPage_profileSearch_hijackFiles_selectLabel_posId, listPage_profileSearch_hijackFiles_dropDown_item_posXpath, - listPage_profileSearch_hijackFiles_input_itemContent_posXpath, listPage_profileSearch_hijackFiles_buttonSearch_posId, - listPage_profilTable_hijackFiles_tableTbody_posXpath, listPage_profilTable_hijackFiles_tableHeader_posXpath, **kwargs) + result = self.profiles_po.query(listpage_profile_search_hijack_files_select_label_posxpath, listpage_profile_search_hijack_files_drop_down_item_posxpath, + listpage_profile_search_hijack_files_input_item_content_posxpath, listpage_profile_search_hijack_files_button_search_posxpath, + listpage_profile_table_hijack_files_table_tbody_posxpath, listpage_profile_table_hijack_files_table_header_posxpath, **kwargs) if result == [0, 0]: return 0 else: first_row, map_header_className = result #第一行的勾选定位,给修改、删除使用 - self.first_row_checkBox_element = first_row.find_element(By.XPATH, "//span[@class='el-checkbox__input']") - self.first_row_ID_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']/span").text.strip() + self.first_row_checkbox_element = self.driver.find_element(By.XPATH, + "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//input[@class='PrivateSwitchBase-input css-1m9pwf3']") + # self.first_row_ID_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']/span").text.strip() #print(map_header_className) # 需要提取ID Name、Type 信息 - first_row_id_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']//span").text.strip() + # first_row_id_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']//span").text.strip() #first_row_VsysID_class = map_header_className["Vsys ID"] #first_row_VsysID_content = first_row.find_element(By.XPATH, f"//td[contains(@class, '{first_row_VsysID_class}')]//div").text.strip() - first_row_Name_class = map_header_className["Name"] - first_row_Name_content = first_row.find_element(By.XPATH, f"//td[contains(@class, '{first_row_Name_class}')]//span").text.strip() - first_row_Type_class = map_header_className["Type"] - first_row_Type_content = first_row.find_element(By.XPATH, f"//td[contains(@class, '{first_row_Type_class}')]//span").text + # first_row_Name_class = map_header_className["Name"] + first_row_name_content = self.driver.find_element(By.XPATH, + f"//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='name']").text.strip() + # first_row_Type_class = map_header_className["Type"] + first_row_type_content = self.driver.find_element(By.XPATH, f"//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='content_type']").text # print(first_row_id_content, first_row_Name_content, first_row_Type_content) - search_dict = {"ID": first_row_id_content, "Name": first_row_Name_content, "Type": first_row_Type_content} + search_dict = {"Name": first_row_name_content, "Type": first_row_type_content} print("first_row=", search_dict) element_type_replace_name = {'gif': 'image/gif', 'jpeg': 'image/jpeg', 'png': 'image/png', 'svg+xml': 'image/svg+xml', 'exe': 'application/x-msdos-program', 'apk': 'application/vnd.android.package-archive', 'html': 'text/html'} #不同操作后的断言,创建后、修改后、无断言 if require_assertion == 1: #直接创建后,使用的断言 - pytest_check.equal(first_row_Name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.equal(first_row_name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) file_type = self._get_value_from_data(data, key="file_type", data_index=0) - pytest_check.equal(first_row_Type_content, element_type_replace_name[file_type], msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.equal(first_row_type_content, element_type_replace_name[file_type], msg="所在行数{}".format(inspect.currentframe().f_lineno)) elif require_assertion == 2 and data["model"].strip().lower() == "modify": #修改数据后,使用的断言 - pytest_check.equal(first_row_Name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.equal(first_row_name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) file_type = self._get_value_from_data(data, key="file_type", data_index=-1) if file_type != "不修改": - pytest_check.equal(first_row_Type_content, element_type_replace_name[file_type], msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.equal(first_row_type_content, element_type_replace_name[file_type], msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: #不适用断言 pass #强制点击清空查询按钮 - element_clear = self.driver.find_element(By.ID, listPage_profileSearch_hijackFiles_buttonClear_posId) - self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 + # element_clear = self.driver.find_element(By.ID, listPage_profileSearch_hijackFiles_buttonClear_posId) + # self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 return search_dict @screenshot_on_failure @@ -293,18 +299,18 @@ class HijackFiles: if data["model"].strip().lower() == "create": #如果是create参数用例,则不用执行修改方法 return 0 #点击勾选第一行选择框 - self.first_row_checkBox_element.click() #变量来自查询函数 - self.driver.find_element(By.ID, listPage_profile_hijackFiles_editButton_posId).click() + self.first_row_checkbox_element.click() #变量来自查询函数 + self.driver.find_element(By.XPATH, listpage_profile_hijack_files_edit_button_posxpath).click() #解析修改数据 self._operate_page(data, operation_type="edit") # 修改name new_Name = "(修改后)" - self.driver.find_element(By.ID, hijackFiles_input_Name_posId).send_keys(new_Name) + self.driver.find_element(By.XPATH, hijack_files_input_name_posxpath).send_keys(new_Name) self.random_name = self.random_name + new_Name #点击ok - self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_oK_posCss).click() - if self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).is_displayed(): - self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, hijack_files_button_ok_posxpath).click() + # if self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).is_displayed(): + # self.driver.find_element(By.CSS_SELECTOR, hijackFiles_button_warningSaveYes_posCss).click() @screenshot_on_failure def _del(self, del_model=0): @@ -315,9 +321,9 @@ class HijackFiles: #点击勾选第一行选择框 if del_model == 0: #点击勾选第一行选择框 - self.first_row_checkBox_element.click() #变量来自查询函数 + self.first_row_checkbox_element.click() #变量来自查询函数 elif del_model == 1: # 勾选可以删除的选项,并删除;没有锁、没有被引用的对象 - rows = self.driver.find_element(By.XPATH, listPage_profilTable_dnsRecords_tableTbody_posXpath).find_elements(By.XPATH, "./tr") + rows = self.driver.find_element(By.XPATH, listpage_profile_table_hijack_files_table_tbody_posxpath).find_elements(By.XPATH, "./tr") if len(rows) == 0: # 没有数据,直接返回 return else: @@ -325,8 +331,8 @@ class HijackFiles: if del_result == 1: # 1表示没有删除对象,直接返回 return 0 #调用profiles的功能删除方法 - self.profiles_po.delete(listPage_profile_hijackFiles_delButton_posId, listPage_dialogTips_hijackFiles_button_yes_posCss, - listPage_dialogTips_hijackFiles_button_no_posCss) + self.profiles_po.delete(listpage_profile_hijack_files_del_button_posxpath, listpage_dialogtips_hijack_files_button_yes_posxpath, + listpage_dialogtips_hijack_files_button_no_posxpath) def _column_setting(self, column: (), column_flags=0): """ @@ -589,18 +595,19 @@ class HijackFiles: :param link_list_dict: :return: """ + + # create + tmp_name = self._create(data) + time.sleep(3) + search_dict = self._query(data, require_assertion=0, Name=tmp_name) + # 勾选第一行 + self.first_row_checkBox_element.click() + # 调用公共的 link 创建逻辑 + Des_ID_list, Request_ID, Sou_ID_list = self.profiles_po.linkdata(link_list_dict, listPage_profile_hijackFiles_linkButton_posId, + listPage_linkTips_hijackFiles_button_save_posXpath, + listPage_linkTips_hijackFiles_button_add_posXpath, + listPage_linkTips_hijackFiles_button_OK_posXpath) try: - # create - tmp_name = self._create(data) - time.sleep(3) - search_dict = self._query(data, require_assertion=0, Name=tmp_name) - # 勾选第一行 - self.first_row_checkBox_element.click() - # 调用公共的 link 创建逻辑 - Des_ID_list, Request_ID, Sou_ID_list = self.profiles_po.linkdata(link_list_dict, listPage_profile_hijackFiles_linkButton_posId, - listPage_linkTips_hijackFiles_button_save_posXpath, - listPage_linkTips_hijackFiles_button_add_posXpath, - listPage_linkTips_hijackFiles_button_OK_posXpath) # judge link success chk_lnk_name, chk_lnk_type = [], [] self._query(data, require_assertion=1, ID=search_dict['ID']) @@ -609,7 +616,8 @@ class HijackFiles: sou_value_type = self.driver.find_element(By.XPATH,"//span[@class='table-hide']/span[@class='el-tooltip item']").text chk_lnk_type.append(sou_value_type) self.driver.find_element(By.XPATH, f"//i[contains(@id, 'dowmloadi{search_dict['ID']}')]").click() - + is_exist = self.driver.element_isExist(By.XPATH, "//div[contains(@class, 'el-message--error')]/p") + pytest_check.equal(is_exist, False, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 切换 vsys loginout = LogInOut(self.driver) loginout.logout() @@ -623,6 +631,8 @@ class HijackFiles: self._query(data, vsys_name_2=link_list_dict[link_index]["link_dst_vsys"], require_assertion=0, ID=Des_ID_list[0]) # 点击文件下载 self.driver.find_element(By.XPATH, f"//i[contains(@id, 'dowmloadi{Des_ID_list[0]}')]").click() + is_exist = self.driver.element_isExist(By.XPATH, "//div[contains(@class, 'el-message--error')]/p") + pytest_check.equal(is_exist, False, msg="所在行数{}".format(inspect.currentframe().f_lineno)) time.sleep(2) # 获取Link后的值 des_value_Name = self.driver.find_element(By.XPATH, @@ -644,6 +654,8 @@ class HijackFiles: sou_value_name = self.driver.find_element(By.XPATH, "//div[@class='cell']//span[contains(@class,'el-tooltip white-space')]").text sou_value_type = self.driver.find_element(By.XPATH,"//span[@class='table-hide']/span[@class='el-tooltip item']").text self.driver.find_element(By.XPATH, f"//i[contains(@id, 'dowmloadi{search_dict['ID']}')]").click() + is_exist = self.driver.element_isExist(By.XPATH, "//div[contains(@class, 'el-message--error')]/p") + pytest_check.equal(is_exist, False, msg="所在行数{}".format(inspect.currentframe().f_lineno)) time.sleep(1) # click sync Request_ID = self.profiles_po.click_pol_lnk_sync(Request_ID) @@ -660,7 +672,8 @@ class HijackFiles: print(compare_list_type) self.profiles_po.lst_are_same(compare_list_type) except Exception as e: - assert e + print("Exception ============", e) + raise e finally: self._just_goto_hijack_page() self._delete_des(Des_ID_list, data) # 删除数据 @@ -721,7 +734,8 @@ class HijackFiles: self._query(data, vsys_name_2=link_list_dict[link_index]["link_dst_vsys"], require_assertion=0, ID=Des_ID_list[0]) # 点击文件下载 self.driver.find_element(By.XPATH, f"//i[contains(@id, 'dowmloadi{Des_ID_list[0]}')]").click() - + is_exist = self.driver.element_isExist(By.XPATH, "//div[contains(@class, 'el-message--error')]/p") + pytest_check.equal(is_exist, False, msg="所在行数{}".format(inspect.currentframe().f_lineno)) time.sleep(2) # 获取sync后的值 des_value_Name = self.driver.find_element(By.XPATH, @@ -751,19 +765,19 @@ class HijackFiles: profile_public = ProfilesPublicOperations(self.driver) profile_public.change_vsys(vsys_name=link_list_dict[link_index]["link_dst_vsys"]) self._query(data, vsys_name_2=link_list_dict[link_index]["link_dst_vsys"], require_assertion=0, ID=Des_ID_list[0]) - time.sleep(2) # 再次获取sync后的值 # 点击文件下载 self.driver.find_element(By.XPATH, f"//i[contains(@id, 'dowmloadi{Des_ID_list[0]}')]").click() + is_exist = self.driver.element_isExist(By.XPATH, "//div[contains(@class, 'el-message--error')]/p") + pytest_check.equal(is_exist, False, msg="所在行数{}".format(inspect.currentframe().f_lineno)) second_des_value_name = self.driver.find_element(By.XPATH, - "//div[@class='cell']//span[contains(@class,'el-tooltip white-space')]").text + "//div[@class='cell']//span[contains(@class,'el-tooltip white-space')]").text compare_list_name.append(second_des_value_name) second_des_value_type = self.driver.find_element(By.XPATH, "//span[@class='table-hide']/span[@class='el-tooltip item']").text compare_list_type.append(second_des_value_type) time.sleep(3) - return Request_ID, compare_list_name, compare_list_type def _delete_des(self, Des_ID_list, data): @@ -826,19 +840,122 @@ class HijackFiles: element_clear = self.driver.find_element(By.ID, listPage_profileSearch_hijackFiles_buttonClear_posId) self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 + def _audit_log_all_operation(self, data): ran_name = self._create(data) try: - time.sleep(0.5) - search_dict = self._query(data, Name=ran_name) + profiles_type = 'Hijack File' + search_name = self._query(data, Name=ran_name) + self._audit_log_operation(profiles_type, search_name, operation_type='Create') + self._query(data, Name=ran_name) + self._audit_log_operation(profiles_type, search_name, operation_type='Query Verbose') + self._query(data, Name=ran_name) self._modify(data) - time.sleep(0.5) + self._query(data, Name=ran_name) + self._audit_log_operation(profiles_type, search_name, operation_type='Edit') + self._goto_subProfilePage() + self.profiles_po._audit_log_query_list(profiles_type, search_name, operation_type='Query List') + except Exception as e: + raise e + finally: + self._query(data, Name=ran_name) + self._del() + self.profiles_po._audit_log_delete(profiles_type, search_name, operation_type='Delete') + + def _audit_log_operation(self, profiles_type, search_name, operation_type): + # 选中第一行 + self.first_row_checkbox_element.click() + # 点击编辑 + self.driver.find_element(By.XPATH, listpage_profile_hijack_files_edit_button_posxpath).click() + if operation_type == 'Query Verbose': + click_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + if operation_type == 'Create': + # 创建时间 + compare_time = self.driver.find_element(By.XPATH, hijack_files_profile_page_create_time_posxpath).text + elif operation_type == 'Edit': + # 修改时间 + compare_time = self.driver.find_element(By.XPATH, hijack_files_profile_page_modify_time_posxpath).text + # 用户 + user_name = self.driver.find_element(By.XPATH, + "//div[@class='bifang-proxy-id item-content user_name_font']").text + + if operation_type == 'Query Verbose': + self.profiles_po.search_compare_item(profiles_type, search_id, operation_type=operation_type, + operation_flag=0) + else: + # 对比 Audit log 详情页 + # self.driver.find_element(By.XPATH, hijack_files_profile_page_audit_logs_posxpath).click() + # self.driver.find_element(By.XPATH, "(//span[@class='el-checkbox__inner'])[2]").click() + # # 点击 Compare + # self.driver.find_element(By.XPATH, hijack_files_profile_page_audit_logs_compare_posxpath).click() + # + # if operation_type == 'Create': + # self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, compare_time, + # operation_flag=0) + # elif operation_type == 'Edit': + # self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, compare_time, + # operation_flag=1) + # 对比系统 audit_log 页 + self.profiles_po.search_compare_item(profiles_type, search_id, operation_type=operation_type, + operation_flag=0) + time.sleep(1) + + if operation_type == 'Create': + # 点击 Compare 对比 + self.driver.find_element(By.XPATH, + "//button[@class='el-button btn-style el-button--info el-button--mini']/span[normalize-space(text())='Compare']").click() + self.driver.find_element(By.ID, list_page_audit_log_search_button_compare_posId).click() + + self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, compare_time, + operation_flag=0) + elif operation_type == 'Edit': + # 点击 Compare 对比 + self.driver.find_element(By.XPATH, + "//button[@class='el-button btn-style el-button--info el-button--mini']/span[normalize-space(text())='Compare']").click() + # 对比 V.1 + self.driver.find_element(By.XPATH, + "(//td[contains(@class, 'is-left el-table-column--selection')])[last()]").click() + self.driver.find_element(By.ID, list_page_audit_log_search_button_compare_posId).click() + self.profiles_po._check_audit_log_system_page(profiles_type, user_name, search_id, compare_time, + operation_flag=1) + elif operation_type == 'Query Verbose': + # 点击 Compare 对比 + time.sleep(1) + self.driver.find_element(By.XPATH, + "(//button[@class='el-button btn-style el-button--info el-button--mini'])[1]").click() + self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, click_time, + operation_flag=2) + + def _all_search_fields(self, data): + # 新建数据 + ran_name = self._create(data) + # 名字查询 + search_dict = self._query(data, Name=ran_name) + try: + # ID 唯一查询 + self._query(data, ID=search_dict['ID']) + # 只有一行记录并且ID一致 + id_eles = self.driver.find_elements(By.XPATH, "//div[@class='table-status-item-id']") + id_ele_lst = [e.text for e in id_eles] + pytest_check.equal(len(id_ele_lst), 1, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + for id_ele in id_ele_lst: + pytest_check.equal(id_ele, search_dict['ID'], msg="所在行数{}".format(inspect.currentframe().f_lineno)) + + # 名字模糊查询 + search_name = self.profiles_po.random_substring(ran_name) + self._query(data, Name=search_name) + # 可以有多行记录都需要包含在名字里面 + name_eles = self.driver.find_elements(By.XPATH, "//td[contains(@class,'el-table_1_column_2 is-left')]") + name_ele_lst = [e.text for e in name_eles] + for name_ele in name_ele_lst: + pytest_check.equal(search_name in name_ele, True, msg="所在行数{}".format(inspect.currentframe().f_lineno)) except Exception as e: + print("Exception ============", e) raise e finally: + # 删除数据 self._query(data, Name=ran_name) self._del() - self.profiles_po.audit_log_view("Hijack File", search_dict["ID"]) create = _create query = _query @@ -864,9 +981,9 @@ if __name__ == '__main__': ) a.get("http://192.168.44.72") a.maximize_window() - a.find_element(By.XPATH,"//*[@id='app']/div/div[1]/div[2]/div[2]/div[1]/div/input").send_keys("AUTO_UI_TEST_KG") - a.find_element(By.XPATH,"//*[@id='app']/div/div[1]/div[2]/div[2]/div[2]/div/input").send_keys("kongweibin1") - a.find_element(By.ID,"login").click() + a.find_element(By.XPATH, loginpage_username_posxpath).send_keys("AUTO_UI_TEST_KG") + a.find_element(By.XPATH, loginpage_passwd_posxpath).send_keys("kongweibin1") + a.find_element(By.XPATH, login_page_sign_in_posxpath).click() time.sleep(2) # 测试修改数据 r = HijackFiles(a) @@ -875,11 +992,11 @@ if __name__ == '__main__': # model=0/1 ====0:单个 1group # type =IMSI/Phone_Number/IMEI data= { - "ids": "test_audit_log_all_operation", - "model": "modify", - "file": "test_gif_1.gif->test_gif_2.gif", - "download_name": "test_gif_1.gif->Mirror Server Response", - "file_type": "gif->不修改", + "ids": "创建png类型hijack_files数据再修改数据svg+xml数据", + "model": "modify", + "file": "test_png_1.png->test_svg_1.svg", + "download_name": "test_png_1.gif->name_test_svg_1.svg", + "file_type": "png->svg+xml" } # 测试link # link_parse = configparser.ConfigParser() @@ -910,4 +1027,4 @@ if __name__ == '__main__': """ # r.chk_lnk_mod_case(data, link_list_dict=link_list_dict) - r._audit_log_all_operation(data) + r.hijack_files_case(data) diff --git a/common/ui_common/profiles/tcp_proxy_profiles.py b/common/ui_common/profiles/tcp_proxy_profiles.py index 0cb7b5c8..a0f09abc 100644 --- a/common/ui_common/profiles/tcp_proxy_profiles.py +++ b/common/ui_common/profiles/tcp_proxy_profiles.py @@ -21,6 +21,7 @@ from common.ui_common.login_logout.loginout import LogInOut from selenium import webdriver import copy from selenium.webdriver.common.keys import Keys +import datetime class TcpProxyProfiles: def __init__(self, demo_fixture: MyWebDriver): @@ -36,7 +37,7 @@ class TcpProxyProfiles: except NoSuchElementException: pass - def tcpProxyProfiles_case(self, data:{}): + def tcp_proxy_profiles_case(self, data:{}): self._create(data) # 创建 time.sleep(3) self._query(data, require_assertion=1, Name=self.random_name) # 创建后查询 @@ -44,16 +45,16 @@ class TcpProxyProfiles: if data["model"].strip().lower() == "modify": # 修改测试时,执行修改方法 self._modify(data) time.sleep(2) - self._query(data, require_assertion=2, ID=self.first_row_ID_content) + self._query(data, require_assertion=2, Name=self.random_name) self._del() @screenshot_on_failure def _goto_subProfilePage(self, vsys_name_2=""): # 菜单操作,定位到tcp_proxy_profiles列表页 - # self.driver.find_element(By.CSS_SELECTOR, mainPage_navigationBar_logo_posCss).click() + self.driver.find_element(By.XPATH, mainpage_navigation_bar_logo_posxpath).click() self.profiles_po.change_vsys(vsys_name=vsys_name_2) - self.driver.find_element(By.ID, mainPage_firstLevelMenu_profiles_posId).click() - self.driver.find_element(By.ID, mainPage_secondLevelMenu_tcpProxyProfiles_posId).click() + self.driver.find_element(By.XPATH, mainpage_first_level_menu_profiles_posxpath).click() + self.driver.find_element(By.XPATH, mainpage_second_level_menu_tcp_proxy_profiles_posxpath).click() def _goto_vsysPage(self, vsys_name_2=""): # 菜单操作,定位到不同的vsys @@ -65,35 +66,35 @@ class TcpProxyProfiles: self._goto_subProfilePage() #创建 #点击create - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_createButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_tcp_proxy_profiles_create_button_posxpath).click() #在create 创建页面操作 # 页面其它选项操作 self._operate_page(data, operation_type="create") # Name if source_name: self.random_name = source_name[0] - self.driver.find_element(By.ID, tcpProxyProfiles_input_Name_posId).send_keys(self.random_name) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_name_posxpath).send_keys(self.random_name) else: self.random_name = self.my_random.random_name() - self.driver.find_element(By.ID, tcpProxyProfiles_input_Name_posId).send_keys(self.random_name) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_name_posxpath).send_keys(self.random_name) self.driver.find_element(By.XPATH, "//label[text()='Name']") #点击OK - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_oK_posCss).click() - if self.driver.element_isExist(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss): - if self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).is_displayed(): + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_ok_posxpath).click() + if self.driver.element_isExist(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss): + if self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).is_displayed(): print(1) - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif int(data["c_ttl"].split("->")[0].strip()) == 0 or int(data["c_userTimeout"].split("->")[0].strip()) == 0: print("ttl=0") # 点击OK - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_oK_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_ok_posxpath).click() pytest_check.equal( self.driver.find_element(By.XPATH, "//p[@class='el-message__content']").text.strip(), "Client-side Parameters cannot be empty", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif int(data["s_ttl"].split("->")[0].strip()) == 0 or int(data["s_userTimeout"].split("->")[0].strip()) == 0: print("s_ttl=0") pytest_check.equal( @@ -101,8 +102,8 @@ class TcpProxyProfiles: "Server-side Parameters cannot be empty", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif len(self.random_name) < 4: # name不符合要求 print("name") if self.driver.element_isExist(By.XPATH, @@ -115,24 +116,24 @@ class TcpProxyProfiles: else: print("name less than 4,no error message") # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif int(data["c_ttl"].split("->")[0].strip()) < 1 or int(data["c_ttl"].split("->")[0].strip()) > 255 or int(data["s_ttl"].split("->")[0].strip()) < 1 or int(data["s_ttl"].split("->")[0].strip()) > 255: print("ttl test") error_content = self.driver.find_element(By.XPATH, "//label[text()='TTL']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The TTL range:1-255", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif int(data["c_userTimeout"].split("->")[0].strip()) < 200 or int(data["c_userTimeout"].split("->")[0].strip()) > 60000 or int(data["s_userTimeout"].split("->")[0].strip()) < 200 or int(data["s_userTimeout"].split("->")[0].strip()) > 60000: print("user time test") # 点击OK - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_oK_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() error_content = self.driver.find_element(By.XPATH, "//label[text()='User Timeout']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The User Timeout range:200-60000", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif data["c_override_MSS"].split("->")[0].strip() == "on": if int(data["c_overrideMSS"].split("->")[0].strip()) < 536 or int(data["c_overrideMSS"].split("->")[0].strip()) > 1460: print("overridemss") @@ -140,8 +141,8 @@ class TcpProxyProfiles: "//input[@placeholder='536-1460']/ancestor::div[@class='el-form-item__content']//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The MSS range:536-1460", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif data["s_override_MSS"].split("->")[0].strip() == "on": if int(data["s_overrideMSS"].split("->")[0].strip()) < 536 or int(data["s_overrideMSS"].split("->")[0].strip()) > 1460: print("s_overridemss") @@ -149,8 +150,8 @@ class TcpProxyProfiles: "//input[@placeholder='536-1460']/ancestor::div[@class='el-form-item__content']//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The MSS range:536-1460", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif data["c_keepalive"].split("->")[0].strip() == "on": if int(data["c_probe_number"].split("->")[0].strip()) < 1 or int(data["c_probe_number"].split("->")[0].strip()) > 222: print("c-pnumber") @@ -158,24 +159,24 @@ class TcpProxyProfiles: "//label[text()='Probe Number']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The Probe Number range: 1-222", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() if int(data["c_idle_time"].split("->")[0].strip()) < 30 or int(data["c_idle_time"].split("->")[0].strip()) > 7200: print("c_idletine") error_content = self.driver.find_element(By.XPATH, "//label[text()='Idle Time']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The Idle Time range:30-7200", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() if int(data["c_interval"].split("->")[0].strip()) < 15 or int(data["c_interval"].split("->")[0].strip()) > 75: print("c_interval") error_content = self.driver.find_element(By.XPATH, "//label[text()='Interval']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The Interval range:15-75", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() elif data["s_keepalive"].split("->")[0].strip() == "on": if int(data["s_probe_number"].split("->")[0].strip()) < 1 or int(data["s_probe_number"].split("->")[0].strip()) > 222: print("s_pnumber") @@ -183,24 +184,24 @@ class TcpProxyProfiles: "//label[text()='Probe Number']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The Probe Number range: 1-222", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() if int(data["s_idle_time"].split("->")[0].strip()) < 30 or int(data["s_idle_time"].split("->")[0].strip()) > 7200: print("s_idle") error_content = self.driver.find_element(By.XPATH, "//label[text()='Idle Time']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The Idle Time range:30-7200", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() if int(data["s_interval"].split("->")[0].strip()) < 15 or int(data["s_interval"].split("->")[0].strip()) > 75: print("s_interval") error_content = self.driver.find_element(By.XPATH, "//label[text()='Interval']/parent::div//div[@class='el-form-item__error']").text.strip() pytest_check.equal(error_content, "The Interval range:15-75", msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_cancel_posxpath).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() time.sleep(2) return self.random_name @@ -219,99 +220,102 @@ class TcpProxyProfiles: #解析输入data数据的数据 #enable TCP Passthrough 开关操作 - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="enable_TCP_passthrough", element_position=tcpProxyProfiles_switch_enableTCPPassthrough_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="enable_TCP_passthrough", element_position=f"{tcp_proxy_profiles_switch_enable_tcp_passthrough_posxpath}//span[@class='MuiSwitch-root MuiSwitch-sizeMedium css-l8jo8y']") #Client_side 开关操作 override MSS, no delay, keepalive - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="c_override_MSS", element_position=tcpProxyProfiles_switch_clientOverrideMSS_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="c_override_MSS", element_position=tcp_proxy_profiles_switch_client_override_mss_posxpath) # Client_side 输入操作 override MSS, ttl, user Timeout c_overrideMSS_test = self._get_value_from_data(data, key="c_override_MSS", data_index=data_index) if c_overrideMSS_test == "on" or c_overrideMSS_test == no_modify: c_overrideMSS = self._get_value_from_data(data, key="c_overrideMSS", data_index=data_index) if c_overrideMSS != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientOverrideMSS_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientOverrideMSS_posXpath).send_keys(c_overrideMSS) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_override_mss_posxath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_override_mss_posxath).send_keys(c_overrideMSS) self.driver.find_element(By.XPATH, "//label[text()='Override MSS']").click() - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="c_no_delay", element_position=tcpProxyProfiles_switch_clientNoDelay_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="c_no_delay", element_position=tcp_proxy_profiles_switch_client_nodelay_posxpath) c_ttl = self._get_value_from_data(data, key="c_ttl", data_index=data_index) if c_ttl != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientTTL_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientTTL_posXpath).send_keys(c_ttl) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_ttl_posxpath).send_keys(Keys.CONTROL + "a") + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_ttl_posxpath).send_keys(Keys.DELETE) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_ttl_posxpath).send_keys(c_ttl) self.driver.find_element(By.XPATH, "//label[text()='TTL']").click() - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="c_keepalive", element_position=tcpProxyProfiles_switch_clientKeepalive_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="c_keepalive", element_position=tcp_proxy_profiles_switch_client_keepalive_posxpath) c_keepalive_test = self._get_value_from_data(data, key="c_keepalive", data_index=data_index) if c_keepalive_test == "on": c_probe_number = self._get_value_from_data(data, key="c_probe_number", data_index=data_index) if c_probe_number != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientProbeNumber_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientProbeNumber_posXpath).send_keys(c_probe_number) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_probe_number_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_probe_number_posxpath).send_keys(c_probe_number) self.driver.find_element(By.XPATH, "//label[text()='Probe Number']").click() c_idle_time = self._get_value_from_data(data, key="c_idle_time", data_index=data_index) if c_idle_time != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientIdleTime_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientIdleTime_posXpath).send_keys(c_idle_time) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_idle_time_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_idle_time_posxpath).send_keys(c_idle_time) self.driver.find_element(By.XPATH, "//label[text()='Idle Time']").click() c_interval = self._get_value_from_data(data, key="c_interval", data_index=data_index) if c_interval != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientInterval_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientInterval_posXpath).send_keys(c_interval) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_interval_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_interval_posxpath).send_keys(c_interval) self.driver.find_element(By.XPATH, "//label[text()='Interval']").click() self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="c_UserTimeout_switch", - element_position=tcpProxyProfiles_switch_clientUserTimeout_posXpath) + element_position=tcp_proxy_profiles_switch_client_user_timeout_posxpath) c_UserTimeout_test = self._get_value_from_data(data, key="c_UserTimeout_switch", data_index=data_index) if c_UserTimeout_test == "on" or c_overrideMSS_test == no_modify: c_userTimeout = self._get_value_from_data(data, key="c_userTimeout", data_index=data_index) if c_userTimeout != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientUserTimeout_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientUserTimeout_posXpath).send_keys(c_userTimeout) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_user_timeout_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_user_timeout_posxpath).send_keys(c_userTimeout) self.driver.find_element(By.XPATH, "//label[text()='User Timeout']").click() # Server_side 开关操作 override MSS, no delay, keepalive - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="s_override_MSS", element_position=tcpProxyProfiles_switch_serverOverrideMSS_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="s_override_MSS", element_position=tcp_proxy_profiles_switch_server_override_mss_posxpath) # Server_side 输入操作 override MSS, ttl, user Timeout s_overrideMSS_test = self._get_value_from_data(data, key="s_override_MSS", data_index=data_index) if s_overrideMSS_test == "on": s_overrideMSS = self._get_value_from_data(data, key="s_overrideMSS", data_index=data_index) if s_overrideMSS != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverOverrideMSS_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverOverrideMSS_posXpath).send_keys(s_overrideMSS) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_override_mss_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_override_mss_posxpath).send_keys(s_overrideMSS) self.driver.find_element(By.XPATH, "//label[text()='Override MSS']").click() - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="s_no_delay", element_position=tcpProxyProfiles_switch_serverNoDelay_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="s_no_delay", element_position=tcp_proxy_profiles_switch_server_nodelay_posxpath) s_ttl = self._get_value_from_data(data, key="s_ttl", data_index=data_index) if s_ttl != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverTTL_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverTTL_posXpath).send_keys(s_ttl) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_ttl_posxpath).send_keys( + Keys.CONTROL + "a") + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_ttl_posxpath).send_keys(Keys.DELETE) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_ttl_posxpath).send_keys(s_ttl) self.driver.find_element(By.XPATH, "//label[text()='TTL']").click() - self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="s_keepalive", element_position=tcpProxyProfiles_switch_serverKeepalive_posXpath) + self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="s_keepalive", element_position=tcp_proxy_profiles_switch_server_keepalive_posxpath) s_keepalive_test = self._get_value_from_data(data, key="s_keepalive", data_index=data_index) if s_keepalive_test == "on": s_probe_number = self._get_value_from_data(data, key="s_probe_number", data_index=data_index) if s_probe_number != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverProbeNumber_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverProbeNumber_posXpath).send_keys(s_probe_number) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_probe_number_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_probe_number_posxpath).send_keys(s_probe_number) self.driver.find_element(By.XPATH, "//label[text()='Probe Number']").click() s_idle_time = self._get_value_from_data(data, key="s_idle_time", data_index=data_index) if s_idle_time != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverIdleTime_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverIdleTime_posXpath).send_keys(s_idle_time) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_idle_time_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_idle_time_posxpath).send_keys(s_idle_time) self.driver.find_element(By.XPATH, "//label[text()='Idle Time']").click() s_interval = self._get_value_from_data(data, key="s_interval", data_index=data_index) if s_interval != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverInterval_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverInterval_posXpath).send_keys(s_interval) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_interval_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_interval_posxpath).send_keys(s_interval) self.driver.find_element(By.XPATH, "//label[text()='Interval']").click() self._operate_switch(data, data_index=data_index, no_modify=no_modify, switch_name="s_UserTimeout_switch", - element_position=tcpProxyProfiles_switch_serverUserTimeout_posXpath) + element_position=tcp_proxy_profiles_switch_server_user_timeout_posxpath) s_UserTimeout_test = self._get_value_from_data(data, key="s_UserTimeout_switch", data_index=data_index) if s_UserTimeout_test == "on": s_userTimeout = self._get_value_from_data(data, key="s_userTimeout", data_index=data_index) if s_userTimeout != no_modify: # 判断不修改时跳过操作 - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverUserTimeout_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverUserTimeout_posXpath).send_keys(s_userTimeout) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_user_timeout_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_user_timeout_posxpath).send_keys(s_userTimeout) self.driver.find_element(By.XPATH, "//label[text()='User Timeout']").click() def _operate_switch(self, data: {}, data_index=0, no_modify="不修改", switch_name="", element_position=""): """ @@ -329,14 +333,14 @@ class TcpProxyProfiles: # print("switch_value=", switch_value) if switch_value != no_modify: #编辑时,有不修改则不用执行 #先获取当前页面中开关状态 include_root_current_class : class="el-switch is-checked" 有is-checked当前状态为开,没有is-chedked当前状态为关 - swith_current_class = self.driver.find_element(By.XPATH, element_position).get_attribute("class") + swith_current_class = self.driver.find_element(By.XPATH, f"{element_position}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if "on" == switch_value: #数据中为开 - if "is-checked" in swith_current_class: #页面当前为开,不用点击开关 + if "Mui-checked" in swith_current_class: #页面当前为开,不用点击开关 pass else: #页面当前为关,需要点击开关 self.driver.find_element(By.XPATH, element_position).click() else: #用例输入为关 - if "is-checked" in swith_current_class: #页面当前为开,需要点击开关 + if "Mui-checked" in swith_current_class: #页面当前为开,需要点击开关 self.driver.find_element(By.XPATH, element_position).click() else: #页面当前为关,不用点击开关 pass @@ -368,97 +372,98 @@ class TcpProxyProfiles: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() time.sleep(2) # 校验数据是否丢失、不显示 if f_name == 1: - current_name = self.driver.find_element(By.ID, tcpProxyProfiles_input_Name_posId).get_attribute("value") + current_name = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_name_posxpath).get_attribute("value") pytest_check.equal(current_name, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_ETP = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_enableTCPPassthrough_posXpath).get_attribute("aria-checked") - if self._get_value_from_data(data, key="enable_TCP_passthrough") == "on": - pytest_check.equal(current_ETP, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_ETP = self.driver.find_element(By.XPATH, f"{tcp_proxy_profiles_switch_enable_tcp_passthrough_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") + print(current_ETP) + if self._get_value_from_data(data, key="enable_TCP_passthrough") == "on": + pytest_check.is_in("Mui-checked", current_ETP, msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_ETP, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.is_not_in("Mui-checked", current_ETP, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # client-side current_C_OMSS = self.driver.find_element(By.XPATH, - tcpProxyProfiles_switch_clientOverrideMSS_posXpath).get_attribute("aria-checked") + f"{tcp_proxy_profiles_switch_server_override_mss_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="c_override_MSS") == "on": - pytest_check.equal(current_C_OMSS, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_C_OMSS_value = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientOverrideMSS_posXpath).get_attribute("value") + pytest_check.is_in("Mui-checked", current_C_OMSS, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_C_OMSS_value = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_override_mss_posxath).get_attribute("value") pytest_check.equal(current_C_OMSS_value, data["c_overrideMSS"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_C_OMSS, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_C_Nodelay = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_clientNoDelay_posXpath).get_attribute("aria-checked") + pytest_check.is_not_in("Mui-checked", current_C_OMSS, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_C_Nodelay = self.driver.find_element(By.XPATH, f"{tcp_proxy_profiles_switch_client_nodelay_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="c_no_delay") == "on": - pytest_check.equal(current_C_Nodelay, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.is_in("Mui-checked", current_C_Nodelay, msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_C_Nodelay, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_C_TTL = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientTTL_posXpath).get_attribute("value") + pytest_check.is_not_in("Mui-checked", current_C_Nodelay, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_C_TTL = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_ttl_posxpath).get_attribute("value") pytest_check.equal(current_C_TTL, data["c_ttl"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_C_keepalive = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_clientKeepalive_posXpath).get_attribute("aria-checked") + current_C_keepalive = self.driver.find_element(By.XPATH, f"{tcp_proxy_profiles_switch_client_keepalive_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="c_keepalive") == "on": - pytest_check.equal(current_C_keepalive, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_C_Pnumber = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientProbeNumber_posXpath).get_attribute("value") - current_C_idletime = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientIdleTime_posXpath).get_attribute("value") - current_C_interval = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientInterval_posXpath).get_attribute("value") + pytest_check.is_in("Mui-checked", current_C_keepalive, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_C_Pnumber = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_probe_number_posxpath).get_attribute("value") + current_C_idletime = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_idle_time_posxpath).get_attribute("value") + current_C_interval = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_interval_posxpath).get_attribute("value") pytest_check.equal(current_C_Pnumber, data["c_probe_number"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) pytest_check.equal(current_C_idletime, data["c_idle_time"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) pytest_check.equal(current_C_interval, data["c_interval"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_C_keepalive, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.is_not_in("Mui-checked", current_C_keepalive, msg="所在行数{}".format(inspect.currentframe().f_lineno)) current_C_UserTimeout_switch = self.driver.find_element(By.XPATH, - tcpProxyProfiles_switch_clientUserTimeout_posXpath).get_attribute("aria-checked") + f"{tcp_proxy_profiles_switch_client_user_timeout_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="c_UserTimeout_switch") == "on": - pytest_check.equal(current_C_UserTimeout_switch, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_C_Utime = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientUserTimeout_posXpath).get_attribute("value") + pytest_check.is_in("Mui-checked", current_C_UserTimeout_switch, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_C_Utime = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_user_timeout_posxpath).get_attribute("value") pytest_check.equal(current_C_Utime, data["c_userTimeout"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_C_UserTimeout_switch, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.is_not_in("Mui-checked", current_C_UserTimeout_switch, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # server-side - current_S_OMSS = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_serverOverrideMSS_posXpath).get_attribute("aria-checked") + current_S_OMSS = self.driver.find_element(By.XPATH, f"{tcp_proxy_profiles_switch_server_override_mss_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="s_override_MSS") == "on": - pytest_check.equal(current_S_OMSS, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_S_OMSS_value = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverOverrideMSS_posXpath).get_attribute("value") + pytest_check.is_in("Mui-checked", current_S_OMSS, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_S_OMSS_value = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_override_mss_posxpath).get_attribute("value") pytest_check.equal(current_S_OMSS_value, data["s_overrideMSS"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_S_OMSS, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_S_Nodelay = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_serverNoDelay_posXpath).get_attribute("aria-checked") + pytest_check.is_not_in("Mui-checked", current_S_OMSS, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_S_Nodelay = self.driver.find_element(By.XPATH, f"{tcp_proxy_profiles_switch_server_nodelay_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="s_no_delay") == "on": - pytest_check.equal(current_S_Nodelay, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.is_in("Mui-checked", current_S_Nodelay, msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_S_Nodelay, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_S_TTL = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverTTL_posXpath).get_attribute("value") + pytest_check.is_not_in("Mui-checked", current_S_Nodelay, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_S_TTL = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_ttl_posxpath).get_attribute("value") pytest_check.equal(current_S_TTL, data["s_ttl"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_S_keepalive = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_serverKeepalive_posXpath).get_attribute("aria-checked") + current_S_keepalive = self.driver.find_element(By.XPATH, f"{tcp_proxy_profiles_switch_server_keepalive_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="s_keepalive") == "on": - pytest_check.equal(current_S_keepalive, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_S_Pnumber = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverProbeNumber_posXpath).get_attribute("value") - current_S_idletime = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverIdleTime_posXpath).get_attribute("value") - current_S_interval = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverInterval_posXpath).get_attribute("value") + pytest_check.is_in("Mui-checked", current_S_keepalive, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_S_Pnumber = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_probe_number_posxpath).get_attribute("value") + current_S_idletime = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_idle_time_posxpath).get_attribute("value") + current_S_interval = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_interval_posxpath).get_attribute("value") pytest_check.equal(current_S_Pnumber, data["s_probe_number"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) pytest_check.equal(current_S_idletime, data["s_idle_time"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) pytest_check.equal(current_S_interval, data["s_interval"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_S_keepalive, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.is_not_in("Mui-checked", current_S_keepalive, msg="所在行数{}".format(inspect.currentframe().f_lineno)) current_S_UserTimeout_switch = self.driver.find_element(By.XPATH, - tcpProxyProfiles_switch_serverUserTimeout_posXpath).get_attribute("aria-checked") + f"{tcp_proxy_profiles_switch_server_user_timeout_posxpath}//span[contains(@class, 'MuiButtonBase-root')]").get_attribute("class") if self._get_value_from_data(data, key="s_UserTimeout_switch") == "on": - pytest_check.equal(current_S_UserTimeout_switch, "true", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - current_S_Utime = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverUserTimeout_posXpath).get_attribute("value") + pytest_check.is_in("Mui-checked", current_S_UserTimeout_switch, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + current_S_Utime = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_user_timeout_posxpath).get_attribute("value") pytest_check.equal(current_S_Utime, data["s_userTimeout"].split("->")[0].strip(), msg="所在行数{}".format(inspect.currentframe().f_lineno)) else: - pytest_check.equal(current_S_UserTimeout_switch, None, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + pytest_check.is_not_in("Mui-checked", current_S_UserTimeout_switch, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 解析修改数据 self._operate_page(data, operation_type="edit") # 修改Name if f_name == 1: new_Name = "(修改后)" - self.driver.find_element(By.ID, tcpProxyProfiles_input_Name_posId).send_keys(new_Name) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_name_posxpath).send_keys(new_Name) self.random_name = self.random_name + new_Name # 点击ok - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_oK_posCss).click() - if self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).is_displayed(): - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_ok_posxpath).click() + # if self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).is_displayed(): + # self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() @screenshot_on_failure def _del(self, del_model=0): @@ -471,7 +476,7 @@ class TcpProxyProfiles: #点击勾选第一行选择框 self.first_row_checkBox_element.click() #变量来自查询函数 elif del_model == 1: # 勾选可以删除的选项,并删除;没有锁、没有被引用的对象 - rows = self.driver.find_element(By.XPATH, listPage_profilTable_dnsRecords_tableTbody_posXpath).find_elements(By.XPATH, "./tr") + rows = self.driver.find_element(By.XPATH, listpage_profile_table_dns_records_table_tbody_posxpath).find_elements(By.XPATH, "./tr") if len(rows) == 0: # 没有数据,直接返回 return else: @@ -479,8 +484,8 @@ class TcpProxyProfiles: if del_result == 1: # 1表示没有删除对象,直接返回 return 0 # 调用profiles的功能删除方法 - self.profiles_po.delete(listPage_profile_tcpProxyProfiles_delButton_posId, listPage_dialogTips_tcpProxyProfiles_button_yes_posCss, - listPage_dialogTips_tcpProxyProfiles_button_no_posCss) + self.profiles_po.delete(listpage_profile_tcp_proxy_profiles_del_button_posxpath, listpage_dialog_tips_tcp_proxy_profiles_button_yes_posxpath, + listpage_dialog_tips_tcp_proxy_profiles_button_no_posxpath) @screenshot_on_failure def _query(self, data: {}, vsys_name_2="", require_assertion=0, **kwargs): @@ -493,10 +498,10 @@ class TcpProxyProfiles: # 打开该列表 self._goto_subProfilePage(vsys_name_2=vsys_name_2) # first_row查询到的第一行内容。map_header_className为需要使用的到字典,用来提取第一行的结果。 - result = self.profiles_po.query(listPage_profileSearch_tcpProxyProfiles_selectLabel_posId, + result = self.profiles_po.query(listpage_profile_search_tcp_proxy_profiles_select_label_posxpath, listPage_profileSearch_tcpProxyProfiles_dropDown_item_posXpath, listPage_profileSearch_tcpProxyProfiles_input_itemContent_posXpath, - listPage_profileSearch_tcpProxyProfiles_buttonSearch_posId, + listpage_profile_search_tcp_proxy_profiles_button_search_posxpath, listPage_profilTable_tcpProxyProfiles_tableTbody_posXpath, listPage_profilTable_tcpProxyProfiles_tableHeader_posXpath, **kwargs) if result == [0, 0]: @@ -504,32 +509,32 @@ class TcpProxyProfiles: else: first_row, map_header_className = result # 第一行的勾选定位,给修改、删除使用 - self.first_row_checkBox_element = first_row.find_element(By.XPATH, "//span[@class='el-checkbox__input']") - self.first_row_ID_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']/span").text.strip() + self.first_row_checkBox_element = self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//input[@class='PrivateSwitchBase-input css-1m9pwf3']") + # self.first_row_ID_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']/span").text.strip() # print(map_header_className) # print("first_row=", first_row.text) # 需要提取ID、Name 信息 - first_row_id_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']//span").text.strip() + # first_row_id_content = first_row.find_element(By.XPATH, "//div[@class='table-status-item-id']//span").text.strip() #first_row_VsysID_class = map_header_className["Vsys ID"] #first_row_VsysID_content = first_row.find_element(By.XPATH, f"//td[contains(@class, '{first_row_VsysID_class}')]//div").text.strip() - first_row_Name_class = map_header_className["Name"] - first_row_Name_content = first_row.find_element(By.XPATH, f"//td[contains(@class, '{first_row_Name_class}')]//p").text.strip() - search_dict = {"ID": first_row_id_content, "Name": first_row_Name_content} + first_row_Name_content = self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='name']").text.strip() + + search_dict = {"Name": first_row_Name_content} print("first_row=", search_dict) search_key = list(kwargs.keys())[0] pytest_check.is_in(kwargs[search_key], search_dict[search_key], msg="所在行数{}".format(inspect.currentframe().f_lineno)) # # 不同操作后的断言,创建后、修改后、无断言 - # if require_assertion == 1: # 直接创建后,使用的断言 - # pytest_check.equal(first_row_Name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - # elif require_assertion == 2 and data["model"].strip().lower() == "modify": # 修改数据后,使用的断言 - # pytest_check.equal(first_row_Name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - # else: # 不适用断言 - # pass + if require_assertion == 1: # 直接创建后,使用的断言 + pytest_check.equal(first_row_Name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + elif require_assertion == 2 and data["model"].strip().lower() == "modify": # 修改数据后,使用的断言 + pytest_check.equal(first_row_Name_content, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + else: # 不适用断言 + pass # 强制点击清空查询按钮 - element_clear = self.driver.find_element(By.ID, listPage_profileSearch_tcpProxyProfiles_buttonClear_posId) - self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 + # element_clear = self.driver.find_element(By.XPATH, listPage_profileSearch_tcpProxyProfiles_buttonClear_posId) + # self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 return search_dict def _column_setting(self, column: (), column_flags=0): @@ -543,11 +548,9 @@ class TcpProxyProfiles: # 打开该列表 self._goto_subProfilePage() profiles = "advanced" - column_click = column[2:] - current_column = self.profiles_po.column_setting(mainPage_profileColumn_columnSetting_posId, - listPage_profileColumn_tcpProxyProfiles_button_columnAll_posXpath, - listPage_profileColumn_tcpProxyProfiles_button_cancel_posId, - listPage_profileColumn_tcpProxyProfiles_button_ok_posId, + column_click = column[1:] + current_column = self.profiles_po.column_setting(mainpage_profile_column_setting_posxpath, + listpage_profile_column_tcp_proxy_profiles_button_column_all_posxpath, profiles, column_flags, column_click) pytest_check.equal(current_column, column, msg="所在行数{}".format(inspect.currentframe().f_lineno)) @@ -571,10 +574,10 @@ class TcpProxyProfiles: :return: """ self._goto_subProfilePage() - header_content = self.profiles_po.language_change(mainPage_language_change_posXpath, - mainPage_language_chinese_posXpath, - mainPage_language_russian_posXpath, - mainPage_language_english_posXpath, language) + header_content = self.profiles_po.language_change(mainpage_language_change_posxpath, + mainpage_language_dropdown_item_posxpath.format(replace_language='中文'), + mainpage_language_dropdown_item_posxpath.format(replace_language='Русский'), + mainpage_language_dropdown_item_posxpath.format(replace_language='English'), language) # 断言 time.sleep(2) if language == 0: @@ -609,7 +612,7 @@ class TcpProxyProfiles: if c_type == "Mvsys" and f_type == "Tvsys": # Mvsys查看下级Tvsys数据 if c_supervisor == "open": # Mvsys开启监督模式,可查看下级Tvsys数据 self.first_row_checkBox_element.click() # 变量来自查询函数 - self.profiles_po.data_limit(listPage_profile_tcpProxyProfiles_editButton_posId, + self.profiles_po.data_limit(listpage_profile_tcp_proxy_profiles_edit_button_posxpath, listPage_profile_tcpProxyProfiles_delButton_posId) elif c_supervisor == "close": # Mvsys关闭监督模式,不可查看下级Tvsys数据 pytest_check.equal(result, 0, msg="所在行数{}".format(inspect.currentframe().f_lineno)) @@ -624,7 +627,7 @@ class TcpProxyProfiles: :return: """ self.first_row_checkBox_element.click() - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() time.sleep(2) self.driver.find_element(By.XPATH, "//div[@class='audit_log']/span").click() # 第一条记录勾选框 @@ -636,9 +639,9 @@ class TcpProxyProfiles: # 获取 operation content current_operation = self.driver.find_element(By.XPATH, "//div[@class='compare-code-title']//div[3]/div[2]").text.strip() pytest_check.equal(current_operation, operation, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() - if self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).is_displayed(): - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_cancel_posCss).click() + if self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).is_displayed(): + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() def _policy_create(self, profile_name): # 进入Intercept列表页 @@ -732,8 +735,8 @@ class TcpProxyProfiles: #data_vsysid = self.driver.find_element(By.XPATH, f"//div[contains(@class,'ly-table1')]//tbody/tr[{i+1}]/td[2]/div[@class='cell']//div").text.strip() # print("data_vsysid=", data_vsysid) # 校验当前数据是否为只能查看 - text_view = self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).text.strip() - class_view = self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).get_attribute("class") + text_view = self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).text.strip() + class_view = self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).get_attribute("class") # print("text_view=", text_view) if i == 0: pytest_check.equal(text_view, "Edit", msg="所在行数{}".format(inspect.currentframe().f_lineno)) @@ -753,7 +756,7 @@ class TcpProxyProfiles: isExist_lock = self.driver.element_isExist(By.XPATH , "//i[@class='iconfont icon-lock']") assert isExist_lock # 校验是否有内置标识 - isExist_builtin = self.driver.element_isExist(By.CSS_SELECTOR, ".icon > use") + isExist_builtin = self.driver.element_isExist(By.XPATH, ".icon > use") print("test=", isExist_builtin) assert isExist_builtin print("test=", self.driver.find_element(By.XPATH, f"//tr[{i+1}]//span[contains(@class,'el-checkbox__input')]")) @@ -779,7 +782,7 @@ class TcpProxyProfiles: print("开始校验create页面元素...") pytest_check.equal(create_page_header_except, create_page_headr_actual, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击 cancel 按钮 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_cancel_posCss).click() # 检验edit 页面元素 tmp_name = self._create(data) time.sleep(3) @@ -788,13 +791,13 @@ class TcpProxyProfiles: return 0 #点击勾选第一行选择框 self.first_row_checkBox_element.click() #变量来自查询函数 - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() #打开edit页面 + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() #打开edit页面 print("开始校验edit页面元素...") edit_page_header_except = "Edit TCP Proxy Profile" edit_page_headr_actual = self.driver.find_element(By.XPATH, tcpProxyProfiles_headerTitle_posXpath).text.strip() pytest_check.equal(edit_page_header_except, edit_page_headr_actual, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 点击 cancel 按钮 - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_cancel_posCss).click() self._query(data, require_assertion=0, Name=tmp_name) self._del() #删除数据 @@ -853,24 +856,25 @@ class TcpProxyProfiles: :param link_list_dict: :return: """ - try: - tmp_name = self._create(data) - time.sleep(3) - search_dict = self._query(data, require_assertion=0, Name=tmp_name) - # 勾选第一行 - self.first_row_checkBox_element.click() - # 调用公共的link创建逻辑 - Des_ID_list, Request_ID, Sou_ID_list = self.profiles_po.linkdata(link_list_dict, - listPage_profile_tcpProxyProfiles_linkButton_posId, - listPage_linkTips_tcpProxyProfiles_button_save_posXpath, - listPage_linkTips_tcpProxyProfiles_button_add_posXpath, - listPage_linkTips_tcpProxyProfiles_button_OK_posXpath) + tmp_name = self._create(data) + time.sleep(3) + search_dict = self._query(data, require_assertion=0, Name=tmp_name) + # 勾选第一行 + self.first_row_checkBox_element.click() + # 调用公共的link创建逻辑 + Des_ID_list, Request_ID, Sou_ID_list = self.profiles_po.linkdata(link_list_dict, + listPage_profile_tcpProxyProfiles_linkButton_posId, + listPage_linkTips_tcpProxyProfiles_button_save_posXpath, + listPage_linkTips_tcpProxyProfiles_button_add_posXpath, + listPage_linkTips_tcpProxyProfiles_button_OK_posXpath) + + try: self._query(data, require_assertion=1, ID=search_dict["ID"]) # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() # save data src_val_dict = self._get_value_dict(data) print("src_val_dict ======== ", src_val_dict) @@ -887,7 +891,7 @@ class TcpProxyProfiles: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() # save data des_val_dict = self._get_value_dict(data) print("des_val_dict ======== ", des_val_dict) @@ -903,7 +907,7 @@ class TcpProxyProfiles: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() # save data sou_value_dict = self._get_value_dict(data) print("sou_value_dict ======== ", sou_value_dict) @@ -917,7 +921,8 @@ class TcpProxyProfiles: # 判断是否一致 self.profiles_po.dicts_are_equal(sou_value_dict, update_one_value_dict, update_two_value_dict) except Exception as e: - assert e + print("Exception ============", e) + raise e finally: self._goto_tcp_proxy_page() self._delete_des(Des_ID_list, data) # 删除数据 @@ -925,6 +930,7 @@ class TcpProxyProfiles: self.profiles_po._del_policy_links(Request_ID) # 删除源vsys数据 self._delete_sou(Sou_ID_list, data) + @screenshot_on_failure def chk_lnk_butin_data_case(self, data, link_list_dict): # link 源数据修改测试 @@ -947,7 +953,7 @@ class TcpProxyProfiles: self._query(data, require_assertion=0, ID=ran_ele) # 勾选第一行 self.first_row_checkBox_element.click() - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() # save src data rev_data = self._get_value_dict(data) print("rev_data ============ " , rev_data) @@ -975,7 +981,7 @@ class TcpProxyProfiles: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() # save data des_val_dict = self._get_value_dict(data) print("des_val_dict ======== ", des_val_dict) @@ -991,7 +997,7 @@ class TcpProxyProfiles: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() # save data sou_value_dict = self._get_value_dict(data) print("sou_value_dict ======== ", sou_value_dict) @@ -1000,7 +1006,7 @@ class TcpProxyProfiles: Request_ID = self.profiles_po.click_pol_lnk_sync(Request_ID) time.sleep(3) # - Request_ID, update_one_value_dict, update_two_value_dict = self.chk_des_del_lnk_data(Des_ID_list, Request_ID, + Request_ID, update_one_value_dict, update_two_value_dict = self._mod_des_chk_syc(Des_ID_list, Request_ID, link_list_dict, data,) # 删除policy links记录 self.profiles_po._del_policy_links(Request_ID) @@ -1009,12 +1015,13 @@ class TcpProxyProfiles: # 判断是否一致 self.profiles_po.dicts_are_equal(sou_value_dict, update_one_value_dict, update_two_value_dict) except Exception as e: - print(e) + print("Exception ============", e) + raise e finally: - print("recover sou data ============= please wait") - self._rev_sou(data, rev_data, ran_ele) print("recover des data ============= please wait") self._rev_des(data, rev_data, ran_ele, link_list_dict) + print("recover sou data ============= please wait") + self._rev_sou(data, rev_data, ran_ele) @screenshot_on_failure @@ -1032,7 +1039,7 @@ class TcpProxyProfiles: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() update_one_value_dict = self._get_value_dict(data) # modify des data self._query(data, vsys_name_2=link_list_dict[link_index]["link_dst_vsys"], require_assertion=0, ID=Des_ID_list[0]) @@ -1073,7 +1080,7 @@ class TcpProxyProfiles: # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() update_two_value_dict = self._get_value_dict(data) time.sleep(3) @@ -1105,7 +1112,7 @@ class TcpProxyProfiles: self._query(data, require_assertion=1, ID=ran_ele) self.first_row_checkBox_element.click() time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() self._rev_data(rev_data) def _rev_des(self, data, rev_data, ran_ele, link_list_dict): @@ -1117,13 +1124,12 @@ class TcpProxyProfiles: passwd=link_list_dict[link_index]["passwd"]) profile_public = ProfilesPublicOperations(self.driver) profile_public.change_vsys(vsys_name=link_list_dict[link_index]["link_dst_vsys"]) - - self._goto_tcp_proxy_page() - self._query(data, vsys_name_2=link_list_dict[link_index]["link_dst_vsys"], require_assertion=1, ID=ran_ele) - self.first_row_checkBox_element.click() - time.sleep(1) - self.driver.find_element(By.ID, listPage_profile_tcpProxyProfiles_editButton_posId).click() - self._rev_data(rev_data) + self._goto_tcp_proxy_page() + self._query(data, vsys_name_2=link_list_dict[link_index]["link_dst_vsys"], require_assertion=1, ID=ran_ele) + self.first_row_checkBox_element.click() + time.sleep(1) + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() + self._rev_data(rev_data) def _rev_data(self, value_dict): """ @@ -1145,86 +1151,87 @@ class TcpProxyProfiles: 's_UserTimeout_switch': 'true', 's_userTimeout': '600'} """ - self.driver.find_element(By.ID, tcpProxyProfiles_input_Name_posId).clear() - self.driver.find_element(By.ID, tcpProxyProfiles_input_Name_posId).send_keys(value_dict['name']) + self.driver.find_element(By.ID, tcp_proxy_profiles_input_name_posxpath).clear() + self.driver.find_element(By.ID, tcp_proxy_profiles_input_name_posxpath).send_keys(value_dict['name']) self._operate_switch_rec(value_dict["enable_TCP_passthrough"], - tcpProxyProfiles_switch_enableTCPPassthrough_posXpath) + tcp_proxy_profiles_switch_enable_tcp_passthrough_posxpath) self._operate_switch_rec(value_dict["c_override_MSS"], - tcpProxyProfiles_switch_clientOverrideMSS_posXpath) + tcp_proxy_profiles_switch_server_override_mss_posxpath) if value_dict["c_override_MSS"]: self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientOverrideMSS_posXpath).clear() + tcp_proxy_profiles_input_client_override_mss_posxath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientOverrideMSS_posXpath).send_keys(value_dict['c_override_MSS']) + tcp_proxy_profiles_input_client_override_mss_posxath).send_keys(value_dict['c_override_MSS']) self._operate_switch_rec(value_dict["c_no_delay"], - tcpProxyProfiles_switch_clientNoDelay_posXpath) - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientTTL_posXpath).clear() - self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientTTL_posXpath).send_keys(value_dict['c_ttl']) + tcp_proxy_profiles_switch_client_nodelay_posxpath) + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_ttl_posxpath).clear() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_ttl_posxpath).send_keys(value_dict['c_ttl']) self._operate_switch_rec(value_dict["c_keepalive"], - tcpProxyProfiles_switch_clientKeepalive_posXpath) + tcp_proxy_profiles_switch_client_keepalive_posxpath) if value_dict["c_keepalive"]: self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientProbeNumber_posXpath).clear() + tcp_proxy_profiles_input_client_probe_number_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientProbeNumber_posXpath).send_keys(value_dict['c_probe_number']) + tcp_proxy_profiles_input_client_probe_number_posxpath).send_keys(value_dict['c_probe_number']) self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientIdleTime_posXpath).clear() + tcp_proxy_profiles_input_client_idle_time_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientIdleTime_posXpath).send_keys(value_dict['c_idle_time']) + tcp_proxy_profiles_input_client_idle_time_posxpath).send_keys(value_dict['c_idle_time']) self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientInterval_posXpath).clear() + tcp_proxy_profiles_input_client_interval_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientInterval_posXpath).send_keys(value_dict['c_interval']) + tcp_proxy_profiles_input_client_interval_posxpath).send_keys(value_dict['c_interval']) self._operate_switch_rec(value_dict["c_UserTimeout_switch"], - tcpProxyProfiles_switch_clientUserTimeout_posXpath) + tcp_proxy_profiles_switch_client_user_timeout_posxpath) if value_dict["c_UserTimeout_switch"]: self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientUserTimeout_posXpath).clear() + tcp_proxy_profiles_input_client_user_timeout_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_clientUserTimeout_posXpath).send_keys(value_dict['c_userTimeout']) + tcp_proxy_profiles_input_client_user_timeout_posxpath).send_keys(value_dict['c_userTimeout']) self._operate_switch_rec(value_dict["s_override_MSS"], - tcpProxyProfiles_switch_serverOverrideMSS_posXpath) + tcp_proxy_profiles_switch_server_override_mss_posxpath) self._operate_switch_rec(value_dict["s_no_delay"], - tcpProxyProfiles_switch_serverNoDelay_posXpath) + tcp_proxy_profiles_switch_server_nodelay_posxpath) self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverTTL_posXpath).clear() + tcp_proxy_profiles_input_server_ttl_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverTTL_posXpath).send_keys(value_dict['s_ttl']) + tcp_proxy_profiles_input_server_ttl_posxpath).send_keys(value_dict['s_ttl']) self._operate_switch_rec(value_dict["s_keepalive"], - tcpProxyProfiles_switch_serverKeepalive_posXpath) + tcp_proxy_profiles_switch_server_keepalive_posxpath) if value_dict["s_keepalive"]: self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverProbeNumber_posXpath).clear() + tcp_proxy_profiles_input_server_probe_number_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverProbeNumber_posXpath).send_keys(value_dict['s_probe_number']) + tcp_proxy_profiles_input_server_probe_number_posxpath).send_keys(value_dict['s_probe_number']) self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverIdleTime_posXpath).clear() + tcp_proxy_profiles_input_server_idle_time_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverIdleTime_posXpath).send_keys(value_dict['s_idle_time']) + tcp_proxy_profiles_input_server_idle_time_posxpath).send_keys(value_dict['s_idle_time']) self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverInterval_posXpath).clear() + tcp_proxy_profiles_input_server_interval_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverInterval_posXpath).send_keys(value_dict['s_interval']) + tcp_proxy_profiles_input_server_interval_posxpath).send_keys(value_dict['s_interval']) self._operate_switch_rec(value_dict["s_UserTimeout_switch"], - tcpProxyProfiles_switch_serverUserTimeout_posXpath) + tcp_proxy_profiles_switch_server_user_timeout_posxpath) if value_dict["s_UserTimeout_switch"]: self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverUserTimeout_posXpath).clear() + tcp_proxy_profiles_input_server_user_timeout_posxpath).clear() self.driver.find_element(By.XPATH, - tcpProxyProfiles_input_serverUserTimeout_posXpath).send_keys(value_dict['s_userTimeout']) + tcp_proxy_profiles_input_server_user_timeout_posxpath).send_keys(value_dict['s_userTimeout']) # 点击 OK - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_oK_posCss).click() - time.sleep(1) - if self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).is_displayed(): - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, tcp_proxy_profiles_button_ok_posxpath).click() + time.sleep(0.5) + if self.driver.element_isExist(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss): + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_warningSaveYes_posCss).click() + time.sleep(0.5) def _operate_switch_rec(self, switch_value="", element_position=""): """ @@ -1262,7 +1269,7 @@ class TcpProxyProfiles: "//div[@class='el-checkbox-group']//span[@class='el-checkbox__input']/span[@class='el-checkbox__inner']").click() # 确认删除 self.driver.find_element(By.XPATH, "//p[normalize-space(text())='Delete']").click() - self.driver.find_element(By.CSS_SELECTOR, listPage_dialogTips_tcpProxyProfiles_button_yes_posCss).click() + self.driver.find_element(By.XPATH, listpage_dialog_tips_tcp_proxy_profiles_button_yes_posxpath).click() def _delete_source(self, Sou_ID_list, data): self.driver.find_element(By.ID, 'select-label').click() @@ -1275,12 +1282,12 @@ class TcpProxyProfiles: "//div[@class='el-checkbox-group']//span[@class='el-checkbox__input']/span[@class='el-checkbox__inner']").click() # 确认删除 self.driver.find_element(By.XPATH, "//p[normalize-space(text())='Delete']").click() - self.driver.find_element(By.CSS_SELECTOR, listPage_dialogTips_tcpProxyProfiles_button_yes_posCss).click() + self.driver.find_element(By.XPATH, listpage_dialog_tips_tcp_proxy_profiles_button_yes_posxpath).click() @screenshot_on_failure def _goto_tcp_proxy_page(self, vsys_name_2=""): # 菜单操作,定位到ssl_decryption_keyrings列表页 - # self.driver.find_element(By.CSS_SELECTOR, mainPage_navigationBar_logo_posCss).click() + # self.driver.find_element(By.XPATH, mainPage_navigationBar_logo_posCss).click() self.driver.find_element(By.ID, mainPage_firstLevelMenu_profiles_posId).click() element = self.driver.find_element(By.ID, mainPage_secondLevelMenu_tcpProxyProfiles_posId) self.driver.execute_script("arguments[0].click()", element) # 强制点击 @@ -1308,55 +1315,55 @@ class TcpProxyProfiles: "s_userTimeout": "400->不修改", ''' value_dict = {} - value_name = self.driver.find_element(By.ID, tcpProxyProfiles_input_Name_posId).get_attribute("value") + value_name = self.driver.find_element(By.ID, tcp_proxy_profiles_input_name_posxpath).get_attribute("value") value_dict['name'] = value_name - enable_TCP_passthrough = self.driver.find_element(By.XPATH,tcpProxyProfiles_switch_enableTCPPassthrough_posXpath).get_attribute("aria-checked") + enable_TCP_passthrough = self.driver.find_element(By.XPATH,tcp_proxy_profiles_switch_enable_tcp_passthrough_posxpath).get_attribute("aria-checked") value_dict['enable_TCP_passthrough'] = enable_TCP_passthrough - c_override_MSS = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_clientOverrideMSS_posXpath).get_attribute("aria-checked") + c_override_MSS = self.driver.find_element(By.XPATH, tcp_proxy_profiles_switch_server_override_mss_posxpath).get_attribute("aria-checked") value_dict['c_override_MSS'] = c_override_MSS if c_override_MSS: - c_overrideMSS = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientOverrideMSS_posXpath).get_attribute("value") + c_overrideMSS = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_override_mss_posxath).get_attribute("value") value_dict['c_overrideMSS'] = c_overrideMSS - c_no_delay = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_clientNoDelay_posXpath).get_attribute("aria-checked") + c_no_delay = self.driver.find_element(By.XPATH, tcp_proxy_profiles_switch_client_nodelay_posxpath).get_attribute("aria-checked") value_dict['c_no_delay'] = c_no_delay - c_ttl = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_clientTTL_posXpath).get_attribute("value") + c_ttl = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_ttl_posxpath).get_attribute("value") value_dict['c_ttl'] = c_ttl - c_keepalive = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_clientKeepalive_posXpath).get_attribute("aria-checked") + c_keepalive = self.driver.find_element(By.XPATH, tcp_proxy_profiles_switch_client_keepalive_posxpath).get_attribute("aria-checked") value_dict['c_keepalive'] = c_keepalive if c_keepalive: - c_probe_number = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_clientProbeNumber_posXpath).get_attribute("value") + c_probe_number = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_probe_number_posxpath).get_attribute("value") value_dict['c_probe_number'] = c_probe_number - c_idle_time = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_clientIdleTime_posXpath).get_attribute("value") + c_idle_time = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_idle_time_posxpath).get_attribute("value") value_dict['c_idle_time'] = c_idle_time - c_interval = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_clientInterval_posXpath).get_attribute("value") + c_interval = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_interval_posxpath).get_attribute("value") value_dict['c_interval'] = c_interval - c_UserTimeout_switch = self.driver.find_element(By.XPATH,tcpProxyProfiles_switch_clientUserTimeout_posXpath).get_attribute("aria-checked") + c_UserTimeout_switch = self.driver.find_element(By.XPATH, tcp_proxy_profiles_switch_client_user_timeout_posxpath).get_attribute("aria-checked") value_dict['c_UserTimeout_switch'] = c_UserTimeout_switch if c_UserTimeout_switch: - c_userTimeout = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_clientUserTimeout_posXpath).get_attribute("value") + c_userTimeout = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_client_user_timeout_posxpath).get_attribute("value") value_dict['c_userTimeout'] = c_userTimeout - s_override_MSS = self.driver.find_element(By.XPATH,tcpProxyProfiles_switch_serverOverrideMSS_posXpath).get_attribute("aria-checked") + s_override_MSS = self.driver.find_element(By.XPATH, tcp_proxy_profiles_switch_server_override_mss_posxpath).get_attribute("aria-checked") value_dict['s_override_MSS'] = s_override_MSS - s_no_delay = self.driver.find_element(By.XPATH, tcpProxyProfiles_switch_serverNoDelay_posXpath).get_attribute("aria-checked") + s_no_delay = self.driver.find_element(By.XPATH, tcp_proxy_profiles_switch_server_nodelay_posxpath).get_attribute("aria-checked") value_dict['s_no_delay'] = s_no_delay - s_ttl = self.driver.find_element(By.XPATH, tcpProxyProfiles_input_serverTTL_posXpath).get_attribute("value") + s_ttl = self.driver.find_element(By.XPATH, tcp_proxy_profiles_input_server_ttl_posxpath).get_attribute("value") value_dict['s_ttl'] = s_ttl - s_keepalive = self.driver.find_element(By.XPATH,tcpProxyProfiles_switch_serverKeepalive_posXpath).get_attribute("aria-checked") + s_keepalive = self.driver.find_element(By.XPATH,tcp_proxy_profiles_switch_server_keepalive_posxpath).get_attribute("aria-checked") value_dict['s_keepalive'] = s_keepalive if s_keepalive: - s_probe_number = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_serverProbeNumber_posXpath).get_attribute("value") + s_probe_number = self.driver.find_element(By.XPATH,tcp_proxy_profiles_input_server_probe_number_posxpath).get_attribute("value") value_dict['s_probe_number'] = s_probe_number - s_idle_time = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_serverIdleTime_posXpath).get_attribute("value") + s_idle_time = self.driver.find_element(By.XPATH,tcp_proxy_profiles_input_server_idle_time_posxpath).get_attribute("value") value_dict['s_idle_time'] = s_idle_time - s_interval = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_serverInterval_posXpath).get_attribute("value") + s_interval = self.driver.find_element(By.XPATH,tcp_proxy_profiles_input_server_interval_posxpath).get_attribute("value") value_dict['s_interval'] = s_interval - s_UserTimeout_switch = self.driver.find_element(By.XPATH,tcpProxyProfiles_switch_serverUserTimeout_posXpath).get_attribute("aria-checked") + s_UserTimeout_switch = self.driver.find_element(By.XPATH,tcp_proxy_profiles_switch_server_user_timeout_posxpath).get_attribute("aria-checked") value_dict['s_UserTimeout_switch'] = s_UserTimeout_switch if s_UserTimeout_switch: - s_userTimeout = self.driver.find_element(By.XPATH,tcpProxyProfiles_input_serverUserTimeout_posXpath).get_attribute("value") + s_userTimeout = self.driver.find_element(By.XPATH,tcp_proxy_profiles_input_server_user_timeout_posxpath).get_attribute("value") value_dict['s_userTimeout'] = s_userTimeout # 点击 OK - self.driver.find_element(By.CSS_SELECTOR, tcpProxyProfiles_button_cancel_posCss).click() + self.driver.find_element(By.XPATH, tcpProxyProfiles_button_cancel_posCss).click() return value_dict @@ -1397,16 +1404,121 @@ class TcpProxyProfiles: def _audit_log_all_operation(self, data): ran_name = self._create(data) try: - time.sleep(0.5) + time.sleep(1) + profiles_type = "TCP Proxy Profile" search_dict = self._query(data, Name=ran_name) + self._audit_log_operation(profiles_type, search_dict["ID"], operation_type='Create') + self._query(data, Name=ran_name) + self._audit_log_operation(profiles_type, search_dict["ID"], operation_type='Query Verbose') + self._query(data, Name=ran_name) self._modify(data) + self._query(data, Name=ran_name) + self._audit_log_operation(profiles_type, search_dict["ID"], operation_type='Edit') + self._goto_subProfilePage() + self.profiles_po._audit_log_query_list(profiles_type, search_dict["ID"], operation_type='Query List') + except Exception as e: + raise e + finally: + self._query(data, Name=ran_name) + self._del() + self.profiles_po._audit_log_delete(profiles_type, search_dict["ID"], operation_type='Delete') + + def _audit_log_operation(self, profiles_type, search_id, operation_type): + # 选中第一行 + self.first_row_checkBox_element.click() + # 点击编辑 + self.driver.find_element(By.ID, listpage_profile_tcp_proxy_profiles_edit_button_posxpath).click() + if operation_type == 'Query Verbose': + click_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + if operation_type == 'Create': + # 创建时间 + compare_time = self.driver.find_element(By.XPATH, + tcp_proxy_profiles_page_create_time_posXpath).text + elif operation_type == 'Edit': + # 修改时间 + compare_time = self.driver.find_element(By.XPATH, + tcp_proxy_profiles_page_modify_time_posXpath).text + # 用户 + user_name = self.driver.find_element(By.XPATH, + "//div[@class='bifang-proxy-id item-content user_name_font']").text + + if operation_type == 'Query Verbose': + self.profiles_po.search_compare_item(profiles_type, search_id, operation_type=operation_type, + operation_flag=0) + else: + # 对比 Audit log 详情页 + self.driver.find_element(By.XPATH, tcp_proxy_profiles_page_audit_logs_posXpath).click() + self.driver.find_element(By.XPATH, "(//span[@class='el-checkbox__inner'])[2]").click() + # 点击 Compare + self.driver.find_element(By.XPATH, tcp_proxy_profiles_page_audit_logs_compare_posXpath).click() + + if operation_type == 'Create': + self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, compare_time, + operation_flag=0) + elif operation_type == 'Edit': + self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, compare_time, + operation_flag=1) + # 对比系统 audit_log 页 + self.profiles_po.search_compare_item(profiles_type, search_id, operation_type=operation_type, + operation_flag=0) + time.sleep(1) + + if operation_type == 'Create': + # 点击 Compare 对比 + self.driver.find_element(By.XPATH, + "//button[@class='el-button btn-style el-button--info el-button--mini']/span[normalize-space(text())='Compare']").click() + self.driver.find_element(By.ID, list_page_audit_log_search_button_compare_posId).click() + + self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, compare_time, + operation_flag=0) + elif operation_type == 'Edit': + # 点击 Compare 对比 + self.driver.find_element(By.XPATH, + "//button[@class='el-button btn-style el-button--info el-button--mini']/span[normalize-space(text())='Compare']").click() + # 对比 V.1 + self.driver.find_element(By.XPATH, + "(//td[contains(@class, 'is-left el-table-column--selection')])[last()]").click() + self.driver.find_element(By.ID, list_page_audit_log_search_button_compare_posId).click() + self.profiles_po._check_audit_log_system_page(profiles_type, user_name, search_id, compare_time, + operation_flag=1) + elif operation_type == 'Query Verbose': time.sleep(0.5) + # 点击 Compare 对比 + self.driver.find_element(By.XPATH, + "(//button[@class='el-button btn-style el-button--info el-button--mini'])[1]").click() + self.profiles_po._check_audit_log_detail_page(profiles_type, user_name, search_id, click_time, + operation_flag=2) + + def _all_search_fields(self, data): + # 新建数据 + ran_name = self._create(data) + # 名字查询 + search_dict = self._query(data, Name=ran_name) + try: + # ID 唯一查询 + self._query(data, ID=search_dict['ID']) + # 只有一行记录并且ID一致 + id_eles = self.driver.find_elements(By.XPATH, "//div[@class='table-status-item-id']") + id_ele_lst = [e.text for e in id_eles] + pytest_check.equal(len(id_ele_lst), 1, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + for id_ele in id_ele_lst: + pytest_check.equal(id_ele, search_dict['ID'], msg="所在行数{}".format(inspect.currentframe().f_lineno)) + + # 名字模糊查询 + search_name = self.profiles_po.random_substring(ran_name) + self._query(data, Name=search_name) + # 可以有多行记录都需要包含在名字里面 + name_eles = self.driver.find_elements(By.XPATH, "//td[contains(@class,'el-table_1_column_2 is-left')]") + name_ele_lst = [e.text for e in name_eles] + for name_ele in name_ele_lst: + pytest_check.equal(search_name in name_ele, True, msg="所在行数{}".format(inspect.currentframe().f_lineno)) except Exception as e: + print("Exception ============", e) raise e finally: + # 删除数据 self._query(data, Name=ran_name) self._del() - self.profiles_po.audit_log_view("TCP Proxy Profile", search_dict["ID"]) create = _create query = _query @@ -1444,9 +1556,9 @@ if __name__ == '__main__': ) a.get("http://192.168.44.72") a.maximize_window() - a.find_element(By.XPATH,"//*[@id='app']/div/div[1]/div[2]/div[2]/div[1]/div/input").send_keys("AUTO_UI_TEST_KG") - a.find_element(By.XPATH,"//*[@id='app']/div/div[1]/div[2]/div[2]/div[2]/div/input").send_keys("kongweibin1") - a.find_element(By.ID,"login").click() + a.find_element(By.XPATH, loginpage_username_posxpath).send_keys("AUTO_UI_TEST_KG") + a.find_element(By.XPATH, loginpage_passwd_posxpath).send_keys("kongweibin1") + a.find_element(By.XPATH, login_page_sign_in_posxpath).click() time.sleep(2) # 测试修改数据 r = TcpProxyProfiles(a) @@ -1455,45 +1567,47 @@ if __name__ == '__main__': # model=0/1 ====0:单个 1group # type =IMSI/Phone_Number/IMEI data= { - "ids": "创建tcp_proxy_profiles数据后修改enable_tcp_passthrough", - "model": "modify", - "enable_TCP_passthrough": "off->on", - "c_override_MSS": "off->off", - "c_no_delay": "on->on", - "c_ttl": "70->90", - "c_keepalive": "on->on", - "c_probe_number":"8->20", - "c_idle_time":"30->70", - "c_interval":"15->75", - "c_UserTimeout_switch": "on->on", - "c_userTimeout":"600->700", - - "s_override_MSS": "off->off", - "s_no_delay": "on->on", - "s_ttl": "75->100", - "s_keepalive": "on->on", - "s_probe_number": "8->20", - "s_idle_time": "30->70", - "s_interval": "15->75", - "s_UserTimeout_switch": "on->on", - "s_userTimeout": "600->700", + "ids": "创建tcp_proxy_profiles数据修改输入内容及开关状态", + "model": "modify", + "enable_TCP_passthrough": "on->off", + "c_override_MSS": "on->不修改", + "c_overrideMSS": "536->1000", + "c_no_delay": "on->off", + "c_ttl": "1->200", + "c_keepalive": "on->不修改", + "c_probe_number":"1->200", + "c_idle_time":"30->6000", + "c_interval":"15->70", + "c_UserTimeout_switch": "on->不修改", + "c_userTimeout":"200->50000", + + "s_override_MSS": "on->不修改", + "s_overrideMSS": "1460->600", + "s_no_delay": "on->off", + "s_ttl": "255->20", + "s_keepalive": "on->不修改", + "s_probe_number":"222->19", + "s_idle_time":"7200->100", + "s_interval":"75->30", + "s_UserTimeout_switch": "on->不修改", + "s_userTimeout": "60000->400" } # 测试link - link_parse = configparser.ConfigParser() - link_parse_dir = os.path.join(workdir, "config", "linkcluster.ini") - link_parse.read(link_parse_dir, encoding="utf-8") - link_list_dict = [] - link_list = [2] # 可取值 1、2、 3、4、5 #这些取值来自linkcluster.ini配置文件 - for i in link_list: - tmp_dict = {} - link_index = "link_{}".format(i) - tmp_dict["link_dst_cluster"] = link_parse.get(link_index, "link_dst_cluster") - tmp_dict["link_dst_vsys"] = link_parse.get(link_index, "link_dst_vsys") - tmp_dict["url"] = link_parse.get(link_index, "url") - tmp_dict["username"] = link_parse.get(link_index, "username") - tmp_dict["passwd"] = link_parse.get(link_index, "passwd") - link_list_dict.append(copy.deepcopy(tmp_dict)) - print(link_list_dict) + # link_parse = configparser.ConfigParser() + # link_parse_dir = os.path.join(workdir, "config", "linkcluster.ini") + # link_parse.read(link_parse_dir, encoding="utf-8") + # link_list_dict = [] + # link_list = [2] # 可取值 1、2、 3、4、5 #这些取值来自linkcluster.ini配置文件 + # for i in link_list: + # tmp_dict = {} + # link_index = "link_{}".format(i) + # tmp_dict["link_dst_cluster"] = link_parse.get(link_index, "link_dst_cluster") + # tmp_dict["link_dst_vsys"] = link_parse.get(link_index, "link_dst_vsys") + # tmp_dict["url"] = link_parse.get(link_index, "url") + # tmp_dict["username"] = link_parse.get(link_index, "username") + # tmp_dict["passwd"] = link_parse.get(link_index, "passwd") + # link_list_dict.append(copy.deepcopy(tmp_dict)) + # print(link_list_dict) """ 传参查考 link_list_dict = [ { @@ -1505,4 +1619,4 @@ if __name__ == '__main__': }, ] """ - r.chk_lnk_butin_data_case(data, link_list_dict=link_list_dict) + r.tcp_proxy_profiles_case(data) |
