summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhz <[email protected]>2024-11-20 19:35:42 +0800
committerzhz <[email protected]>2024-11-20 19:35:42 +0800
commit09045588bd5ebf82ebc5b606cc29bc08bc10312d (patch)
tree1b0d7d79cffaadc585767e503a74032aca1ef628
parent7ad211f6ab01547007214d0b1f0ac0423b6ecd91 (diff)
dns record 适配
-rw-r--r--cases/profiles/test_dns_records.py6
-rw-r--r--cases/profiles/test_traffic_mirroring_profiles.py11
-rw-r--r--common/ui_common/profiles/dns_records.py142
-rw-r--r--common/ui_common/profiles/response_pages.py122
-rw-r--r--common/ui_common/profiles/traffic_mirroring_profiles.py314
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