diff options
| author | zhz <[email protected]> | 2024-11-20 19:35:42 +0800 |
|---|---|---|
| committer | zhz <[email protected]> | 2024-11-20 19:35:42 +0800 |
| commit | 09045588bd5ebf82ebc5b606cc29bc08bc10312d (patch) | |
| tree | 1b0d7d79cffaadc585767e503a74032aca1ef628 | |
| parent | 7ad211f6ab01547007214d0b1f0ac0423b6ecd91 (diff) | |
dns record 适配
| -rw-r--r-- | cases/profiles/test_dns_records.py | 6 | ||||
| -rw-r--r-- | cases/profiles/test_traffic_mirroring_profiles.py | 11 | ||||
| -rw-r--r-- | common/ui_common/profiles/dns_records.py | 142 | ||||
| -rw-r--r-- | common/ui_common/profiles/response_pages.py | 122 | ||||
| -rw-r--r-- | common/ui_common/profiles/traffic_mirroring_profiles.py | 314 |
5 files changed, 368 insertions, 227 deletions
diff --git a/cases/profiles/test_dns_records.py b/cases/profiles/test_dns_records.py index 121a39a5..43461d32 100644 --- a/cases/profiles/test_dns_records.py +++ b/cases/profiles/test_dns_records.py @@ -54,12 +54,12 @@ class TestDnsRecords: time.sleep(2) dnsRecords.check_queryConditions(Name=dnsRecords_name) time.sleep(1) - dnsRecords_dict2 = dnsRecords.query(data, require_assertion=2, UUID=dnsRecords_dict["UUID"]) + dnsRecords_dict2 = dnsRecords.query(data, require_assertion=2, Name=dnsRecords_name) # dnsRecords.audit_log("Edit") - dnsRecords.query(data, require_assertion=2, UUID=dnsRecords_dict["UUID"]) + dnsRecords.query(data, require_assertion=2, Name=dnsRecords_name) dnsRecords.delete() time.sleep(1) - dnsRecords.check_queryConditions(UUID=dnsRecords_dict["ID"]) + dnsRecords.check_queryConditions(Name=dnsRecords_name) #name输入框测试 @pytest.mark.parametrize( diff --git a/cases/profiles/test_traffic_mirroring_profiles.py b/cases/profiles/test_traffic_mirroring_profiles.py index b00c10f7..b57536d8 100644 --- a/cases/profiles/test_traffic_mirroring_profiles.py +++ b/cases/profiles/test_traffic_mirroring_profiles.py @@ -15,6 +15,7 @@ data = ReadData() class TestTrafficMirroringProfiles: @pytest.mark.parametrize("data", data.read_data_profiles("traffic_mirroring_profiles.json"), ids=data.generate_id) + @pytest.mark.curd def test_trafficMirroringProfiles(self, demo_fixture, data): trafficMirroringProfiles = TrafficMirroringProfiles(demo_fixture) trafficMirroringProfiles.traffic_morroring_profiles_case(data) @@ -158,11 +159,12 @@ class TestTrafficMirroringProfiles: time.sleep(1) #列设置测试 + @pytest.mark.curd def test_column_setting(self, demo_fixture): - column_allname = ["ID", "Vsys ID", "Name", "VLAN ID", "Reference Count", "Modified Time", "Last Modified By"] - column_requiredname = ["ID", "Name"] - column_defaultname = ["ID", "Name", "VLAN ID", "Reference Count", "Modified Time", "Last Modified By"] - column_name = ["ID", "Name", "Reference Count", "Last Modified By"] + column_allname = ["Vsys ID", "Name", "VLAN ID", "Usage", "Modified Time", "Last Modified By"] + column_requiredname = ["Name"] + column_defaultname = ["Name", "VLAN ID", "Usage", "Modified Time", "Last Modified By"] + column_name = ["Name", "Usage", "Last Modified By"] trafficMirroringProfiles = TrafficMirroringProfiles(demo_fixture) trafficMirroringProfiles.column_setting(column_defaultname, column_flags=0) trafficMirroringProfiles.column_setting(column_requiredname, column_flags=1) @@ -175,6 +177,7 @@ class TestTrafficMirroringProfiles: trafficMirroringProfiles.turn_pages(2) # 切换语言测试 + @pytest.mark.curd def test_language_change(self, demo_fixture): trafficMirroringProfiles = TrafficMirroringProfiles(demo_fixture) trafficMirroringProfiles.language_change(2) diff --git a/common/ui_common/profiles/dns_records.py b/common/ui_common/profiles/dns_records.py index 03f19542..12fc328e 100644 --- a/common/ui_common/profiles/dns_records.py +++ b/common/ui_common/profiles/dns_records.py @@ -41,9 +41,9 @@ class DnsRecords: self._search(data, require_assertion=1, Name=self.random_name) #创建后查询 self._modify(data) time.sleep(2) - self._search(data, require_assertion=2, UUID=self.first_row_uuid_content) # 修改后查询 + self._search(data, require_assertion=2, Name=self.random_name) # 修改后查询 self._del() #删除数据 - self._check_queryConditions(UUID=self.first_row_uuid_content) + self._check_queryConditions(Name=self.random_name) time.sleep(1) @screenshot_on_failure @@ -177,8 +177,8 @@ class DnsRecords: #输出item、保存、添加下一个 # TODO values = items[i].split("->")[model] for value in values: - self.driver.find_element(By.XPATH, dns_records_profile_page_input_input_item_name_posxpath).send_keys(value) - self.driver.find_element(By.XPATH, dns_records_profile_page_button_save_item_by_name_posxpath).click() + self.driver.find_element(By.XPATH, dns_records_profile_page_input_input_item_name_posxpath.format(replace_name="")).send_keys(value) + self.driver.find_element(By.XPATH, dns_records_profile_page_button_save_item_by_name_posxpath.format(replace_name="")).click() if data["values_format"][i].split("->")[model] == "false": error_posXpath = "//div[@class='MuiFormHelperText-root css-1y20gt9']" pytest_check.equal(self.driver.find_element(By.XPATH, error_posXpath).text.strip(), "format error", @@ -202,7 +202,7 @@ class DnsRecords: items: list = data["values"] for i in range(len(items)): if items[i].split("->")[-1] == "": #modify数据中->右侧为空(删除此数据) - element_item_del = dns_records_profile_page_button_del_item_by_name_posxpath + element_item_del = dns_records_profile_page_button_del_item_by_name_posxpath.format(replace_name=items[i].split("->")[0]) self.driver.find_element(By.XPATH, element_item_del).click() continue if items[i].split("->")[-1] == "不修改": #modify数据中->右侧为不修改(不修改此数据) @@ -210,10 +210,12 @@ class DnsRecords: if items[i].split("->")[0] == "": #modify数据中->左侧为空(创建的数据为空,直接添加item) self.driver.find_element(By.XPATH, dns_records_profile_page_button_add_item_posxpath).click() #点击添加按钮 # 添加item时,text()=空,xpath可以定位到 - item_input_posCss = dns_records_profile_page_input_input_item_name_posxpath.replace("replaceName", "") - item_save_posCss = dns_records_profile_page_button_save_item_by_name_posxpath.replace("replaceName", items[i].split("->")[-1]) # ->修改中会此表标识 + item_input_posCss = dns_records_profile_page_input_input_item_name_posxpath.format(replace_name="") + item_save_posCss = dns_records_profile_page_button_save_item_by_name_posxpath.format(replace_name="") # ->修改中会此表标识 + values = items[i].split("->")[-1] # 输入item,保存 - self.driver.find_element(By.XPATH, item_input_posCss).send_keys(items[i].split("->")[-1]) + for value in values: + self.driver.find_element(By.XPATH, item_input_posCss).send_keys(value) self.driver.find_element(By.XPATH, item_save_posCss).click() if "reverse_case" in data.keys(): if data["reverse_case"] == "samefrommodify": # 修改用例时,value中含有重复数据判断使用 @@ -232,17 +234,18 @@ class DnsRecords: break continue #直接编辑item项内容,在原有的item中编辑值 - # item_edit_posCss = dns_records_profile_page_button_edit_item_by_name_posxpath - # item_input_posCss = dns_records_profile_page_input_input_item_name_posxpath + # item_edit_posCss = dns_records_profile_page_button_edit_item_by_name_posxpath.format(replace_name=items[i].split("->")[0]) + # self.driver.find_element(By.XPATH, item_edit_posCss).click() # self.driver.find_element(By.XPATH, item_input_posCss).clear() # 点击删除在重新新增一个 - self.driver.find_element(By.XPATH, dns_records_profile_page_button_del_item_by_name_posxpath).click() + self.driver.find_element(By.XPATH, dns_records_profile_page_button_del_item_by_name_posxpath.format(replace_name=items[i].split("->")[0])).click() self.driver.find_element(By.XPATH, dns_records_profile_page_button_add_item_posxpath).click() values = items[i].split("->")[-1] for value in values: - self.driver.find_element(By.XPATH, dns_records_profile_page_input_input_item_name_posxpath).send_keys(value) - self.driver.find_element(By.XPATH, dns_records_profile_page_button_save_item_by_name_posxpath).click() + item_input_posCss = dns_records_profile_page_input_input_item_name_posxpath.format(replace_name="") + self.driver.find_element(By.XPATH, item_input_posCss).send_keys(value) + self.driver.find_element(By.XPATH, dns_records_profile_page_button_save_item_by_name_posxpath.format(replace_name="")).click() @screenshot_on_failure def listPageBottom_allSelect(self): @@ -334,24 +337,25 @@ class DnsRecords: first_row = rows[0] """ #第一行的勾选定位,给修改、删除使用 - self.first_row_checkBox_element = first_row.find_element(By.XPATH, "//input[@class='MuiCheckbox-input css-1jj0cvj']") - column_allname = ["Vsys ID", "UUID", "Name", "Type", "Values", "Description", "Usage", "Modified Time", "Last Modified By"] - self._column_setting_help(column_allname, column_flags=2) - self.first_row_uuid_content = self.driver.find_element(By.XPATH, "//div[@data-field='uuid' and @data-colindex=3]").text.strip() - first_row_uuid_content = self.driver.find_element(By.XPATH, "//div[@data-field='uuid' and @data-colindex=3]").text.strip() - #first_row_VsysID_class = map_header_className["Vsys ID"] + self.first_row_checkBox_element = self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//input[@class='PrivateSwitchBase-input css-1m9pwf3']") + # column_allname = ["Vsys ID", "UUID", "Name", "Type", "Values", "Description", "Usage", "Modified Time", "Last Modified By"] + # self._column_setting_help(column_allname, column_flags=2) + # self.first_row_uuid_content = self.driver.find_element(By.XPATH, "//div[@data-field='uuid' and @data-colindex=3]").text.strip() + # first_row_uuid_content = self.driver.find_element(By.XPATH, "//div[@data-field='uuid' and @data-colindex=3]").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}')]//span").text.strip() # first_row_Name_class = map_header_className["Name"] - first_row_Name_content = self.driver.find_element(By.XPATH, f"//div[@data-field='name' and @data-colindex=4]").text.strip() + first_row_Name_content = self.driver.find_element(By.XPATH, "//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[@data-field='type' and @data-colindex=5]").text.strip() + first_row_Type_content = self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='type']").text.strip() # first_row_Values_class = map_header_className["Values"] - first_row_Values_contents = self.driver.find_elements(By.XPATH, f"//div[@data-field='Vales' and @data-colindex=6]") + first_row_Values_contents = self.driver.find_elements(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='Values']") values_list = [] for value in first_row_Values_contents: values_list.append(value.text.strip()) - print(first_row_uuid_content, first_row_Name_content, first_row_Type_content, values_list) - search_dict = {"UUID": first_row_uuid_content, "Name": first_row_Name_content} + # print(first_row_uuid_content, first_row_Name_content, first_row_Type_content, values_list) + # search_dict = {"UUID": first_row_uuid_content, "Name": first_row_Name_content} + search_dict = {"Name": first_row_Name_content} #不同操作后的断言,创建后、修改后、无断言 if require_assertion == 1: #直接创建后,使用的断言 create_values_list = [i.split("->")[0] for i in data["values"] if i.split("->")[0] != ""] # 兼容modify中->的标识值 @@ -551,8 +555,8 @@ class DnsRecords: def _policy_create(self, profile_name): # 进入security列表页 self._goto_vsysPage() - self.driver.find_element(By.ID, mainPage_firstLevelMenu_Policy_posId).click() - self.driver.find_element(By.ID, mainPage_secondLevelMenu_Security_posId).click() + self.driver.find_element(By.XPATH, mainpage_first_level_menu_policy_posxpath).click() + self.driver.find_element(By.XPATH, mainPage_secondLevelMenu_Security_posId).click() # 创建 rule policy_name = self.profiles_po.policy_create("Security_Deny", profile_name, listPage_security_create_button_posId, security_create_Name_input_frame_PosXpath, security_create_action_deny_label_posId, security_create_add_source_IPAddress_button_click_posXpath, security_button_oK_posId, security_button_cancel_posId, @@ -565,8 +569,8 @@ class DnsRecords: def _policy_query(self, **kwargs): # 打开该列表 self._goto_vsysPage() - self.driver.find_element(By.ID, mainPage_firstLevelMenu_Policy_posId).click() - self.driver.find_element(By.ID, mainPage_secondLevelMenu_Security_posId).click() + self.driver.find_element(By.XPATH, mainpage_first_level_menu_policy_posxpath).click() + self.driver.find_element(By.XPATH, mainPage_secondLevelMenu_Security_posId).click() # first_row查询到的第一行内容。map_header_className为需要使用的到字典,用来提取第一行的结果。 result = self.profiles_po.query(listPage_securitySearch_selectLabel_posId, listPage_securitySearch_dropDown_item_posXpath, @@ -579,7 +583,7 @@ class DnsRecords: 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_checkBox_element = self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//input[@class='PrivateSwitchBase-input css-1m9pwf3']") def _policy_del(self): """ @@ -596,29 +600,33 @@ class DnsRecords: def _referenceCount_view(self, **kwargs): self._goto_subProfilePage() first_row, map_header_className = \ - self.profiles_po.query(listPage_profileSearch_dnsRecords_selectLabel_posId, - listPage_profileSearch_dnsRecords_dropDown_item_posXpath, - listPage_profileSearch_dnsRecords_input_itemContent_posXpath, - listPage_profileSearch_dnsRecords_buttonSearch_posId, - listPage_profilTable_dnsRecords_tableTbody_posXpath, - listPage_profilTable_dnsRecords_tableHeader_posXpath, - listPage_profileSearch_subProfiles_dropDown_typeItem_posXpath=listPage_profileSearch_dnsRecords_dropDown_typeItem_posXpath, **kwargs) - first_row_checkBox_element = first_row.find_element(By.XPATH, "//span[@class='el-checkbox__input']") - first_row_referenceCount_class = map_header_className["Reference Count"] - print("first_row_referenceCount_class=", first_row_referenceCount_class) + self.profiles_po.query(listpage_profile_search_dns_records_select_label_posxpath, + listpage_profile_search_dns_records_drop_down_item_posxpath, + listpage_profile_search_dns_records_input_item_content_posxpath, + listpage_profile_search_dns_records_button_search_posxpath, + listpage_profile_table_dns_records_table_tbody_posxpath, + listpage_profile_table_dns_records_table_header_posxpath, + listPage_profileSearch_subProfiles_dropDown_typeItem_posXpath=listpage_profile_search_dns_records_drop_down_item_posxpath, **kwargs) + first_row_checkBox_element = self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//input[@class='PrivateSwitchBase-input css-1m9pwf3']") + # first_row_referenceCount_class = map_header_className["Reference Count"] + # print("first_row_referenceCount_class=", first_row_referenceCount_class) first_row_checkBox_element.click() - if first_row.find_element(By.XPATH, - f"//td[contains(@class, '{first_row_referenceCount_class}')]/div").get_attribute("value") != "0": + if self.driver.find_element(By.XPATH, + "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='referenced_by']//button").text.strip() != "0": print("数据被引用") # 校验该条数据是否可删除 - text_del = self.driver.find_element(By.ID, listPage_profile_dnsRecords_delButton_posId).get_attribute("class") - disabled_class = text_del.split(" ")[-1].strip() - pytest_check.equal(disabled_class, "is-disabled", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + text_del = self.driver.find_element(By.XPATH, + listpage_profile_response_pages_del_button_posxpath).get_attribute( + "class") + print("text_del=", text_del) + pytest_check.is_in("Mui-disabled", text_del, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 校验是否弹出侧滑框 - first_row.find_element(By.ID, "ReferenceData-_DNSRecordProfile_Home_App_anonymousComponent").click() - pytest_check.equal(self.driver.element_isExist(By.XPATH, "//div[@class='LocalationDraswer lstsub policy-right-show-edit']"), - True, msg="所在行数{}".format(inspect.currentframe().f_lineno)) - self.driver.find_element(By.XPATH, "//div[@class='box-content']/div/div[1]").click() + self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='referenced_by']//button").click() + pytest_check.equal(self.driver.element_isExist(By.XPATH, "//div[@class='MuiDrawer-content css-10lcz44']"), + True, + msg="所在行数{}".format(inspect.currentframe().f_lineno)) + self.driver.find_element(By.XPATH, "//tbody[@class='MuiTableBody-root css-1xnox0e']").click() + def _check_queryConditions(self, **kwargs): queryConditions_xpath = self.driver.find_elements(By.XPATH, "//div[@class='dune-search-tag search_tag_1']") @@ -1161,20 +1169,19 @@ if __name__ == '__main__': # profile_pub.change_vsys(vsys_name='UIAutoTestVsys') # model=0/1 ====0:单个 1group # type =IMSI/Phone_Number/IMEI - data = { - - "ids": "创建单个类型A用例校验格式测试查出范围ip地址", - "model": "create", - "type": "A", - "values": - [ - "6.6.6.6666" - ], - "values_format": - [ - "false" - ], - "description": "test-description1234" + data = { + "ids": "创建单个类型CNAME用例referenceCount测试", + "model": "create", + "type": "CNAME", + "values": + [ + "test.sds.asd.com" + ], + "values_format": + [ + "true" + ], + "description": "test-test.sds.asd.com" } # 测试link # link_parse = configparser.ConfigParser() @@ -1203,8 +1210,15 @@ if __name__ == '__main__': }, ] """ - - r.create(data) + dnsRecords_name = r.create(data) + time.sleep(1) + policy_name = r.policy_create(dnsRecords_name) + time.sleep(1) + r.referenceCount_view(Name=dnsRecords_name) + r.policy_query(Name=policy_name) + r.policy_delete() + r.query(data, Name=dnsRecords_name) + r.delete() ''' update_two_value_dict == == == == == = {'name': 'test_uitemp_xlVvJWuk_25212028_2024-07-19-11-27-15(修改后)', 'type': 'CNAME', diff --git a/common/ui_common/profiles/response_pages.py b/common/ui_common/profiles/response_pages.py index 6334b1ea..71adfdd9 100644 --- a/common/ui_common/profiles/response_pages.py +++ b/common/ui_common/profiles/response_pages.py @@ -71,28 +71,36 @@ class ResponsePages: create_file_abs = self._abs_path(create_file_) print(create_file_abs) self.driver.find_element(By.XPATH, response_page_input_file_posxpath).send_keys(create_file_abs) + # 点击OK + self.driver.find_element(By.XPATH, response_page_button_ok_posxpath).click() - if data["file"].split("->")[0].strip() == "error_type.txt": # 上传错误文件类型 - pytest_check.equal(self.driver.find_element(By.CSS_SELECTOR, ".el-message__content").text.strip(), - "\"html\" and \"htm\" only", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - self.driver.find_element(By.CSS_SELECTOR, responsePage_button_warningSaveCancel_posCss).click() - self.driver.find_element(By.CSS_SELECTOR, responsePage_button_warningSaveYes_posCss).click() - else: # 校验name - #点击OK - self.driver.find_element(By.XPATH, response_page_button_ok_posxpath).click() - if len(self.random_name) == 0: - print("Name cannot be empty") - pytest_check.equal(self.driver.find_element(By.XPATH,"//div[@class='MuiFormHelperText-root css-1y20gt9']").text.strip(), - "Name cannot be empty", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() - elif len(self.random_name) < 4 and len(self.random_name) > 0: # name不符合要求 - if self.driver.element_isExist(By.XPATH, "//div[@class='MuiFormHelperText-root css-1y20gt9']"): - print("The length of the name is at most 128 characters and cannot be less than 4 characters") - pytest_check.equal(self.driver.find_element(By.XPATH, "//div[@class='MuiFormHelperText-root css-1y20gt9']").text.strip(), - "The length of the name is at most 128 characters and cannot be less than 4 characters", msg="所在行数{}".format(inspect.currentframe().f_lineno)) - else: - print("name less than 4,no error message") - self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() + # 校验name + if create_file_ == "": + print("未上传文件") + error = self.driver.find_element(By.XPATH, "//div[@class='MuiFormHelperText-root css-1y20gt9']").text + pytest_check.equal(error, + "File cannot be empty", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() + + elif data["file"].split("->")[0].strip() == "error_type.txt": # 上传错误文件类型 + pytest_check.equal(self.driver.find_element(By.XPATH, profilePage_alert_topInfo_Xpath).text.strip(), + "Request failed with status code 400", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() + print("上传错误文件类型") + # self.driver.find_element(By.CSS_SELECTOR, responsePage_button_warningSaveYes_posCss).click() + elif len(self.random_name) == 0: + print("Name cannot be empty") + pytest_check.equal(self.driver.find_element(By.XPATH,"//div[@class='MuiFormHelperText-root css-1y20gt9']").text.strip(), + "Name cannot be empty", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() + elif len(self.random_name) < 4 and len(self.random_name) > 0: # name不符合要求 + if self.driver.element_isExist(By.XPATH, "//div[@class='MuiFormHelperText-root css-1y20gt9']"): + print("The length of the name is at most 128 characters and cannot be less than 4 characters") + pytest_check.equal(self.driver.find_element(By.XPATH, "//div[@class='MuiFormHelperText-root css-1y20gt9']").text.strip(), + "The length of the name is at most 128 characters and cannot be less than 4 characters", msg="所在行数{}".format(inspect.currentframe().f_lineno)) + else: + print("name less than 4,no error message") + self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() # self.driver.find_element(By.CSS_SELECTOR, responsePage_button_warningSaveYes_posCss).click() # elif self.driver.find_element(By.XPATH, response_page_input_file_posxpath).get_attribute("value") == "": # 未上传文件 # if self.driver.find_element(By.XPATH, "//p[contains(.,'Please choose to upload files')]").is_displayed(): @@ -137,14 +145,14 @@ class ResponsePages: else: first_row , map_header_className = result #第一行的勾选定位,给修改、删除使用 - self.first_row_checkbox_element = first_row.find_element(By.XPATH, "//input[@class='MuiCheckbox-input css-1jj0cvj']") + 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() # 提取 UUID Name - column_allname = ["Vsys ID", "UUID", "Name", "File", "Usage", "Modified Time", "Operator"] - self._column_setting_help(column_allname, column_flags = 2) - first_row_uuid_content = self.driver.find_element(By.XPATH, "//div[@data-field='uuid' and @data-colindex=3]").text.strip() + # column_allname = ["Vsys ID", "UUID", "Name", "File", "Usage", "Modified Time", "Operator"] + # self._column_setting_help(column_allname, column_flags = 2) + # first_row_uuid_content = self.driver.find_element(By.XPATH, "//div[@data-field='uuid' and @data-colindex=3]").text.strip() # first_row_Name_class = map_header_className["Name"] - first_row_name_content = first_row.find_element(By.XPATH, "//div[@data-field='name' and @data-colindex=4]").text.strip() + first_row_name_content = self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='name']").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}')]//span").text.strip() #不同操作后的断言,创建后、修改后、无断言 @@ -159,7 +167,8 @@ class ResponsePages: # element_clear = self.driver.find_element(By.XPATH, listPage_profileSearch_responsePages_buttonClear_posId) # self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 - search_dict = {"UUID": first_row_uuid_content, "Name": first_row_name_content} + # search_dict = {"UUID": first_row_uuid_content, "Name": first_row_name_content} + search_dict = {"Name": first_row_name_content} print(search_dict) # 断言: search_key = list(kwargs.keys())[0] @@ -178,7 +187,7 @@ class ResponsePages: if data["model"].strip().lower() == "create": #如果是create参数用例,则不用执行修改方法 return 0 #点击勾选第一行选择框 - self.first_row_checkbox_element.click() #变量来自查询函数 + self.first_row_checkBox_element.click() #变量来自查询函数 self.driver.find_element(By.XPATH, listpage_profile_response_pages_edit_button_posxpath).click() # 判断保存后内容是否丢失、是否不显示 current_name = self.driver.find_element(By.XPATH, response_page_input_name_posxpath).get_attribute("value") @@ -207,7 +216,7 @@ class ResponsePages: #点击勾选第一行选择框 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_profile_table_response_pages_table_tbody_posxpath).find_elements(By.XPATH, "./tr") if len(rows) == 0: # 没有数据,直接返回 @@ -314,7 +323,7 @@ class ResponsePages: 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_responsePages_editButton_posId, listPage_profile_responsePages_delButton_posId) + self.profiles_po.data_limit(listpage_profile_response_pages_edit_button_posxpath, listpage_profile_response_pages_del_button_posxpath) elif c_supervisor =="close": # Mvsys关闭监督模式,不可查看下级Tvsys数据 pytest_check.equal(result, 0, msg="所在行数{}".format(inspect.currentframe().f_lineno)) elif c_type =="Tvsys" and f_type =="Mvsys": # Tvsys查看Mvsys数据,不可查 @@ -358,7 +367,7 @@ class ResponsePages: else: first_row, map_header_className = result # 第一行的勾选定位,给修改、删除使用 - self.first_row_checkbox_element = first_row.find_element(By.XPATH, "//input[@class='MuiCheckbox-input css-1jj0cvj']") + 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, # "//span[@class='idWidth cursorDefault mouseSchedule el-popover__reference']/span").text.strip() @@ -369,7 +378,7 @@ class ResponsePages: :return: """ # 点击勾选第一行选择框 - self.first_row_checkbox_element.click() # 变量来自查询函数 + self.first_row_checkBox_element.click() # 变量来自查询函数 # 调用profiles的功能删除方法 self.profiles_po.delete(listpage_manipulation_delete_button_posxpath, listPage_dialogTips_manipulation_button_yes_posCss, @@ -390,7 +399,7 @@ class ResponsePages: # first_row_referenceCount_class = map_header_className["Reference Count"] # print("first_row_referenceCount_class=", first_row_referenceCount_class) first_row_checkBox_element.click() - if self.driver.find_element(By.XPATH, "//div[@data-field='referenced_by' and @data-colindex=4]//button").text.strip() != "0": + if self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='referenced_by']//button").text.strip() != "0": print("数据被引用") # 校验该条数据是否可删除 text_del = self.driver.find_element(By.XPATH, @@ -398,7 +407,7 @@ class ResponsePages: print("text_del=", text_del) pytest_check.is_in("Mui-disabled", text_del, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 校验是否弹出侧滑框 - first_row.find_element(By.XPATH, "//div[@data-field='referenced_by' and @data-colindex=6]//button").click() + self.driver.find_element(By.XPATH, "//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='referenced_by']").click() pytest_check.equal(self.driver.element_isExist(By.XPATH, "//div[@class='MuiDrawer-content css-10lcz44']"), True, msg="所在行数{}".format(inspect.currentframe().f_lineno)) self.driver.find_element(By.XPATH, "//tbody[@class='MuiTableBody-root css-1xnox0e']").click() @@ -414,14 +423,14 @@ class ResponsePages: # 检验create 页面元素 self._goto_subProfilePage() #跳转页面 #点击create - self.driver.find_element(By.ID, listPage_profile_responsePages_createButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_response_pages_edit_button_posxpath).click() #在create 页面校验元素 create_page_header_except = "Create Response Page" - create_page_headr_actual = self.driver.find_element(By.XPATH, responsePage_headerTitle_posXpath).text.strip() + create_page_headr_actual = self.driver.find_element(By.XPATH, response_page_header_title_posXpath).text.strip() 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, responsePage_button_cancel_posCss).click() + self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() # 检验edit 页面元素 tmp_name = self._create(data) time.sleep(3) @@ -430,13 +439,13 @@ class ResponsePages: return 0 #点击勾选第一行选择框 self.first_row_checkBox_element.click() #变量来自查询函数 - self.driver.find_element(By.ID, listPage_profile_responsePages_editButton_posId).click() #打开edit页面 + self.driver.find_element(By.XPATH, listpage_profile_response_pages_edit_button_posxpath).click() #打开edit页面 print("开始校验edit页面元素...") edit_page_header_except = "Edit Response Page" - edit_page_headr_actual = self.driver.find_element(By.XPATH, responsePage_headerTitle_posXpath).text.strip() + edit_page_headr_actual = self.driver.find_element(By.XPATH, response_page_header_title_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, responsePage_button_cancel_posCss).click() + self.driver.find_element(By.XPATH, response_page_button_cancel_posxpath).click() self._query(data, require_assertion=0, Name=tmp_name) self._del() #删除数据 @@ -455,7 +464,7 @@ class ResponsePages: # 勾选第一行 self.first_row_checkBox_element.click() # 调用公共的link创建逻辑 - self.profiles_po.linkdata(link_list_dict, listPage_profile_responsePages_linkButton_posId, listPage_linkTips_responsePages_button_save_posXpath, + self.profiles_po.linkdata(link_list_dict, listpage_profile_response_pages_link_button_posxpath, listPage_linkTips_responsePages_button_save_posXpath, listPage_linkTips_responsePages_button_add_posXpath, listPage_linkTips_responsePages_button_OK_posXpath) # 删除数据 self._query(data, require_assertion=0, Name=tmp_name) @@ -499,7 +508,7 @@ class ResponsePages: time.sleep(3) search_dict = self._query(data, require_assertion=0, Name=tmp_name) # 勾选第一行 - self.first_row_checkbox_element.click() + self.first_row_checkBox_element.click() # 调用公共的link创建逻辑 Des_ID_list, Request_ID, Sou_ID_list = self.profiles_po.linkdata(link_list_dict, listpage_profile_response_pages_link_button_posxpath, @@ -660,21 +669,21 @@ class ResponsePages: self.driver.find_element(By.XPATH, "//li[starts-with(@id, '1-_FilteredSearch_ElRow_Profile')]//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() + 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() # 确认删除 self.driver.find_element(By.XPATH, "//p[normalize-space(text())='Delete']").click() - self.driver.find_element(By.CSS_SELECTOR, listPage_dialogTips_responsePages_button_yes_posCss).click() + # self.driver.find_element(By.CSS_SELECTOR, listPage_dialogTips_responsePages_button_yes_posCss).click() @screenshot_on_failure def _just_goto_response_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_responsePages_posId) + self.driver.find_element(By.XPATH, mainpage_first_level_menu_profiles_posxpath).click() + element = self.driver.find_element(By.XPATH, mainpage_second_level_menu_response_pages_posxpath) self.driver.execute_script("arguments[0].click()", element) # 强制点击 def chk_query_spec_chr(self, data): @@ -894,11 +903,12 @@ if __name__ == '__main__': # profile_pub.change_vsys(vsys_name='UIAutoTestVsys') # model=0/1 ====0:单个 1group # type =IMSI/Phone_Number/IMEI - data= { - "ids": "创建respose_page文件20M大小", - "model": "create", - "file": "20MFile.html->" - } + data= \ + { + "ids": "创建response_pages数据referenceCount测试", + "model": "create", + "file": "testa.html->", + } # 测试link # link_parse = configparser.ConfigParser() # link_parse_dir = os.path.join(workdir, "config", "linkcluster.ini") @@ -926,4 +936,12 @@ if __name__ == '__main__': }, ] """ - r.response_page_case(data)
\ No newline at end of file + responsePages_name = r.create(data) # 创建 response_pages + time.sleep(1) + policy_name = r.policy_create(responsePages_name) # 创建策略引用response_pages + print("policy_name=", policy_name) + r.referenceCount_view(Name=responsePages_name) + r.policy_query(Name=policy_name) + r.policy_delete() + r.query(data, Name=responsePages_name) + r.delete()
\ No newline at end of file diff --git a/common/ui_common/profiles/traffic_mirroring_profiles.py b/common/ui_common/profiles/traffic_mirroring_profiles.py index 57b3cd55..36467aee 100644 --- a/common/ui_common/profiles/traffic_mirroring_profiles.py +++ b/common/ui_common/profiles/traffic_mirroring_profiles.py @@ -18,6 +18,7 @@ import configparser import os from selenium import webdriver import copy +import datetime class TrafficMirroringProfiles: def __init__(self, demo_fixture: MyWebDriver): @@ -34,16 +35,16 @@ class TrafficMirroringProfiles: 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=""): # 菜单操作,定位到trafficMirroringProfiles列表页 - # 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_trafficMirroringProfiles_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_traffic_mirroring_profiles_posxpath).click() @screenshot_on_failure def _goto_vsysPage(self, vsys_name_2=""): @@ -56,14 +57,14 @@ class TrafficMirroringProfiles: self._goto_subProfilePage() #创建 #点击create - self.driver.find_element(By.ID, listPage_profile_trafficMirroringProfiles_createButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_traffic_mirroring_profiles_create_button_posxpath).click() #在create 创建页面操作 if source_name: self.random_name = source_name[0] - self.driver.find_element(By.ID, trafficMirroringProfiles_input_Name_posId).send_keys(self.random_name) + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_input_name_posxpath).send_keys(self.random_name) else: self.random_name = self.my_random.random_name() - self.driver.find_element(By.ID, trafficMirroringProfiles_input_Name_posId).send_keys(self.random_name) + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_input_name_posxpath).send_keys(self.random_name) #解析输入的vlan id数据 vlan_ids = data["vlan_id"] vlan_ids_create = [] #创建的vlan id @@ -75,12 +76,17 @@ class TrafficMirroringProfiles: print("vlan id 数据超出32个,仅保留前32个") vlan_ids_create = vlan_ids_create[:32] for j in range(len(vlan_ids_create)): + + self.driver.find_element(By.XPATH, + traffic_mirroring_profiles_button_vlan_id_add_posxpath).click() # 点击add添加 #输入ipnut - elements_vlan_ids_input = self.driver.find_elements(By.XPATH, trafficMirroringProfiles_input_vlanIdsInput_posXpath) + elements_vlan_ids_input = self.driver.find_elements(By.XPATH, traffic_mirroring_profiles_input_vlan_ids_input_posxpath) for element_vlan_id in elements_vlan_ids_input: if element_vlan_id.get_attribute("value") == "": #创建时,只是往input.value=none中键入数据 element_pos_by_id = element_vlan_id.get_attribute("id") - self.driver.find_element(By.ID, element_pos_by_id).send_keys(vlan_ids_create[j]) #输入vlan id的值 + values = vlan_ids_create[j] + for value in values: + self.driver.find_element(By.ID, element_pos_by_id).send_keys(value) #输入vlan id的值 self.driver.find_element(By.XPATH, "//label[text()='VLAN ID']").click() if "reverse_case" in data.keys(): # 其它字符判断条件使用 error_vlan_id = "" @@ -101,8 +107,8 @@ class TrafficMirroringProfiles: else: error_vlan_id = "" break - if (len(vlan_ids_create) - 1) - j > 0: #点击add按钮比数据个数少一次 - self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_vlanIdAdd_posCss).click() #点击add添加 + # if (len(vlan_ids_create) - 1) - j > 0: #点击add按钮比数据个数少一次 + # self.driver.find_element(By.XPATH, traffic_mirroring_profiles_button_vlan_id_add_posxpath).click() #点击add添加 if error_vlan_id != "": print("error_vlan_id=", error_vlan_id) element_vlan_del = self.driver.find_element(By.XPATH, f"//input[@id='{error_vlan_id}']/ancestor::div[@class='el-form-item__content']/i") @@ -113,7 +119,7 @@ class TrafficMirroringProfiles: self.driver.find_element(By.ID, error_vlan_id).send_keys(Keys.CONTROL + "a") self.driver.find_element(By.ID, error_vlan_id).send_keys(Keys.BACKSPACE) #点击OK - self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_oK_posCss).click() + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_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']"): print("The length of the name is at most 128 characters and cannot be less than 4 characters") @@ -124,11 +130,11 @@ class TrafficMirroringProfiles: else: print("name less than 4,no error message") # 点击取消 - self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_cancel_posCss).click() + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_button_cancel_posxpath).click() self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_warningSaveYes_posCss).click() elif self.driver.element_isExist(By.XPATH, "//div[contains(text(),'Please enter the content')]"): #未输入vlan id print("未输入必填项,报错:", self.driver.find_element(By.XPATH, "//div[contains(text(),'Please enter the content')]").text.strip()) - self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_cancel_posCss).click() + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_button_cancel_posxpath).click() self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_warningSaveYes_posCss).click() # 数据正确时 elif self.driver.element_isExist(By.CSS_SELECTOR, trafficMirroringProfiles_button_warningSaveYes_posCss): @@ -151,37 +157,38 @@ class TrafficMirroringProfiles: :return: """ #打开该列表 - self._goto_subProfilePage(vsys_name_2=vsys_name_2) + # self._goto_subProfilePage(vsys_name_2=vsys_name_2) #first_row查询到的第一行内容。map_header_className为需要使用的到字典,用来提取第一行的结果。 - result = self.profiles_po.query(listPage_profileSearch_trafficMirroringProfiles_selectLabel_posId, listPage_profileSearch_trafficMirroringProfiles_dropDown_item_posXpath, - listPage_profileSearch_trafficMirroringProfiles_input_itemContent_posXpath, listPage_profileSearch_trafficMirroringProfiles_buttonSearch_posId, - listPage_profilTable_trafficMirroringProfiles_tableTbody_posXpath, listPage_profilTable_trafficMirroringProfiles_tableHeader_posXpath, **kwargs) + result = self.profiles_po.query(listpage_profile_search_traffic_mirroring_profiles_select_label_posxpath, listPage_profileSearch_trafficMirroringProfiles_dropDown_item_posXpath, + listPage_profileSearch_trafficMirroringProfiles_input_itemContent_posXpath, listpage_profile_search_traffic_mirroring_profiles_button_search_posxpath, + listpage_profile_table_traffic_mirroring_profiles_table_tbody_posxpath, list_page_profile_table_traffic_mirroring_profiles_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() - 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() + # 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}')]//span").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_VLAN_ID_class = map_header_className["VLAN ID"] - first_row_VLAN_IDs_content = first_row.find_elements(By.XPATH, f"//td[contains(@class, '{first_row_VLAN_ID_class}')]//span//span") - first_row_VLAN_IDS_list = [] - for element_vlan_id in first_row_VLAN_IDs_content: + # 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_VLAN_ID_class = map_header_className["VLAN ID"] + first_row_vlan_ids_content = self.driver.find_elements(By.XPATH, f"//div[contains(@class, 'MuiDataGrid-row--firstVisible')]//div[@data-field='vlan_array']") + first_row_vlan_ids_list = [] + for element_vlan_id in first_row_vlan_ids_content: vlan_id_str = element_vlan_id.text.strip() # print("vlan_id_str=", vlan_id_str) if "," in vlan_id_str and len(vlan_id_str) == 1: #跳过只是,的数据 continue - first_row_VLAN_IDS_list.append(vlan_id_str.strip(",")) - print("quert_vlan_list:", first_row_VLAN_IDS_list) - search_dict = {"ID": first_row_id_content, "Name": first_row_Name_content} + first_row_vlan_ids_list = vlan_id_str.split(",") + print("quert_vlan_list:", first_row_vlan_ids_list) + search_dict = { "Name": first_row_name_content} #不同操作后的断言,创建后、修改后、无断言 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)) # 解析输入的vlan id数据,并断言使用 vlan_ids = data["vlan_id"] vlan_ids_create = [] # 创建的vlan id @@ -189,15 +196,15 @@ class TrafficMirroringProfiles: if i.strip().split("->")[0] != "": vlan_ids_create.append(i.strip().split("->")[0]) #断言vlan id - for vlan_id in first_row_VLAN_IDS_list: - pytest_check.is_in(vlan_id, vlan_ids_create, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + for vlan_id in first_row_vlan_ids_list: + pytest_check.is_in(vlan_id.strip(), vlan_ids_create, 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)) else: #不适用断言 pass #强制点击清空查询按钮 - element_clear = self.driver.find_element(By.ID, listPage_profileSearch_trafficMirroringProfiles_buttonClear_posId) - self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 + # element_clear = self.driver.find_element(By.ID, listPage_profileSearch_trafficMirroringProfiles_buttonClear_posId) + # self.driver.execute_script("arguments[0].click()", element_clear) # 强制点击 return search_dict @screenshot_on_failure @@ -211,14 +218,14 @@ class TrafficMirroringProfiles: return 0 #点击勾选第一行选择框 self.first_row_checkBox_element.click() #变量来自查询函数 - self.driver.find_element(By.ID, listPage_profile_trafficMirroringProfiles_editButton_posId).click() + self.driver.find_element(By.XPATH, listpage_profile_traffic_mirroring_profiles_edit_button_posxpath).click() # 判断保存后内容是否丢失,是否不显示 - current_name = self.driver.find_element(By.ID, trafficMirroringProfiles_input_Name_posId).get_attribute("value") + current_name = self.driver.find_element(By.XPATH, traffic_mirroring_profiles_input_name_posxpath).get_attribute("value") # print("current_name=", current_name) pytest_check.equal(current_name, self.random_name, msg="所在行数{}".format(inspect.currentframe().f_lineno)) current_vlan_ids = [] elements_vlan_ids_input = self.driver.find_elements(By.XPATH, - trafficMirroringProfiles_input_vlanIdsInput_posXpath) + traffic_mirroring_profiles_input_vlan_ids_input_posxpath) for element_vlan_id in elements_vlan_ids_input: current_vlan_ids.append(element_vlan_id.get_attribute("value").strip()) vlan_ids_create = [] # 创建的vlan id @@ -226,10 +233,10 @@ class TrafficMirroringProfiles: if i.strip().split("->")[0] != "": vlan_ids_create.append(i.strip().split("->")[0]) # print(current_vlan_ids, vlan_ids_create,"1") - pytest_check.equal(current_vlan_ids, vlan_ids_create, msg="所在行数{}".format(inspect.currentframe().f_lineno)) + # pytest_check.equal(current_vlan_ids, vlan_ids_create, msg="所在行数{}".format(inspect.currentframe().f_lineno)) # 修改name new_Name = "(修改后)" - self.driver.find_element(By.ID, trafficMirroringProfiles_input_Name_posId).send_keys(new_Name) + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_input_name_posxpath).send_keys(new_Name) self.random_name = self.random_name + new_Name #从data数据中解析出修改数据、删除输出、新增数据 modify_vlan_ids = [] @@ -247,7 +254,7 @@ class TrafficMirroringProfiles: #操作直接修改vlan id数据 if len(modify_vlan_ids) != 0: for modify_item in modify_vlan_ids: - elements_vlan_ids_input = self.driver.find_elements(By.XPATH, trafficMirroringProfiles_input_vlanIdsInput_posXpath) + elements_vlan_ids_input = self.driver.find_elements(By.XPATH, traffic_mirroring_profiles_input_vlan_ids_input_posxpath) for element_vlan_id in elements_vlan_ids_input: if element_vlan_id.get_attribute("value").strip() == modify_item.split("->")[0]: #有需要修改的vlan id element_vlan_id.clear() @@ -257,7 +264,7 @@ class TrafficMirroringProfiles: #操作直接删除vlan id数据 if len(del_vlan_ids) != 0: for del_item in del_vlan_ids: - elements_vlan_ids_input = self.driver.find_elements(By.XPATH, trafficMirroringProfiles_input_vlanIdsInput_posXpath) + elements_vlan_ids_input = self.driver.find_elements(By.XPATH, traffic_mirroring_profiles_input_vlan_ids_input_posxpath) for element_vlan_id in elements_vlan_ids_input: if element_vlan_id.get_attribute("value").strip() == del_item.split("->")[0]: #有需要删除的vlan id element_vlan_id.find_element(By.XPATH, r"parent::*/parent::*//i").click() #点击删除按钮 @@ -266,17 +273,17 @@ class TrafficMirroringProfiles: #操作新增vlan id数据 if len(add_vlan_ids) != 0: for add_item in add_vlan_ids: - self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_vlanIdAdd_posCss).click() - elements_vlan_ids_input = self.driver.find_elements(By.XPATH, trafficMirroringProfiles_input_vlanIdsInput_posXpath) + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_button_vlan_id_add_posxpath).click() + elements_vlan_ids_input = self.driver.find_elements(By.XPATH, traffic_mirroring_profiles_input_vlan_ids_input_posxpath) for element_vlan_id in elements_vlan_ids_input: if element_vlan_id.get_attribute("value") == "": #创建时,只是往input.value=none中键入数据 element_vlan_id.send_keys(add_item.split("->")[-1]) time.sleep(0.2) break #点击ok - self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_oK_posCss).click() - if self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_warningSaveYes_posCss).is_displayed(): - self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_warningSaveYes_posCss).click() + self.driver.find_element(By.XPATH, traffic_mirroring_profiles_button_ok_posxpath).click() + # if self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_warningSaveYes_posCss).is_displayed(): + # self.driver.find_element(By.CSS_SELECTOR, trafficMirroringProfiles_button_warningSaveYes_posCss).click() @screenshot_on_failure def _del(self, del_model=0): @@ -289,7 +296,7 @@ class TrafficMirroringProfiles: #点击勾选第一行选择框 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_traffic_mirroring_profiles_table_tbody_posxpath).find_elements(By.XPATH, "./tr") if len(rows) == 0: # 没有数据,直接返回 return else: @@ -297,8 +304,8 @@ class TrafficMirroringProfiles: if del_result == 1: # 1表示没有删除对象,直接返回 return 0 #调用profiles的功能删除方法 - self.profiles_po.delete(listPage_profile_trafficMirroringProfiles_delButton_posId, listPage_dialogTips_trafficMirroringProfiles_button_yes_posCss, - listPage_dialogTips_trafficMirroringProfiles_button_no_posCss) + self.profiles_po.delete(listpage_profile_traffic_mirroring_profiles_del_button_posxpath, listpage_dialogtips_traffic_mirroring_profiles_button_yes_posxpath, + listpage_dialogtips_traffic_mirroring_profiles_button_no_posxpath) def _column_setting(self, column: (), column_flags=0): """ @@ -311,11 +318,9 @@ class TrafficMirroringProfiles: # 打开该列表 self._goto_subProfilePage() profiles = "Profile_TrafficMirrorProfiles" - column_click = column[2:] - current_column = self.profiles_po.column_setting(mainPage_profileColumn_columnSetting_posId, - listPage_profileColumn_trafficMirroringProfiles_button_columnAll_posXpath, - listPage_profileColumn_trafficMirroringProfiles_button_cancel_posId, - listPage_profileColumn_trafficMirroringProfiles_button_ok_posId, profiles, + column_click = column[1:] + current_column = self.profiles_po.column_setting(mainpage_profile_column_setting_posxpath, + listpage_profile_column_traffic_mirroring_profiles_button_column_all_posxpath, profiles, column_flags, column_click) pytest_check.equal(current_column, column, msg="所在行数{}".format(inspect.currentframe().f_lineno)) @@ -330,7 +335,7 @@ class TrafficMirroringProfiles: self._goto_subProfilePage() self.profiles_po.turn_pages("Profile_TrafficMirrorProfiles", pages) - def _language_change(self, language): + def _language_change(self, language): # 默认的 header_content TODO """ 语言切换函数 language: 0---english; 1---chinese; 2---russian @@ -338,10 +343,10 @@ class TrafficMirroringProfiles: :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(replace_name='中文'), + mainpage_language_dropdown_item_posxpath(replace_name='Русский'), + mainpage_language_dropdown_item_posxpath(replace_name='English'), language) # 断言 time.sleep(2) if language == 0: @@ -564,19 +569,19 @@ class TrafficMirroringProfiles: :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_trafficMirroringProfiles_linkButton_posId, - listPage_linkTips_trafficMirroringProfiles_button_save_posXpath, - listPage_linkTips_trafficMirroringProfiles_button_add_posXpath, - listPage_linkTips_trafficMirroringProfiles_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_trafficMirroringProfiles_linkButton_posId, + listPage_linkTips_trafficMirroringProfiles_button_save_posXpath, + listPage_linkTips_trafficMirroringProfiles_button_add_posXpath, + listPage_linkTips_trafficMirroringProfiles_button_OK_posXpath) + try: self._query(data, require_assertion=1, ID=search_dict["ID"]) # 点击勾选第一行选择框 self.first_row_checkBox_element.click() # 变量来自查询函数 @@ -800,16 +805,119 @@ class TrafficMirroringProfiles: def _audit_log_all_operation(self, data): ran_name = self._create(data) try: - time.sleep(0.5) + profiles_type = 'Traffic Mirror 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) - time.sleep(0.5) + 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_trafficMirroringProfiles_editButton_posId).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, + traffic_mirroring_profiles_page_create_time_posXpath).text + elif operation_type == 'Edit': + # 修改时间 + compare_time = self.driver.find_element(By.XPATH, + traffic_mirroring_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, traffic_mirroring_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, traffic_mirroring_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': + # 点击 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("Traffic Mirror Profile", search_dict["ID"]) create = _create query = _query @@ -834,9 +942,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 = TrafficMirroringProfiles(a) @@ -845,32 +953,30 @@ if __name__ == '__main__': # model=0/1 ====0:单个 1group # type =IMSI/Phone_Number/IMEI data= { - "ids": "创建vlanid再修改", - "model": "modify", - "vlan_id": - [ - "16->7", - "18->12", - "25->45", - "55->55" - ], + "ids": "创建traffic_mirroring_profiles_多vlanid", + "model": "modify", + "vlan_id": + [ + "6->7", + "58->24" + ] } # 测试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 = [1] # 可取值 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 = [1] # 可取值 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 = [ { @@ -883,4 +989,4 @@ if __name__ == '__main__': ] """ - r.check_link_case_modify(data, link_list_dict=link_list_dict)
\ No newline at end of file + r.traffic_morroring_profiles_case(data)
\ No newline at end of file |
