summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorguowenzheng <[email protected]>2024-10-25 10:27:13 +0800
committerguowenzheng <[email protected]>2024-10-25 10:27:13 +0800
commitdbeb3471037cff138af8822c3325b6452e8ddc79 (patch)
treee242b1dea4cd4ff21cbc03bb0358d58fff8605ba
parentee3edc1e04030abd32ec0fe31c23d8d6f1eba4e3 (diff)
元素定位逻辑修改
-rw-r--r--cases/object/test_flags.py64
-rw-r--r--common/ui_common/objects/apns.py6
-rw-r--r--common/ui_common/objects/flags.py239
-rw-r--r--common/ui_common/objects/objects_public_operations.py81
-rw-r--r--page_element/objects_element_position.py16
5 files changed, 250 insertions, 156 deletions
diff --git a/cases/object/test_flags.py b/cases/object/test_flags.py
index 75bbdf8c..2bade6c6 100644
--- a/cases/object/test_flags.py
+++ b/cases/object/test_flags.py
@@ -34,7 +34,7 @@ class TestFlags:
@pytest.mark.parametrize("data", data.read_data_object(r"Flags\\nested_accgroup.json"), ids=data.generate_id)
# test case 008
- def test_nested_flaggroup(self, demo_fixture, data):
+ def test_nested_flag_group(self, demo_fixture, data):
flag = Flags(demo_fixture)
flag._create_mutiLayer_nested_flagGroup(data)
search_value = data["Name"][0][:int((len(data["Name"][0])) / 3)]
@@ -139,26 +139,26 @@ class TestFlags:
flag._reference_count()
finally:
flag.delete(data)
- @pytest.mark.parametrize("data", [
- {
- "ids": "test_reference_by_object",
- "Model": "create",
- "Type": 0,
- "Search type": "",
- "Name": "",
- "Items": [
- [
- "1:0->",
- "2:1->",
- "[random]->"
- ]
- ],
- "Description": ""
- },
- ])
- def test_reference_by_object(self, demo_fixture, data):
- flag = Flags(demo_fixture)
- flag._reference_by_object(data)
+ # @pytest.mark.parametrize("data", [
+ # {
+ # "ids": "test_reference_by_object",
+ # "Model": "create",
+ # "Type": 0,
+ # "Search type": "",
+ # "Name": "",
+ # "Items": [
+ # [
+ # "1:0->",
+ # "2:1->",
+ # "[random]->"
+ # ]
+ # ],
+ # "Description": ""
+ # },
+ # ])
+ # def test_reference_by_object(self, demo_fixture, data):
+ # flag = Flags(demo_fixture)
+ # flag._reference_by_object(data)
@pytest.mark.parametrize("data", [{
"ids": "创建urlObject并查看验证审计日志-T016/创建并修改urlObject查看验证审计日志-T041/23.09版本新功能:右侧页面增加Audit Logs功能-T041",
@@ -358,17 +358,17 @@ class TestFlags:
# # Items导入错误文件的验证
@pytest.mark.parametrize("data",
- [{
- "ids": "组合查询",
- "Model": "create",
- "Type": 0,
- "Search type": "Name&ID&Description",
- "Name": "test_Name&ID&Description",
- "Items": [
- ["1:0->"]
- ],
- "Description": ""
- }, ])
+ [{
+ "ids": "组合查询",
+ "Model": "create",
+ "Type": 0,
+ "Search type": "Name&Description",
+ "Name": "Name&ID&Description",
+ "Items": [
+ ["1:0->"]
+ ],
+ "Description": ""
+ }, ])
def test_multiple_search(self, demo_fixture, data):
flag = Flags(demo_fixture)
flag._multiple_search(data)
diff --git a/common/ui_common/objects/apns.py b/common/ui_common/objects/apns.py
index a3295ecf..c39f667f 100644
--- a/common/ui_common/objects/apns.py
+++ b/common/ui_common/objects/apns.py
@@ -179,9 +179,9 @@ class APNs:
#确认创建apn group
self.object_page_save()
- # self.duplication_check_item = self.random_item
- # self.objects_po.extract_ele()## 提取ID、Name、Description、Detail
- # self.objects_po.table_dict['Datails'] = self.random_item
+ self.duplication_check_item = self.random_item
+ self.objects_po.extract_ele()## 提取ID、Name、Description、Detail
+ self.objects_po.table_dict['Datails'] = self.random_item
@screenshot_on_failure
def _create_exclude(self, data: {}):
diff --git a/common/ui_common/objects/flags.py b/common/ui_common/objects/flags.py
index 437f6420..f28e60eb 100644
--- a/common/ui_common/objects/flags.py
+++ b/common/ui_common/objects/flags.py
@@ -98,7 +98,7 @@ class Flags:
self._operate_page(data, operation_type="create")
# 页面详情保存操作
self._object_detail_page_save()
- self.first_elems_table = self.objects_po.extract_ele() # 获取列表页第一列信息
+ self.first_elems_table = self.objects_po.extract_ele_flag() # 获取列表页第一列信息
@screenshot_on_failure
def _create_type(self, data, item_name=None):
@@ -480,17 +480,17 @@ class Flags:
self.driver.isElementExist('//div[@class="EditDraw"]//div[@class="el-loading-mask"]')
if not self.driver.Exist:
break
- self.driver.find_element(By.XPATH, '//div[@data-label="Name"]/label').click()
- if self.objects_po.is_element_clickable(flag_ObjectGroupDetailPage_subObjects_addButton_normalAdd_posXpath,
+ # self.driver.find_element(By.XPATH, '//div[@data-label="Name"]/label').click()
+ if self.objects_po.is_element_clickable(flag_ObjectGroupDetailPage_subObjects_addButton_newAdd_posXpath,
"XPATH"):
print("有数据新建")
# 点击Subordinate Objects 下的"+"按钮
self.driver.find_element(By.XPATH,
- flag_ObjectGroupDetailPage_subObjects_addButton_normalAdd_posXpath).click()
+ flag_ObjectGroupDetailPage_subObjects_addButton_newAdd_posXpath).click()
else:
print("无数据新建")
# 点击Subordinate Objects 下的"+"按钮
- self.driver.find_element(By.XPATH, flag_ObjectGroupDetailPage_subObjects_addButton_newAdd_posXpath).click()
+ self.driver.find_element(By.XPATH, flag_ObjectGroupDetailPage_subObjects_addButton_normalAdd_posXpath).click()
# common actions:
time.sleep(0.5)
@@ -940,16 +940,16 @@ class Flags:
# 先用name方式搜索,获取对应信息
self._flag_objects_search(self.my_item_name, search_type="Name", fuzzy_search=False)
# 等待加载完成
- notLoading_elem_xpath = self.driver.element_isExist(By.XPATH,
- global_loading_elem_whenNotDisplaied_xpath)
- while not notLoading_elem_xpath:
- # print("Loading!")
- notLoading_elem_xpath = self.driver.element_isExist(By.XPATH,
- global_loading_elem_whenNotDisplaied_xpath)
- if notLoading_elem_xpath:
- # print("加载完毕")
- break
- # self.objects_po.extract_ele() # 获取列表页第一列信息
+ # notLoading_elem_xpath = self.driver.element_isExist(By.XPATH,
+ # global_loading_elem_whenNotDisplaied_xpath)
+ # while not notLoading_elem_xpath:
+ # # print("Loading!")
+ # notLoading_elem_xpath = self.driver.element_isExist(By.XPATH,
+ # global_loading_elem_whenNotDisplaied_xpath)
+ # if notLoading_elem_xpath:
+ # # print("加载完毕")
+ # break
+ self.objects_po.extract_ele_flag() # 获取列表页第一列信息
if not simple_query and search_type == "ID":
search_value = self.objects_po.table_dict["ID"]
else:
@@ -973,6 +973,7 @@ class Flags:
@screenshot_on_failure
def _flag_objects_search(self, search_value, search_type, fuzzy_search):
+ self._goto_flagsPage()
flag_objects_search_input_posXpath = listpage_search_input_posXpath
flag_objects_search_input_elem = self.driver.find_element(By.XPATH, flag_objects_search_input_posXpath)
@@ -1005,21 +1006,23 @@ class Flags:
else: # 精确属性的模糊搜索
time.sleep(1)
if search_type == "Name" or search_type == "":
- self.driver.find_element(By.XPATH, flag_listPage_object_searchName_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(search_value)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_Name_posXpath).click()
# elif search_type == "ID":
- # self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
+ # self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
# elif search_type == "Details":
# self.driver.find_element(By.XPATH, flag_listPage_object_searchDetails_posId).click()
elif search_type == "Description":
- self.driver.find_element(By.XPATH, flag_listPage_object_searchDescription_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(search_value)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_Description_posXpath).click()
# elif search_type == "Created By":
# self.driver.find_element(By.XPATH, flag_listPage_object_searchCreatedBy_posId).click()
self.driver.implicitly_wait(3)
time.sleep(1)
# flag_objects_search_input_elem.send_keys(Keys.ENTER) # 确认输入框内容
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click() # 点击搜索按钮
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click() # 点击搜索按钮
time.sleep(0.5)
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click() # 再次点击搜索按钮
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click() # 再次点击搜索按钮
def _query_verify(self, search_value, search_type, need_verify_details=0):
try:
@@ -1031,8 +1034,8 @@ class Flags:
print(e)
raise
- # self.objects_po.extract_ele() # 获取列表页第一列信息
- # self.second_elems_table = self.objects_po.extract_ele() # 获取列表页第一列信息
+ # self.objects_po.extract_ele_flag() # 获取列表页第一列信息
+ # self.second_elems_table = self.objects_po.extract_ele_flag() # 获取列表页第一列信息
# assert self.first_elems_table["ID"] == self.second_elems_table[
# "ID"], "校验失败!!创建的Object ID={},当前页面的Object ID={}".format(self.first_elems_table["ID"],
# self.second_elems_table["ID"])
@@ -1137,8 +1140,9 @@ class Flags:
listpage_delete_yes_button_posXpath,
listpage_delete_no_posXpath)
# 删除object group对象后,再删除子object对象
- self._goto_flagsPage()
+
while del_count > 0:
+ self._goto_flagsPage()
print("del 循环")
try:
if del_flag:
@@ -1420,7 +1424,7 @@ class Flags:
for i in range(object_count):
self._create(data)
# 选中新建的Object
- flag_objects = self.driver.find_elements(By.XPATH, flag_listPage_object_tableCheckbox_singleObject_posXpaths)
+ flag_objects = self.driver.find_elements(By.XPATH, '//div[@role="rowgroup"]//input[@type="checkbox"]')
for i in flag_objects:
i.click()
object_count -= 1
@@ -1456,7 +1460,7 @@ class Flags:
"This is Description for {}".format(self.my_item_name))
# 点击OK
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_mainOkButton_posXpath).click() # 点击“OK”按钮
- self.driver.find_element(By.XPATH, flag_ObjectDetailPage_okButton_yes_posXpath).click() # 点击确认弹窗的“Yes”按钮
+ # self.driver.find_element(By.XPATH, flag_ObjectDetailPage_okButton_yes_posXpath).click() # 点击确认弹窗的“Yes”按钮
@screenshot_on_failure
def _create_object_group(self, data: {}, name=None):
@@ -1472,9 +1476,10 @@ class Flags:
self.driver.find_element(By.XPATH,
flag_ObjectGroupDetailPage_subObjects_addButton_newAdd_posXpath).click() # 点击Subordinate Objects + 按钮
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_firstObject).click() # 选择第一个flag Object
+ self.driver.find_element(By.XPATH, '//i[@class="iconfont icon-Clear_aNormal close-icon"]').click()
# 点击OK
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_mainOkButton_posXpath).click() # 点击“OK”按钮
- self.driver.find_element(By.XPATH, flag_ObjectDetailPage_okButton_yes_posXpath).click() # 点击确认弹窗的“Yes”按钮
+ # self.driver.find_element(By.XPATH, flag_ObjectDetailPage_okButton_yes_posXpath).click() # 点击确认弹窗的“Yes”按钮
def _get_value_from_data(self, data: {}, key="", data_index=0):
"""
@@ -1530,7 +1535,7 @@ class Flags:
data["Name"]) # 于Name输入框Name
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_mainOkButton_posXpath).click() # 点击“OK”按钮
if len(data["Name"]) < 4:
- error_message = self.driver.find_element(By.XPATH, '//div[@class="el-form-item__error"]').text
+ error_message = self.driver.find_element(By.XPATH, '//div[@class="flag-object-name"]/div[2]').text
print(error_message)
assert error_message == "The length of the name is at most 128 characters and cannot be less than 4 characters"
else: # 长度大于128
@@ -1554,13 +1559,13 @@ class Flags:
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_mainOkButton_posXpath).click() # 点击“OK”按钮
try:
- error_message_elem = '//div[@role="alert"][1]'
+ error_message_elem = '//div[@class="items"]/div[2]'
error_message = self.driver.find_element(By.XPATH, error_message_elem).text
- assert error_message == "Form validation failed", "当前error_message={}!!".format(error_message)
+ assert error_message == "Please add at least one item", "当前error_message={}!!".format(error_message)
print("校验通过,页面提示且{}=Form validation failed".format(error_message))
if not self.driver.element_isExist(By.XPATH, error_message_elem):
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_mainOkButton_posXpath).click() # 点击“OK”按钮
- assert error_message == "Form validation failed", "当前error_message={}!!".format(error_message)
+ assert error_message == "Please add at least one item", "当前error_message={}!!".format(error_message)
print("校验通过,页面提示且{}=Form validation failed".format(error_message))
except Exception as e:
print(e)
@@ -1631,7 +1636,7 @@ class Flags:
self._goto_flagsPage() # 页面跳转
current_page_reference_count_list = []
try:
- reference_count_elems_posXpath = '//div[contains(@id,"-_Objects_flag_Home_App_anonymousComponent")]'
+ reference_count_elems_posXpath = '//div[@data-field="reference_count"]/button'
reference_count_elems_list = self.driver.find_elements(By.XPATH, reference_count_elems_posXpath)
for i in reference_count_elems_list:
current_page_reference_count_list.append(i.text)
@@ -1658,7 +1663,7 @@ class Flags:
# count = random.randint(0, 3) # 随机count
count = 0
# print(count)
- reference_count_elem_posXpath = '(//div[contains(@id,"-_Objects_flag_Home_App_anonymousComponent") and text()={}])[1]'.format(
+ reference_count_elem_posXpath = '(//div[@data-field="reference_count"]/button[text()="{}"])[1]'.format(
count)
# 点击reference count并校验
self.driver.find_element(By.XPATH, reference_count_elem_posXpath).click() # 点击reference count,弹出侧滑页面
@@ -1824,7 +1829,7 @@ class Flags:
try:
assert exclude_objects_switch_elem.get_attribute(
- "class") == "el-switch is-checked", "Exclude Objects Switch未被开启!!"
+ "class") == "MuiButtonBase-root MuiSwitch-switchBase MuiSwitch-colorPrimary Mui-checked PrivateSwitchBase-root MuiSwitch-switchBase MuiSwitch-colorPrimary Mui-checked Mui-checked css-y2jqxi", "Exclude Objects Switch未被开启!!"
print("Exclude Objects Switch成功开启")
self.driver.isElementExist(flagGroup_ObjectDetailPage_excludeObjects_itemsArea_posXpath)
assert self.driver.Exist, "Exclude Objects未开启!!"
@@ -1836,7 +1841,7 @@ class Flags:
exclude_objects_switch_elem.click() # 从开启到关闭
try:
assert exclude_objects_switch_elem.get_attribute(
- "class") == "el-switch", "Exclude Objects Switch未被关闭!!"
+ "class") == "MuiButtonBase-root MuiSwitch-switchBase MuiSwitch-colorPrimary PrivateSwitchBase-root MuiSwitch-switchBase MuiSwitch-colorPrimary css-y2jqxi", "Exclude Objects Switch未被关闭!!"
print("Exclude Objects Switch成功关闭")
self.driver.isElementExist(flagGroup_ObjectDetailPage_excludeObjects_itemsArea_posXpath)
assert not self.driver.Exist, "Exclude Objects未关闭!!"
@@ -1853,40 +1858,43 @@ class Flags:
###捕获error messages并校验
try:
# self.driver.find_element(By.XPATH, acc_ObjectDetailPage_mainOkButton_poId).click() # 再次点击OK
- error_message = self.driver.find_element(By.XPATH, '//*[@role="alert"]//p').text
+ error_message = self.driver.find_element(By.XPATH, '//div[@class="flag-object-included_sub_object_uuids"]/div[2]').text
print(error_message)
# assert error_message == "Subordinate objects of an object cannot contain only excluded objects", "error_message 校验失败"
- assert error_message in "Subordinate objects of an object cannot be null", "error_message 校验失败"
+ assert error_message in "Subordinate Objects cannot be empty", "error_message 校验失败"
except Exception as e:
print(e)
raise
# 添加子item
- # self.driver.find_element(By.XPATH,
- # flagGroup_ObjectDetailPage_excludeObjectsSwitch_newAdd_posXpath).click() # 点击无数据新增按钮
- # self.driver.find_element(By.XPATH, flag_ObjectDetailPage_firstObject).click() # 选择第一个 flag Object
- # self.driver.find_element(By.XPATH,
- # flag_ObjectGroupDetailPage_subObjects_toggleDraw_closeButton_posXpath).click() # flag 侧滑窗口的Close按钮
- # self.driver.find_element(By.XPATH,
- # flagGroup_ObjectDetailPage_excludeObjectsSwitch_normalAdd_posXpath).click() # 点击有数据新增按钮
- # time.sleep(1)
- # self.driver.find_element(By.XPATH, flag_ObjectDetailPage_secondObject).click() # 选择第二个 flag Object
- self._operate_exclude_objects(data, data_index=0)
+ self.driver.find_element(By.XPATH,
+ flagGroup_ObjectDetailPage_excludeObjectsSwitch_newAdd_posXpath).click() # 点击无数据新增按钮
+ self.driver.find_element(By.XPATH, flag_ObjectDetailPage_firstObject).click() # 选择第一个 flag Object
+ self.driver.find_element(By.XPATH,
+ flag_ObjectGroupDetailPage_subObjects_toggleDraw_closeButton_posXpath).click() # flag 侧滑窗口的Close按钮
+ self.driver.find_element(By.XPATH,
+ flagGroup_ObjectDetailPage_excludeObjectsSwitch_normalAdd_posXpath).click() # 点击有数据新增按钮
+ time.sleep(1)
+ self.driver.find_element(By.XPATH, flag_ObjectDetailPage_secondObject).click() # 选择第二个 flag Object
+ self.driver.find_element(By.XPATH,
+ flag_ObjectGroupDetailPage_subObjects_toggleDraw_closeButton_posXpath).click()
+ # self._operate_exclude_objects(data, data_index=0)
##点击OK
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_mainOkButton_posXpath).click()
###捕获error messages并校验
try:
self.driver.find_element(By.XPATH, flag_ObjectDetailPage_mainOkButton_posXpath).click() # 再次点击OK
- error_message = self.driver.find_element(By.XPATH, '//*[@role="alert"]//p').text
+ error_message = self.driver.find_element(By.XPATH, '//div[@class="flag-object-included_sub_object_uuids"]/div[2]').text
print(error_message)
# assert error_message == "Subordinate objects of an object cannot contain only excluded objects", "error_message 校验失败"
- assert error_message in "Subordinate objects of an object cannot contain only excluded objects", "error_message 校验失败"
+ assert error_message in "Subordinate Objects cannot be empty", "error_message 校验失败"
except Exception as e:
print(e)
raise
finally:
- self._goto_flagsPage()
- self._del(data, search_value='test_ui', del_flag=1)
+ pass
+ # self._goto_flagsPage()
+ # self._del(data, search_value='test_ui', del_flag=1)
@screenshot_on_failure
def _choose_single_object_method(self):
@@ -2551,9 +2559,9 @@ class Flags:
profile_public.change_vsys(vsys_name="UIAutoTestVsys")
self._goto_flagsPage()
# 查询group
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(Sou_ID_list[0])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(Sou_ID_list[0])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
# 修改数据
if data["Type"] == 0:
@@ -2585,9 +2593,9 @@ class Flags:
self.driver.find_element(By.XPATH, ObjectDetailPage_okButton_yes_posXpath).click()
self._goto_flagsPage()
# 查询group
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(Sou_ID_list[0])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(Sou_ID_list[0])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
# 获取修改后的数据
sou_value_name = self.driver.find_element(By.XPATH,
@@ -2633,9 +2641,9 @@ class Flags:
profile_public.change_vsys(vsys_name=link_list_dict[link_index]["link_dst_vsys"])
self._goto_flagsPage()
# 搜索目的vsys数据
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(Des_ID_list[0])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(Des_ID_list[0])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
# 获取sync后的值
des_value_Name = self.driver.find_element(By.XPATH,
@@ -2686,9 +2694,9 @@ class Flags:
profile_public.change_vsys(vsys_name=link_list_dict[link_index]["link_dst_vsys"])
self._goto_flagsPage()
# 搜索目的vsys数据
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(Des_ID_list[0])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(Des_ID_list[0])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
# 再次获取sync后的值
second_des_value_name = self.driver.find_element(By.XPATH,
@@ -2705,9 +2713,9 @@ class Flags:
def _delete_des(self, Des_ID_list, data):
if data["Type"] == 0:
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(Des_ID_list[0])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(Des_ID_list[0])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
self.driver.find_element(By.XPATH, listPage_first_row_checkBox_posXpath).click() # 选择第一个对象
# 确认删除
@@ -2715,9 +2723,9 @@ class Flags:
self.driver.find_element(By.XPATH, listPage_object_ip_address_del_yes_Button_posXpath).click()
else:
for id in Des_ID_list:
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(id)
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(id)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
self.driver.find_element(By.XPATH, listPage_first_row_checkBox_posXpath).click() # 选择第一个对象
# 确认删除
@@ -2737,9 +2745,9 @@ class Flags:
def _delete_source(self, Sou_ID_list, data):
if data["Type"] == 0:
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(Sou_ID_list[0])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(Sou_ID_list[0])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
self.driver.find_element(By.XPATH, listPage_first_row_checkBox_posXpath).click() # 选择第一个对象
# 确认删除
@@ -2747,9 +2755,9 @@ class Flags:
self.driver.find_element(By.XPATH, listPage_object_ip_address_del_yes_Button_posXpath).click()
else:
for id in Sou_ID_list:
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(id)
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(id)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
time.sleep(2)
self.driver.find_element(By.XPATH, listPage_first_row_checkBox_posXpath).click() # 选择第一个对象
# 确认删除
@@ -2813,8 +2821,8 @@ class Flags:
profile_public = ProfilesPublicOperations(self.driver)
profile_public.change_vsys(vsys_name=link_list_dict[link_index]["link_dst_vsys"])
self._goto_flagsPage()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(data["Name"])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchName_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(data["Name"])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_Name_posXpath).click()
self.driver.find_element(By.XPATH, listPage_objectSearch_ip_address_buttonSearch_posId).click()
time.sleep(2)
des_deatils_list = self.driver.find_elements(By.XPATH,
@@ -2825,9 +2833,9 @@ class Flags:
print(des_result)
self._goto_flagsPage()
for id in Des_ID_list:
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(id)
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(id)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
self.driver.find_element(By.XPATH, listPage_first_row_checkBox_posXpath).click() # 选择第一个对象
# 确认删除
self.driver.find_element(By.XPATH, flag_listPage_deleteButton_posId).click()
@@ -2838,9 +2846,9 @@ class Flags:
def _only_del_linkSouData(self, Sou_ID_list):
self._goto_flagsPage()
for id in Sou_ID_list:
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(id)
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(id)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_button_posXpath).click()
self.driver.find_element(By.XPATH, listPage_first_row_checkBox_posXpath).click() # 选择第一个对象
# 确认删除
self.driver.find_element(By.XPATH, flag_listPage_deleteButton_posId).click()
@@ -2851,32 +2859,32 @@ class Flags:
self._create(data)
# 获取页面元素
self._goto_flagsPage()
- my_table_dict = self.objects_po.extract_ele()
+ my_table_dict = self.objects_po.extract_ele_flag()
details_first_value = ""
for search_type in search_type_list:
- if search_type == "ID":
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).click()
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(my_table_dict['ID'])
- self.driver.find_element(By.XPATH, flag_listPage_object_searchId_posId).click()
+ if search_type == "UUID":
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(my_table_dict['UUID'])
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_UUID_posXpath).click()
elif search_type == "Name":
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).click()
input_value = self.operate_input_value_4_multiple_search(my_table_dict['Name'])
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(input_value)
- self.driver.find_element(By.XPATH, flag_listPage_object_searchName_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(input_value)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_Name_posXpath).click()
elif search_type == "Description":
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).click()
input_value = self.operate_input_value_4_multiple_search(my_table_dict['Description'])
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(input_value)
- self.driver.find_element(By.XPATH, flag_listPage_object_searchDescription_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(input_value)
+ self.driver.find_element(By.XPATH, listPage_objectSearch_select_Description_posXpath).click()
elif search_type == "Details":
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).click()
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).click()
input_value = self.operate_input_value_4_multiple_search(details_first_value)
- self.driver.find_element(By.XPATH, mainPage_ObjectSearch_selectLabel_posId).send_keys(input_value)
+ self.driver.find_element(By.XPATH, listpage_search_input_posXpath).send_keys(input_value)
self.driver.find_element(By.XPATH, acc_listPage_object_searchDetails_posId).click()
- search_button = self.driver.find_element(By.XPATH, mainPage_ObjectSearch_buttonSearch_posId)
+ search_button = self.driver.find_element(By.XPATH, listpage_search_button_posXpath)
self.driver.execute_script("arguments[0].scrollIntoView();", search_button)
search_button.click()
- self._query_verify(search_type="Name", search_value=self.my_item_name)
+ # self._query_verify(search_type="Name", search_value=self.my_item_name)
# 清理测试数据
self._del(data)
@@ -2899,16 +2907,16 @@ class Flags:
self.driver.find_element(By.XPATH, listPage_editButton_posXpath).click()
##点击 add button展开drawer_search
self.driver.find_element(By.XPATH,
- acc_ObjectGroupDetailPage_subObjects_addButton_normalAdd_posXpath).click()
+ flag_ObjectGroupDetailPage_subObjects_addButton_normalAdd_posXpath).click()
# drawer_search 校验
try:
# 首先进行错误搜索校验
self.driver.find_element(By.XPATH, groupObjectDetailPage_addSubObjecDrawer_searchInput_posXpath).send_keys(
self.my_random.random_number() + Keys.ENTER)
- assert self.driver.find_element(By.XPATH,
- groupObjectDetailPage_addSubObjecDrawer_totalText_posXpath).text == "Total:0"
+ # assert self.driver.find_element(By.XPATH,
+ # groupObjectDetailPage_addSubObjecDrawer_totalText_posXpath).text == "Total:0"
# 正确校验
- self.driver.find_element(By.XPATH, groupObjectDetailPage_addSubObjecDrawer_searchInput_posXpath).clear()
+ self.driver.find_element(By.XPATH, '//i[@class="iconfont icon-Clear_aNormal close-icon"]').click()
self.driver.find_element(By.XPATH, groupObjectDetailPage_addSubObjecDrawer_searchInput_posXpath).send_keys(
search_value + Keys.ENTER)
# resulte_text = self.driver.find_element(By.XPATH,"//div[@class='IpItems list-box']//ul[@class='row-container tableList']/li[1]/div").text
@@ -2985,21 +2993,26 @@ if __name__ == '__main__':
# 切换Vsys
# profile_pub = ProfilesPublicOperations(driver)
# profile_pub.change_vsys(vsys_name='UIAutoTestVsys')
- flag._reference_by_object(data=
+ flag._sub_objects_drawer_search(data=
{
- "ids": "修改Flag(单个item 和 多个item)| T003-1",
- "Model": "modify",
- "Type": 0,
+ "ids": "test_sub_objects_drawer_search",
+ "Model": "create",
+ "Type": 1,
"Search type": "",
"Name": "",
- "Items": [
- [
- "1:0->1:1",
- "2:1->9:1",
- "14:0->[random]"
- ]
- ],
- "Description": ""
+ "Items": [],
+ "Description": "",
+ "Subordinate Objects": {
+ "subName": "",
+ "subItems": [
+ [
+ "5:0->",
+ "7:1->",
+ "[random]->"
+ ]
+ ],
+ "subDescription": ""
+ }
},
)
time.sleep(3)
diff --git a/common/ui_common/objects/objects_public_operations.py b/common/ui_common/objects/objects_public_operations.py
index 0061af52..dc513464 100644
--- a/common/ui_common/objects/objects_public_operations.py
+++ b/common/ui_common/objects/objects_public_operations.py
@@ -377,6 +377,87 @@ class ObjectsPublicOperations:
# self.Name = self.driver.find_element(By.XPATH,listPage_object_mobileIdentities_new_Name_extract_posXpath).text
# self.Description = self.driver.find_element(By.XPATH,listPage_object_mobileIdentities_new_Description_extract_posXpath).text
+ def extract_ele_flag(self, need_exclude=1):
+ """
+ :param need_exclude: 是否需要获取exclude,默认1则获取,不为1则略过
+ :return:
+ """
+ # self.driver.isElementExist(Element='//div/div[3]/table/tbody/tr[1]') # 查看第一行是否存在数据
+ self.driver.isElementExist(
+ Element='//div[@aria-rowindex="2"]') # 查看第一行是否存在数据
+ if self.driver.Exist:
+ # 展示所有列
+ column_setting_btn = self.driver.find_element(By.XPATH,
+ mainPage_ObjectSearch_Column_settings_posXpath) # 列设置按钮
+ self.driver.execute_script("arguments[0].scrollIntoView();", column_setting_btn)
+ column_setting_btn.click() # 点击列设置
+ self.driver.find_element(By.XPATH, '//span[text()="Vsys ID"]').click()
+ # self.driver.find_element(By.XPATH, '//span[text()="UUID"]').click()
+ self.driver.find_element(By.XPATH, '//div[text()="Vsys ID"]').click()
+ # all_checked_xpath = '//*[@class="all-btn"]//*[@class="el-checkbox__input is-checked"]'
+ # if self.driver.element_isExist(By.XPATH, all_checked_xpath): # 如果全选被选中
+ # self.driver.find_element(By.XPATH,
+ # mainPage_ObjectSearch_Column_settings_click_Cancel_Button_posXpath).click() # 点击Cancel按钮
+ # else:
+ # self.driver.find_element(By.XPATH,
+ # mainPage_ObjectSearch_Column_settings_select_allCheckBox_posXpath).click() # 全选
+ # self.driver.find_element(By.XPATH,
+ # mainPage_ObjectSearch_Column_settings_click_OK_Button_posXpath).click() # 点击OK按钮
+
+ # 公共方法 Detail特殊,需要使用时特殊提取
+ # list_headers_template = '//div[@class="el-table__header-wrapper"]//span[text()="{}"]'
+ # list_firstRow_values_template = '//div[contains(@class,"el-table__body-wrapper")]//tr[1]//td[count({a}/../../../preceding-sibling::th)+1]{b}'
+ #
+ # list_headers_id_posXpath = list_headers_template.format("ID")
+ # list_headers_vsys_id_posXpath = list_headers_template.format("Vsys ID")
+ # list_headers_name_posXpath = list_headers_template.format("Name")
+ #
+ # list_headers_description_posXpath = list_headers_template.format("Description")
+ # list_headers_refer_count_posXpath = list_headers_template.format("Reference Count")
+ #
+ # list_firstRow_values_id_posXpath = list_firstRow_values_template.format(a=list_headers_id_posXpath,
+ # b='//div[@class="table-status-item-id"]//span')
+ # list_firstRow_values_vsys_id_posXpath = list_firstRow_values_template.format(
+ # a=list_headers_vsys_id_posXpath, b='//*[text()]')
+ # list_firstRow_values_name_posXpath = list_firstRow_values_template.format(a=list_headers_name_posXpath,
+ # b='//span')
+ #
+ # list_firstRow_values_description_posXpath = list_firstRow_values_template.format(
+ # a=list_headers_description_posXpath, b='//span') + "|" + list_firstRow_values_template.format(
+ # a=list_headers_description_posXpath, b='//p')
+ # list_firstRow_values_refer_count_posXpath = list_firstRow_values_template.format(
+ # a=list_headers_refer_count_posXpath, b='//div[contains(@class,"textCenter")]')
+
+ # self.key_id = self.driver.find_element(By.XPATH, list_headers_id_posXpath).text
+ # self.value_id = self.driver.find_element(By.XPATH, list_firstRow_values_id_posXpath).text
+ self.key_vsys_id = self.driver.find_element(By.XPATH, '//div[text()="Vsys ID"]').text
+ self.value_vsys_id = self.driver.find_element(By.XPATH, '//div[@aria-rowindex="2"]//div[@data-field="vsys"]').text
+
+ # self.uuid_name = self.driver.find_element(By.XPATH, '//div[text()="UUID"]').text
+ # self.uuid_value = self.driver.find_element(By.XPATH, '//div[@aria-rowindex="2"]//div[@data-field="uuid"]').text
+ self.key_name = self.driver.find_element(By.XPATH, '//div[@class="MuiDataGrid-columnHeaderTitle css-mh3zap" and text()="Name"]').text
+ self.value_name = self.driver.find_element(By.XPATH, '//div[@aria-rowindex="2"]//span[@class="truncate"]').text
+
+ self.key_des = self.driver.find_element(By.XPATH, '//div[@class="MuiDataGrid-columnHeaderTitle css-mh3zap" and text()="Description"]').text
+ self.value_des = self.driver.find_element(By.XPATH, '//div[@aria-rowindex="2"]//div[@data-field="description"]').text
+ # self.key_refer_count = self.driver.find_element(By.XPATH, '//div[@class="MuiDataGrid-columnHeaderTitle css-mh3zap" and text()="Usage"]').text
+ # self.value_refer_count = self.driver.find_element(By.XPATH, list_firstRow_values_refer_count_posXpath).text
+
+ if need_exclude == 1:
+ # list_headers_exclude_posXpath = list_headers_template.format("Exclude Members")
+ # list_firstRow_values_exclude_posXpath = list_firstRow_values_template.format(
+ # a=list_headers_exclude_posXpath,
+ # b='//div[@class="bifangWidth"]|div[@class="three-row list-popover-click"]')
+ self.key_exclude = self.driver.find_element(By.XPATH, '//div[@class="MuiDataGrid-columnHeaderTitle css-mh3zap" and text()="Exclude Members"]').text
+ self.value_exclude = self.driver.find_element(By.XPATH, '//div[@aria-rowindex="2"]//div[@data-field="exclude_sub_object_list"]').text
+ self.table_dict = {self.key_vsys_id: self.value_vsys_id,self.key_name: self.value_name, self.key_exclude: self.value_exclude,
+ self.key_des: self.value_des,"Details": "null"}
+
+ else:
+ self.table_dict = {self.key_vsys_id: self.value_vsys_id,self.key_name: self.value_name, self.key_des: self.value_des,
+ "Details": "null"}
+ # print("extract_ele TEST:{}".format(self.table_dict))
+ return self.table_dict
def licenese_Check(self):
try:
self.driver.isElementExist(Element='//div/div[1]/div[2]/div/div/div[3]/i')
diff --git a/page_element/objects_element_position.py b/page_element/objects_element_position.py
index b69e494a..1bcc6f49 100644
--- a/page_element/objects_element_position.py
+++ b/page_element/objects_element_position.py
@@ -1432,7 +1432,7 @@ flag_ObjectDetailPage_auditLogsDrawer_firstRowLog_checkBox_posXpath = url_Object
flag_ObjectDetailPage_auditLogsDrawer_compareButton_posXpath = url_ObjectDetailPage_auditLogsDrawer_compareButton_posXpath # Audit Logs 侧滑页Compare 按钮Xpath
flag_ObjectDetailPage_auditLogsDrawer_compareDrawer_operationText_posXpath = url_ObjectDetailPage_auditLogsDrawer_compareDrawer_operationText_posXpath # Audit Logs 侧滑页点击Compare后的 operation text Xpath
flag_ObjectDetailPage_flagItemChunk_posXpath = '//div[@class="CommonItems"]//div[@class="edit-row"]//span[@class="flex"]//span[contains(@class,"flag-item-chunk")]' # Item flag 选择块
-flag_ObjectDetailPage_flagItemChunk_template_posXpath = '(//button[@class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary flag-- css-d6ftns"])[{}]' # Item flag 选择块!!!!!
+flag_ObjectDetailPage_flagItemChunk_template_posXpath = '(//div[@data-testid="virtuoso-item-list"]/div[@data-index="0"]//button)[{}]' # Item flag 选择块!!!!!
flag_ObjectDetailPage_DelCross_posXpath = url_ObjectDetailPage_urlDelCross_posXpath # item删除按钮Xpath
# 详情页通用元素
flag_ObjectDetailPage_mainOkButton_poId = 'OK-_FlagsDetail_Home_App_anonymousComponent' # OK按钮ID
@@ -1442,23 +1442,23 @@ flag_ObjectDetailPage_okButton_yes_posXpath = url_ObjectDetailPage_okButton_yes_
# 对象组详情页
flag_ObjectGroupDetailPage_subObjects_addButton_normalAdd_posXpath = '//div[@class="flag-object-included_sub_object_uuids"]//i[@class="iconfont icon-Create1 text-[18px] text-weight-700] text-[--color-primary] cursor-pointer"]' # Subordinate Objects 下有数据新增时"+"按钮Xpath!!!!!
flag_ObjectGroupDetailPage_subObjects_addButton_newAdd_posXpath = '//div[@class="flag-object-included_sub_object_uuids"]//i' # Subordinate Objects 下无数据新增时"+"按钮Xpath!!!!!
-flag_ObjectDetailPage_firstObject = '//li[@data-id="178666"]//span' ## 侧滑Objects列表中第一个flag object Xpath!!!!!!
+flag_ObjectDetailPage_firstObject = '//ul[@class="MuiList-root MuiList-vertical MuiList-variantPlain MuiList-colorNeutral MuiList-sizeMd css-1cklc3"]/li[1]' ## 侧滑Objects列表中第一个flag object Xpath!!!!!!
flag_ObjectGroupDetailPage_subObjects_toggleDraw_addButton_posXpath = '//button[@class="MuiIconButton-root MuiIconButton-variantPlain MuiIconButton-colorNeutral MuiIconButton-sizeMd MuiMenuButton-root MuiMenuButton-variantOutlined MuiMenuButton-colorNeutral MuiMenuButton-sizeMd css-83p2rh"]/i' # Flag侧滑窗口的"+"按钮!!!!!
-flag_ObjectGroupDetailPage_subObjects_toggleDraw_closeButton_posXpath = '//button[@class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary css-5vcc8t"]' # Flag侧滑窗口的Close按钮!!!!!
+flag_ObjectGroupDetailPage_subObjects_toggleDraw_closeButton_posXpath = '//i[@class="iconfont icon-Clear_aNormal close-icon"]' # Flag侧滑窗口的Close按钮!!!!!
flag_ObjectGroupDetailPage_subObjects_toggleDraw_addButton_flag_posXpath = acc_ObjectGroupDetailPage_subObjects_toggleDraw_addButton_account_posXpath # Flag侧滑窗口的"+"按钮下的Flag
flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_nameInput_posXpath = '(//input[@class="MuiInput-input css-fqt4w4"])[2]' # 侧滑子Create Flag页面Name input Xpath!!!!!
flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_itemsAddButton_posXpath = '//div[@class="mt-[10px] flex justify-center"]//i[@class="iconfont icon-Create1 font-[700]"]' # 侧滑子Create Flag页面中Items下的"+"按钮 Xpath!!!!!
flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_descriptionTextarea_posXpath = '(//textarea[@placeholder="Please enter the content"])[2]' # 侧滑子Create Flag 页面中的Description textarea Xpath!!!!!
-flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_itemsValueSaveButton_posXpath = '//button[@class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary action-save css-kv7t48"]' # 侧滑子Create Flag页面中Items下的保存按钮 Xpath!!!!!
+flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_itemsValueSaveButton_posXpath = '//i[@class="operate-icon iconfont icon-save"]' # 侧滑子Create Flag页面中Items下的保存按钮 Xpath!!!!!
flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_okButton_posXpath = '(//button[@class="MuiButtonBase-root MuiButton-root MuiLoadingButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary MuiButton-root MuiLoadingButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary form-action-submit css-1djnbgz"]//span[@class="MuiTouchRipple-root css-w0pj6f"])[2]' # 侧滑子Create Flag 页面中OK按钮!!!!!
flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_okButton_yes_posXpath = url_ObjectDetailPage_okButton_yes_posXpath # 侧滑子Create Flag 页面确认弹窗的“Yes”按钮
flag_ObjectGroupDetailPage_subObjects_subCreateFlagDrawer_okButton_cancel_posXpath = url_ObjectDetailPage_okButton_cancel_posXpath # 侧滑子Create Flag页面确认弹窗的“Cancel”按钮
-flagGroup_ObjectDetailPage_excludeObjectsSwitch_normalAdd_posXpath = '//div[@class="flag-object-excluded_sub_object_uuids"]//i[@class="iconfont icon-Create1 text-[18px] text-weight-700] text-[--color-primary] cursor-pointer"]' # Exclude Objects有数据时新增按钮Xpath!!!!!
-flagGroup_ObjectDetailPage_excludeObjectsSwitch_newAdd_posXpath = '//div[@class="flag-object-excluded_sub_object_uuids"]//button[@class="MuiButtonBase-root MuiButton-root MuiLoadingButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary MuiButton-root MuiLoadingButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary css-1d67a6h"]' # Exclude Objects无数据时新增按钮Xpath!!!!!
-flag_ObjectDetailPage_secondObject = '//li[@data-id="178665"]//span' # 侧滑 Object中第二个url Xpath!!!!!
+flagGroup_ObjectDetailPage_excludeObjectsSwitch_normalAdd_posXpath = '//div[@class="flag-object-excluded_sub_object_uuids"]//i[@class="iconfont icon-Create1 text-[18px] font-[700] text-[--color-primary] cursor-pointer"]' # Exclude Objects有数据时新增按钮Xpath!!!!!
+flagGroup_ObjectDetailPage_excludeObjectsSwitch_newAdd_posXpath = '//div[@class="flag-object-excluded_sub_object_uuids"]' # Exclude Objects无数据时新增按钮Xpath!!!!!
+flag_ObjectDetailPage_secondObject = '//ul[@class="MuiList-root MuiList-vertical MuiList-variantPlain MuiList-colorNeutral MuiList-sizeMd css-1cklc3"]/li[2]' # 侧滑 Object中第二个url Xpath!!!!!
flagGroup_ObjectDetailPage_excludeObjects_itemsArea_posXpath = '//div[@class="flag-object-excluded_sub_object_uuids"]' # Exclude Objects下的item区域div Xpath!!!!!
# flag_ObjectDetailPage_firstObject =url_ObjectDetailPage_firstUrlObject # 侧滑 Object中第一个url Xpath
-flagGroup_ObjectDetailPage_excludeObjectsSwitch_posXpath = urlGroup_ObjectDetailPage_excludeObjectsSwitch_posXpath # Exclude Objects Switch Xpath
+flagGroup_ObjectDetailPage_excludeObjectsSwitch_posXpath = "//div[@class='flag-object-']//span[@class='MuiButtonBase-root MuiSwitch-switchBase MuiSwitch-colorPrimary PrivateSwitchBase-root MuiSwitch-switchBase MuiSwitch-colorPrimary css-y2jqxi']" # Exclude Objects Switch Xpath
flagGroup_ObjectDetailPage_subOkButton_posId = 'OK-_FlagsDetail_VDraswer_EditDraw_FlagsDetail_Home_App_anonymousComponent'
flagGroup_ObjectDetailPage_subOkButton_posXpath = '(//button[@class="MuiButtonBase-root MuiButton-root MuiLoadingButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary MuiButton-root MuiLoadingButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary form-action-submit css-1djnbgz"]//span[@class="MuiTouchRipple-root css-w0pj6f"])[2]' # ok按钮xpath!!!!!
flagGroup_ObjectDetailPage_subOkButton_yes_posXpath = "//div[@class='el-message-box__wrapper']/div/div[3]/button[2]/span" # 子确认弹窗的“Yes”按钮