diff options
| author | guowenzheng <[email protected]> | 2024-10-25 10:27:13 +0800 |
|---|---|---|
| committer | guowenzheng <[email protected]> | 2024-10-25 10:27:13 +0800 |
| commit | dbeb3471037cff138af8822c3325b6452e8ddc79 (patch) | |
| tree | e242b1dea4cd4ff21cbc03bb0358d58fff8605ba | |
| parent | ee3edc1e04030abd32ec0fe31c23d8d6f1eba4e3 (diff) | |
元素定位逻辑修改
| -rw-r--r-- | cases/object/test_flags.py | 64 | ||||
| -rw-r--r-- | common/ui_common/objects/apns.py | 6 | ||||
| -rw-r--r-- | common/ui_common/objects/flags.py | 239 | ||||
| -rw-r--r-- | common/ui_common/objects/objects_public_operations.py | 81 | ||||
| -rw-r--r-- | page_element/objects_element_position.py | 16 |
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”按钮 |
