Index: .idea/shelf/更改1/shelved.patch
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.idea/shelf/更改1/shelved.patch b/.idea/shelf/更改1/shelved.patch
new file mode 100644
--- /dev/null	(date 1735806911111)
+++ b/.idea/shelf/更改1/shelved.patch	(date 1735806911111)
@@ -0,0 +1,277 @@
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\ndef suite_setup():\r\n    wd = GSTORE['wd']\r\n    user_login(\"admin@pgy\", \"ub@123456\", \"csba\")\r\n    enter_system()\r\n    enter_manage()\r\n    enter_areafuntion_manage()\r\n\r\n# def suite_teardown():\r\n#      INFO('进行清除操作')\r\n#      wd = GSTORE['wd']\r\n#      wd.quit()\r\n\r\n
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py b/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py	(date 1735806568100)
+@@ -10,8 +10,8 @@
+     enter_manage()
+     enter_areafuntion_manage()
+ 
+-# def suite_teardown():
+-#      INFO('进行清除操作')
+-#      wd = GSTORE['wd']
+-#      wd.quit()
++def suite_teardown():
++    INFO('进行清除操作')
++    wd = GSTORE['wd']
++    wd.quit()
+ 
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass AreafuntionAdd001:\r\n    name = 'Areafuntion_add_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '点击新增按钮')\r\n        areafuntion_add = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'新增')]\"))\r\n        )\r\n        areafuntion_add.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '填写功能名称')\r\n        funtion_name = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//div[@class='el-input el-input--suffix']//input[@placeholder='请输入功能名称']\"))\r\n        )\r\n        funtion_name.clear()\r\n        funtion_name.send_keys(\"测试功能1\")\r\n\r\n        STEP(3, '填写排序')\r\n        funtion_sort = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='排序']\"))\r\n        )\r\n        funtion_sort.clear()\r\n        funtion_sort.send_keys(\"123\")\r\n\r\n        STEP(4, '填写备注')\r\n        funtion_remark = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='备注']\"))\r\n        )\r\n        funtion_remark.clear()\r\n        funtion_remark.send_keys(\"功能备注测试\")\r\n\r\n        STEP(5, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(6, '验证是否新增成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py b/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py	(date 1735806754678)
+@@ -3,50 +3,68 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class AreafuntionAdd001:
+-    name = 'Areafuntion_add_001'
++# 构建 CSV 文件的绝对路径
++csv_path = os.path.abspath(
++    os.path.join(os.path.dirname(__file__), '..', '..', 'testdata', '05区域功能', '新增区域功能.csv'))
++
++class AreafuntionAdd:
++    tag = ['新增区域功能']
++    ddt_cases = read_csv_data(csv_path)
+     def teststeps(self):
+         wd = GSTORE['wd']
+ 
++        #从self.para中解构出数据
++        name = self.name
++        funtion_name, sort, remark, info= self.para
++
+         STEP(1, '点击新增按钮')
+         areafuntion_add = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
+         )
+         areafuntion_add.click()
+-        sleep(2)
++        sleep(1)
+ 
+-        STEP(2, '填写功能名称')
+-        funtion_name = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入功能名称']"))
++        STEP(2, f'填写功能名称:{funtion_name}')
++        funtion_name_input = WebDriverWait(wd, 10).until(
++            EC.presence_of_element_located(
++                (By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入功能名称']"))
+         )
+-        funtion_name.clear()
+-        funtion_name.send_keys("测试功能1")
++        funtion_name_input.clear()
++        funtion_name_input.send_keys(funtion_name)
+ 
+-        STEP(3, '填写排序')
++        STEP(3, f'填写排序:{sort}')
+         funtion_sort = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//input[@placeholder='排序']"))
++            EC.presence_of_element_located(
++                (By.XPATH, "//input[@placeholder='排序']"))
+         )
+         funtion_sort.clear()
+-        funtion_sort.send_keys("123")
++        funtion_sort.send_keys(sort)
+ 
+-        STEP(4, '填写备注')
++        STEP(4, f'填写备注:{remark}')
+         funtion_remark = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located(
+                 (By.XPATH, "//input[@placeholder='备注']"))
+         )
+         funtion_remark.clear()
+-        funtion_remark.send_keys("功能备注测试")
++        funtion_remark.send_keys(remark)
+ 
+         STEP(5, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
+         )
+         commit.click()
+ 
+         STEP(6, '验证是否新增成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located(
++                (By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+-        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == info)
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass areafuntionDel001:\r\n    name = 'areafuntion_del_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '搜索对应的区域功能')\r\n        areafuntion_search= WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//input[contains(@placeholder,'请输入区域功能')])[1]\"))\r\n        )\r\n        areafuntion_search.clear()\r\n        areafuntion_search.send_keys(\"修改-测试功能1\")\r\n\r\n        STEP(2, '勾选区域功能')\r\n        areafuntion_select = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//span[contains(@class,'el-checkbox__inner')])[2]\"))\r\n        )\r\n        areafuntion_select.click()\r\n\r\n        STEP(3, '点击删除按钮')\r\n        areafuntion_mod = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'删除')]\"))\r\n        )\r\n        areafuntion_mod.click()\r\n        sleep(2)\r\n\r\n        STEP(4, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(5, '验证是否修改成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py b/运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py	(date 1735806794306)
+@@ -10,34 +10,43 @@
+ 
+         STEP(1, '搜索对应的区域功能')
+         areafuntion_search= WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//input[contains(@placeholder,'请输入区域功能')])[1]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//input[@placeholder='请输入功能名称']"))
+         )
+         areafuntion_search.clear()
+         areafuntion_search.send_keys("修改-测试功能1")
+ 
+         STEP(2, '勾选区域功能')
+         areafuntion_select = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//span[contains(@class,'el-checkbox__inner')])[2]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "(//span[@class='el-checkbox__inner'])[2]"))
+         )
+         areafuntion_select.click()
+ 
+         STEP(3, '点击删除按钮')
+         areafuntion_mod = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'删除')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//span[contains(text(),'删除')]"))
+         )
+         areafuntion_mod.click()
+-        sleep(2)
++        sleep(1)
+ 
+         STEP(4, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "(//span[contains(text(),'确 定')])[3]"))
+         )
+         commit.click()
+ 
+         STEP(5, '验证是否修改成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located(
++                (By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass areafuntionMod001:\r\n    name = 'areafuntion_mod_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '搜索对应的区域功能')\r\n        areafuntion_search= WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//input[contains(@placeholder,'请输入区域功能')])[1]\"))\r\n        )\r\n        areafuntion_search.clear()\r\n        areafuntion_search.send_keys(\"测试功能1\")\r\n\r\n        STEP(2, '勾选区域功能')\r\n        areafuntion_select = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//span[contains(@class,'el-checkbox__inner')])[2]\"))\r\n        )\r\n        areafuntion_select.click()\r\n\r\n        STEP(3, '点击编辑按钮')\r\n        areafuntion_mod = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'编辑')]\"))\r\n        )\r\n        areafuntion_mod.click()\r\n        sleep(2)\r\n\r\n        STEP(4, '修改区域功能内容')\r\n        funtion_name = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//div[@class='el-input el-input--suffix']//input[@placeholder='请输入区域功能']\"))\r\n        )\r\n        funtion_name.clear()\r\n        funtion_name.send_keys(\"修改-测试功能1\")\r\n\r\n        STEP(5, '修改排序')\r\n        funtion_sort = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='排序']\"))\r\n        )\r\n        funtion_sort.clear()\r\n        funtion_sort.send_keys(\"999\")\r\n\r\n        STEP(6, '修改备注信息')\r\n        funtion_remark = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='备注']\"))\r\n        )\r\n        funtion_remark.clear()\r\n        funtion_remark.send_keys(\"修改-功能备注\")\r\n\r\n        STEP(7, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(8, '验证是否修改成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py b/运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py	(date 1735806777108)
+@@ -3,41 +3,46 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class areafuntionMod001:
+-    name = 'areafuntion_mod_001'
++class areafuntionMod:
++    name = 'areafuntion_mod'
+     def teststeps(self):
+         wd = GSTORE['wd']
+ 
+         STEP(1, '搜索对应的区域功能')
+         areafuntion_search= WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//input[contains(@placeholder,'请输入区域功能')])[1]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//input[@placeholder='请输入功能名称']"))
+         )
+         areafuntion_search.clear()
+-        areafuntion_search.send_keys("测试功能1")
++        areafuntion_search.send_keys("语音翻译")
+ 
+         STEP(2, '勾选区域功能')
+         areafuntion_select = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//span[contains(@class,'el-checkbox__inner')])[2]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "(//span[@class='el-checkbox__inner'])[2]"))
+         )
+         areafuntion_select.click()
+ 
+         STEP(3, '点击编辑按钮')
+         areafuntion_mod = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'编辑')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//span[contains(text(),'编辑')]"))
+         )
+         areafuntion_mod.click()
+-        sleep(2)
++        sleep(1)
+ 
+         STEP(4, '修改区域功能内容')
+         funtion_name = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入区域功能']"))
++            EC.presence_of_element_located(
++                (By.XPATH, "//div[contains(@class,'dialog-input')]//input[contains(@placeholder,'请输入功能名称')]"))
+         )
+         funtion_name.clear()
+         funtion_name.send_keys("修改-测试功能1")
+ 
+         STEP(5, '修改排序')
+         funtion_sort = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//input[@placeholder='排序']"))
++            EC.presence_of_element_located(
++                (By.XPATH, "//input[contains(@placeholder,'排序')]"))
+         )
+         funtion_sort.clear()
+         funtion_sort.send_keys("999")
+@@ -52,14 +57,20 @@
+ 
+         STEP(7, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "(//span[contains(text(),'确 定')])[2]"))
+         )
+         commit.click()
+ 
+         STEP(8, '验证是否修改成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located(
++                (By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
+\ No newline at end of file
Index: .idea/shelf/.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.idea/shelf/.xml b/.idea/shelf/.xml
new file mode 100644
--- /dev/null	(date 1735807179362)
+++ b/.idea/shelf/.xml	(date 1735807179362)
@@ -0,0 +1,4 @@
+<changelist name="更改" date="1735806491603" recycled="false">
+  <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/更改/shelved.patch" />
+  <option name="DESCRIPTION" value="20250102" />
+</changelist>
\ No newline at end of file
Index: .idea/shelf/1.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.idea/shelf/1.xml b/.idea/shelf/1.xml
new file mode 100644
--- /dev/null	(date 1735807179364)
+++ b/.idea/shelf/1.xml	(date 1735807179364)
@@ -0,0 +1,4 @@
+<changelist name="更改1" date="1735806948821" recycled="false" deleted="true">
+  <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/更改1/shelved.patch" />
+  <option name="DESCRIPTION" value="更改" />
+</changelist>
\ No newline at end of file
Index: .idea/shelf/更改/shelved.patch
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.idea/shelf/更改/shelved.patch b/.idea/shelf/更改/shelved.patch
new file mode 100644
--- /dev/null	(date 1735806491572)
+++ b/.idea/shelf/更改/shelved.patch	(date 1735806491572)
@@ -0,0 +1,1628 @@
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py b/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py
+deleted file mode 100644
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,52 +0,0 @@
+-import sys
+-import os
+-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+-from 运维集控.项目测试.运维标准版.lib.base import *
+-
+-class AreafuntionAdd001:
+-    name = 'Areafuntion_add_001'
+-    def teststeps(self):
+-        wd = GSTORE['wd']
+-
+-        STEP(1, '点击新增按钮')
+-        areafuntion_add = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
+-        )
+-        areafuntion_add.click()
+-        sleep(2)
+-
+-        STEP(2, '填写功能名称')
+-        funtion_name = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入功能名称']"))
+-        )
+-        funtion_name.clear()
+-        funtion_name.send_keys("测试功能1")
+-
+-        STEP(3, '填写排序')
+-        funtion_sort = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//input[@placeholder='排序']"))
+-        )
+-        funtion_sort.clear()
+-        funtion_sort.send_keys("123")
+-
+-        STEP(4, '填写备注')
+-        funtion_remark = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located(
+-                (By.XPATH, "//input[@placeholder='备注']"))
+-        )
+-        funtion_remark.clear()
+-        funtion_remark.send_keys("功能备注测试")
+-
+-        STEP(5, '点击确认')
+-        commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
+-        )
+-        commit.click()
+-
+-        STEP(6, '验证是否新增成功')
+-        get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+-        )
+-        get_menu1 = get_menu.text
+-        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py b/运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py
+deleted file mode 100644
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/02编辑区域功能.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,65 +0,0 @@
+-import sys
+-import os
+-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+-from 运维集控.项目测试.运维标准版.lib.base import *
+-
+-class areafuntionMod001:
+-    name = 'areafuntion_mod_001'
+-    def teststeps(self):
+-        wd = GSTORE['wd']
+-
+-        STEP(1, '搜索对应的区域功能')
+-        areafuntion_search= WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//input[contains(@placeholder,'请输入区域功能')])[1]"))
+-        )
+-        areafuntion_search.clear()
+-        areafuntion_search.send_keys("测试功能1")
+-
+-        STEP(2, '勾选区域功能')
+-        areafuntion_select = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//span[contains(@class,'el-checkbox__inner')])[2]"))
+-        )
+-        areafuntion_select.click()
+-
+-        STEP(3, '点击编辑按钮')
+-        areafuntion_mod = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'编辑')]"))
+-        )
+-        areafuntion_mod.click()
+-        sleep(2)
+-
+-        STEP(4, '修改区域功能内容')
+-        funtion_name = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入区域功能']"))
+-        )
+-        funtion_name.clear()
+-        funtion_name.send_keys("修改-测试功能1")
+-
+-        STEP(5, '修改排序')
+-        funtion_sort = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//input[@placeholder='排序']"))
+-        )
+-        funtion_sort.clear()
+-        funtion_sort.send_keys("999")
+-
+-        STEP(6, '修改备注信息')
+-        funtion_remark = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located(
+-                (By.XPATH, "//input[@placeholder='备注']"))
+-        )
+-        funtion_remark.clear()
+-        funtion_remark.send_keys("修改-功能备注")
+-
+-        STEP(7, '点击确认')
+-        commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
+-        )
+-        commit.click()
+-
+-        STEP(8, '验证是否修改成功')
+-        get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+-        )
+-        get_menu1 = get_menu.text
+-        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py b/运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py
+deleted file mode 100644
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/03删除区域功能.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,43 +0,0 @@
+-import sys
+-import os
+-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+-from 运维集控.项目测试.运维标准版.lib.base import *
+-
+-class areafuntionDel001:
+-    name = 'areafuntion_del_001'
+-    def teststeps(self):
+-        wd = GSTORE['wd']
+-
+-        STEP(1, '搜索对应的区域功能')
+-        areafuntion_search= WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//input[contains(@placeholder,'请输入区域功能')])[1]"))
+-        )
+-        areafuntion_search.clear()
+-        areafuntion_search.send_keys("修改-测试功能1")
+-
+-        STEP(2, '勾选区域功能')
+-        areafuntion_select = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "(//span[contains(@class,'el-checkbox__inner')])[2]"))
+-        )
+-        areafuntion_select.click()
+-
+-        STEP(3, '点击删除按钮')
+-        areafuntion_mod = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'删除')]"))
+-        )
+-        areafuntion_mod.click()
+-        sleep(2)
+-
+-        STEP(4, '点击确认')
+-        commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
+-        )
+-        commit.click()
+-
+-        STEP(5, '验证是否修改成功')
+-        get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+-        )
+-        get_menu1 = get_menu.text
+-        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
+Index: .idea/shelf/_2024_12_25_15_22____.xml
+===================================================================
+diff --git a/.idea/shelf/_2024_12_25_15_22____.xml b/.idea/shelf/_2024_12_25_15_22____.xml
+deleted file mode 100644
+--- a/.idea/shelf/_2024_12_25_15_22____.xml	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,4 +0,0 @@
+-<changelist name="在进行更新之前于_2024_12_25_15_22_取消提交了更改_[更改]" date="1735111481056" recycled="true" deleted="true">
+-  <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2024_12_25_15_22_取消提交了更改_[更改]/shelved.patch" />
+-  <option name="DESCRIPTION" value="在进行更新之前于 2024/12/25 15:22 取消提交了更改 [更改]" />
+-</changelist>
+\ No newline at end of file
+Index: .idea/shelf/_2024_12_25_15_28____.xml
+===================================================================
+diff --git a/.idea/shelf/_2024_12_25_15_28____.xml b/.idea/shelf/_2024_12_25_15_28____.xml
+deleted file mode 100644
+--- a/.idea/shelf/_2024_12_25_15_28____.xml	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,4 +0,0 @@
+-<changelist name="在进行更新之前于_2024_12_25_15_28_取消提交了更改_[更改]" date="1735111722258" recycled="true" deleted="true">
+-  <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2024_12_25_15_28_取消提交了更改_[更改]/shelved.patch" />
+-  <option name="DESCRIPTION" value="在进行更新之前于 2024/12/25 15:28 取消提交了更改 [更改]" />
+-</changelist>
+\ No newline at end of file
+Index: .idea/shelf/在进行更新之前于_2024_12_25_15_22_取消提交了更改_[更改]/shelved.patch
+===================================================================
+diff --git a/.idea/shelf/在进行更新之前于_2024_12_25_15_22_取消提交了更改_[更改]/shelved.patch b/.idea/shelf/在进行更新之前于_2024_12_25_15_22_取消提交了更改_[更改]/shelved.patch
+deleted file mode 100644
+--- a/.idea/shelf/在进行更新之前于_2024_12_25_15_22_取消提交了更改_[更改]/shelved.patch	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,66 +0,0 @@
+-Index: .idea/workspace.xml
+-IDEA additional info:
+-Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+-<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"AutoImportSettings\">\r\n    <option name=\"autoReloadType\" value=\"SELECTIVE\" />\r\n  </component>\r\n  <component name=\"ChangeListManager\">\r\n    <list default=\"true\" id=\"7af2ddda-4337-4bd9-adfd-87ab868c08f9\" name=\"更改\" comment=\"重新提交运维相关脚本代码\">\r\n      <change beforePath=\"$PROJECT_DIR$/.idea/misc.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/misc.xml\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/预定系统/.idea/workspace.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/预定系统/.idea/workspace.xml\" afterDir=\"false\" />\r\n    </list>\r\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\r\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\r\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\r\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\r\n  </component>\r\n  <component name=\"Git.Settings\">\r\n    <option name=\"RECENT_GIT_ROOT_PATH\" value=\"$PROJECT_DIR$\" />\r\n    <option name=\"UPDATE_TYPE\" value=\"REBASE\" />\r\n  </component>\r\n  <component name=\"ProjectColorInfo\">{\r\n  &quot;associatedIndex&quot;: 6\r\n}</component>\r\n  <component name=\"ProjectId\" id=\"2qefK5jFULEB70ZGZl73iacPsCN\" />\r\n  <component name=\"ProjectViewState\">\r\n    <option name=\"hideEmptyMiddlePackages\" value=\"true\" />\r\n    <option name=\"showLibraryContents\" value=\"true\" />\r\n  </component>\r\n  <component name=\"PropertiesComponent\">{\r\n  &quot;keyToString&quot;: {\r\n    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,\r\n    &quot;git-widget-placeholder&quot;: &quot;develop&quot;,\r\n    &quot;last_opened_file_path&quot;: &quot;C:/Users/EDY/Desktop/git/ubains-module-test/ubains-module-test&quot;\r\n  }\r\n}</component>\r\n  <component name=\"SharedIndexes\">\r\n    <attachedChunks>\r\n      <set>\r\n        <option value=\"bundled-python-sdk-6a3326d57233-c546a90a8094-com.jetbrains.pycharm.community.sharedIndexes.bundled-PC-242.24807.21\" />\r\n      </set>\r\n    </attachedChunks>\r\n  </component>\r\n  <component name=\"SpellCheckerSettings\" RuntimeDictionaries=\"0\" Folders=\"0\" CustomDictionaries=\"0\" DefaultDictionary=\"应用程序级\" UseSingleDictionary=\"true\" transferred=\"true\" />\r\n  <component name=\"TaskManager\">\r\n    <task active=\"true\" id=\"Default\" summary=\"默认任务\">\r\n      <changelist id=\"7af2ddda-4337-4bd9-adfd-87ab868c08f9\" name=\"更改\" comment=\"\" />\r\n      <created>1735027895112</created>\r\n      <option name=\"number\" value=\"Default\" />\r\n      <option name=\"presentableId\" value=\"Default\" />\r\n      <updated>1735027895112</updated>\r\n    </task>\r\n    <task id=\"LOCAL-00001\" summary=\"重新提交运维相关脚本代码\">\r\n      <option name=\"closed\" value=\"true\" />\r\n      <created>1735028100490</created>\r\n      <option name=\"number\" value=\"00001\" />\r\n      <option name=\"presentableId\" value=\"LOCAL-00001\" />\r\n      <option name=\"project\" value=\"LOCAL\" />\r\n      <updated>1735028100490</updated>\r\n    </task>\r\n    <option name=\"localTasksCounter\" value=\"2\" />\r\n    <servers />\r\n  </component>\r\n  <component name=\"Vcs.Log.Tabs.Properties\">\r\n    <option name=\"TAB_STATES\">\r\n      <map>\r\n        <entry key=\"MAIN\">\r\n          <value>\r\n            <State>\r\n              <option name=\"FILTERS\">\r\n                <map>\r\n                  <entry key=\"branch\">\r\n                    <value>\r\n                      <list>\r\n                        <option value=\"develop\" />\r\n                      </list>\r\n                    </value>\r\n                  </entry>\r\n                </map>\r\n              </option>\r\n            </State>\r\n          </value>\r\n        </entry>\r\n      </map>\r\n    </option>\r\n  </component>\r\n  <component name=\"VcsManagerConfiguration\">\r\n    <MESSAGE value=\"重新提交运维相关脚本代码\" />\r\n    <option name=\"LAST_COMMIT_MESSAGE\" value=\"重新提交运维相关脚本代码\" />\r\n  </component>\r\n</project>
+-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+-<+>UTF-8
+-===================================================================
+-diff --git a/.idea/workspace.xml b/.idea/workspace.xml
+---- a/.idea/workspace.xml	(revision b57d56b8584255c28e848a0ed183e36a51541a57)
+-+++ b/.idea/workspace.xml	(date 1735111282242)
+-@@ -4,11 +4,7 @@
+-     <option name="autoReloadType" value="SELECTIVE" />
+-   </component>
+-   <component name="ChangeListManager">
+--    <list default="true" id="7af2ddda-4337-4bd9-adfd-87ab868c08f9" name="更改" comment="重新提交运维相关脚本代码">
+--      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py" beforeDir="false" afterPath="$PROJECT_DIR$/运维集控/项目测试/运维标准版/cases/05区域功能/01新增区域功能.py" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/预定系统/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/预定系统/.idea/workspace.xml" afterDir="false" />
+--    </list>
+-+    <list default="true" id="7af2ddda-4337-4bd9-adfd-87ab868c08f9" name="更改" comment="修正提交" />
+-     <option name="SHOW_DIALOG" value="false" />
+-     <option name="HIGHLIGHT_CONFLICTS" value="true" />
+-     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+-@@ -16,12 +12,14 @@
+-   </component>
+-   <component name="Git.Settings">
+-     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+--    <option name="UPDATE_TYPE" value="REBASE" />
+-   </component>
+-   <component name="ProjectColorInfo">{
+-   &quot;associatedIndex&quot;: 6
+- }</component>
+-   <component name="ProjectId" id="2qefK5jFULEB70ZGZl73iacPsCN" />
+-+  <component name="ProjectLevelVcsManager">
+-+    <OptionsSetting value="false" id="Update" />
+-+  </component>
+-   <component name="ProjectViewState">
+-     <option name="hideEmptyMiddlePackages" value="true" />
+-     <option name="showLibraryContents" value="true" />
+-@@ -57,7 +55,15 @@
+-       <option name="project" value="LOCAL" />
+-       <updated>1735028100490</updated>
+-     </task>
+--    <option name="localTasksCounter" value="2" />
+-+    <task id="LOCAL-00002" summary="修正提交">
+-+      <option name="closed" value="true" />
+-+      <created>1735111241853</created>
+-+      <option name="number" value="00002" />
+-+      <option name="presentableId" value="LOCAL-00002" />
+-+      <option name="project" value="LOCAL" />
+-+      <updated>1735111241853</updated>
+-+    </task>
+-+    <option name="localTasksCounter" value="3" />
+-     <servers />
+-   </component>
+-   <component name="Vcs.Log.Tabs.Properties">
+-@@ -85,6 +91,7 @@
+-   </component>
+-   <component name="VcsManagerConfiguration">
+-     <MESSAGE value="重新提交运维相关脚本代码" />
+--    <option name="LAST_COMMIT_MESSAGE" value="重新提交运维相关脚本代码" />
+-+    <MESSAGE value="修正提交" />
+-+    <option name="LAST_COMMIT_MESSAGE" value="修正提交" />
+-   </component>
+- </project>
+-\ No newline at end of file
+Index: .idea/shelf/在进行更新之前于_2024_12_25_15_28_取消提交了更改_[更改]/shelved.patch
+===================================================================
+diff --git a/.idea/shelf/在进行更新之前于_2024_12_25_15_28_取消提交了更改_[更改]/shelved.patch b/.idea/shelf/在进行更新之前于_2024_12_25_15_28_取消提交了更改_[更改]/shelved.patch
+deleted file mode 100644
+--- a/.idea/shelf/在进行更新之前于_2024_12_25_15_28_取消提交了更改_[更改]/shelved.patch	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,27 +0,0 @@
+-Index: .idea/workspace.xml
+-IDEA additional info:
+-Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+-<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"AutoImportSettings\">\r\n    <option name=\"autoReloadType\" value=\"SELECTIVE\" />\r\n  </component>\r\n  <component name=\"ChangeListManager\">\r\n    <list default=\"true\" id=\"923e4366-b26b-44a4-9a8e-7655702750f8\" name=\"更改\" comment=\"\">\r\n      <change beforePath=\"$PROJECT_DIR$/.idea/workspace.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/workspace.xml\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/预定系统/README.md\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/预定系统/README.md\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/预定系统/cases/会议历史记录/01历史记录筛选.py\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/预定系统/cases/会议历史记录/01历史记录筛选.py\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/预定系统/cases/会议历史记录/02历史记录再次预定.py\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/预定系统/cases/会议历史记录/02历史记录再次预定.py\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/预定系统/cases/会议审批/01审批会议创建.py\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/预定系统/cases/会议审批/01审批会议创建.py\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/预定系统/cases/会议模板/01会议模板查询.py\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/预定系统/cases/会议模板/01会议模板查询.py\" afterDir=\"false\" />\r\n      <change beforePath=\"$PROJECT_DIR$/预定系统/cases/会议模板/02会议模板再次预定.py\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/预定系统/cases/会议模板/02会议模板再次预定.py\" afterDir=\"false\" />\r\n    </list>\r\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\r\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\r\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\r\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\r\n  </component>\r\n  <component name=\"FileTemplateManagerImpl\">\r\n    <option name=\"RECENT_TEMPLATES\">\r\n      <list>\r\n        <option value=\"Python Script\" />\r\n      </list>\r\n    </option>\r\n  </component>\r\n  <component name=\"Git.Settings\">\r\n    <option name=\"RECENT_GIT_ROOT_PATH\" value=\"$PROJECT_DIR$\" />\r\n  </component>\r\n  <component name=\"ProjectColorInfo\"><![CDATA[{\r\n  \"customColor\": \"\",\r\n  \"associatedIndex\": 0\r\n}]]></component>\r\n  <component name=\"ProjectId\" id=\"2qel6dw2JSIg22RV44sfGJ83Ng2\" />\r\n  <component name=\"PropertiesComponent\"><![CDATA[{\r\n  \"keyToString\": {\r\n    \"Python.安卓信息-消息监听.executor\": \"Run\",\r\n    \"git-widget-placeholder\": \"develop\",\r\n    \"last_opened_file_path\": \"D:/GithubData/自动化/ubains-module-test/预定系统/cases/会议审批\",\r\n    \"node.js.detected.package.eslint\": \"true\",\r\n    \"node.js.detected.package.tslint\": \"true\",\r\n    \"node.js.selected.package.eslint\": \"(autodetect)\",\r\n    \"node.js.selected.package.tslint\": \"(autodetect)\"\r\n  }\r\n}]]></component>\r\n  <component name=\"RecentsManager\">\r\n    <key name=\"CopyFile.RECENT_KEYS\">\r\n      <recent name=\"D:\\GithubData\\自动化\\ubains-module-test\\预定系统\\cases\\会议审批\" />\r\n      <recent name=\"D:\\GithubData\\自动化\\ubains-module-test\\预定系统\\测试数据\\会议模板\" />\r\n      <recent name=\"D:\\GithubData\\自动化\\ubains-module-test\\预定系统\\测试数据\\会议历史记录\" />\r\n    </key>\r\n  </component>\r\n  <component name=\"RunManager\">\r\n    <configuration name=\"安卓信息-消息监听\" type=\"PythonConfigurationType\" factoryName=\"Python\" temporary=\"true\" nameIsGenerated=\"true\">\r\n      <module name=\"ubains-module-test\" />\r\n      <option name=\"ENV_FILES\" value=\"\" />\r\n      <option name=\"INTERPRETER_OPTIONS\" value=\"\" />\r\n      <option name=\"PARENT_ENVS\" value=\"true\" />\r\n      <envs>\r\n        <env name=\"PYTHONUNBUFFERED\" value=\"1\" />\r\n      </envs>\r\n      <option name=\"SDK_HOME\" value=\"\" />\r\n      <option name=\"WORKING_DIRECTORY\" value=\"$PROJECT_DIR$/预定系统/cases/设备管理\" />\r\n      <option name=\"IS_MODULE_SDK\" value=\"true\" />\r\n      <option name=\"ADD_CONTENT_ROOTS\" value=\"true\" />\r\n      <option name=\"ADD_SOURCE_ROOTS\" value=\"true\" />\r\n      <EXTENSION ID=\"PythonCoverageRunConfigurationExtension\" runner=\"coverage.py\" />\r\n      <option name=\"SCRIPT_NAME\" value=\"$PROJECT_DIR$/预定系统/cases/设备管理/安卓信息-消息监听.py\" />\r\n      <option name=\"PARAMETERS\" value=\"\" />\r\n      <option name=\"SHOW_COMMAND_LINE\" value=\"false\" />\r\n      <option name=\"EMULATE_TERMINAL\" value=\"false\" />\r\n      <option name=\"MODULE_MODE\" value=\"false\" />\r\n      <option name=\"REDIRECT_INPUT\" value=\"false\" />\r\n      <option name=\"INPUT_FILE\" value=\"\" />\r\n      <method v=\"2\" />\r\n    </configuration>\r\n    <recent_temporary>\r\n      <list>\r\n        <item itemvalue=\"Python.安卓信息-消息监听\" />\r\n      </list>\r\n    </recent_temporary>\r\n  </component>\r\n  <component name=\"TaskManager\">\r\n    <servers />\r\n  </component>\r\n  <component name=\"com.intellij.coverage.CoverageDataManagerImpl\">\r\n    <SUITE FILE_PATH=\"coverage/ubains_module_test$_.coverage\" NAME=\"安卓信息-消息监听 覆盖结果\" MODIFIED=\"1735034725544\" SOURCE_PROVIDER=\"com.intellij.coverage.DefaultCoverageFileProvider\" RUNNER=\"coverage.py\" COVERAGE_BY_TEST_ENABLED=\"false\" COVERAGE_TRACING_ENABLED=\"false\" WORKING_DIRECTORY=\"$PROJECT_DIR$/预定系统/cases/设备管理\" />\r\n  </component>\r\n</project>
+-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+-<+>UTF-8
+-===================================================================
+-diff --git a/.idea/workspace.xml b/.idea/workspace.xml
+---- a/.idea/workspace.xml	(revision a74bfa17dd939dc6790e420e64b1e73aba2262d4)
+-+++ b/.idea/workspace.xml	(date 1735111706578)
+-@@ -4,15 +4,7 @@
+-     <option name="autoReloadType" value="SELECTIVE" />
+-   </component>
+-   <component name="ChangeListManager">
+--    <list default="true" id="923e4366-b26b-44a4-9a8e-7655702750f8" name="更改" comment="">
+--      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/预定系统/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/预定系统/README.md" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/预定系统/cases/会议历史记录/01历史记录筛选.py" beforeDir="false" afterPath="$PROJECT_DIR$/预定系统/cases/会议历史记录/01历史记录筛选.py" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/预定系统/cases/会议历史记录/02历史记录再次预定.py" beforeDir="false" afterPath="$PROJECT_DIR$/预定系统/cases/会议历史记录/02历史记录再次预定.py" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/预定系统/cases/会议审批/01审批会议创建.py" beforeDir="false" afterPath="$PROJECT_DIR$/预定系统/cases/会议审批/01审批会议创建.py" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/预定系统/cases/会议模板/01会议模板查询.py" beforeDir="false" afterPath="$PROJECT_DIR$/预定系统/cases/会议模板/01会议模板查询.py" afterDir="false" />
+--      <change beforePath="$PROJECT_DIR$/预定系统/cases/会议模板/02会议模板再次预定.py" beforeDir="false" afterPath="$PROJECT_DIR$/预定系统/cases/会议模板/02会议模板再次预定.py" afterDir="false" />
+--    </list>
+-+    <list default="true" id="923e4366-b26b-44a4-9a8e-7655702750f8" name="更改" comment="" />
+-     <option name="SHOW_DIALOG" value="false" />
+-     <option name="HIGHLIGHT_CONFLICTS" value="true" />
+-     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+Index: 运维集控/项目测试/运维标准版/testdata/06区域管理/新增区域.csv
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/testdata/06区域管理/新增区域.csv b/运维集控/项目测试/运维标准版/testdata/06区域管理/新增区域.csv
+deleted file mode 100644
+--- a/运维集控/项目测试/运维标准版/testdata/06区域管理/新增区域.csv	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,13 +0,0 @@
+-area_group,area_type,area_name,area_ip,remark
+-测试分组1,办公室,测试区域1,192.168.1.1,测试区域1
+-测试分组1-1,大会议室,测试区域2,192.168.1.2,测试区域2
+-测试分组1-2,小会议室,测试区域3,192.168.1.3,测试区域3
+-测试分组1-3,培训室,测试区域4,192.168.1.4,测试区域4
+-测试分组2,办公室,测试区域5,192.168.1.5,测试区域5
+-测试分组2-1,大会议室,测试区域6,192.168.1.6,测试区域6
+-测试分组2-2,小会议室,测试区域7,192.168.1.7,测试区域7
+-测试分组2-3,培训室,测试区域8,192.168.1.8,测试区域8
+-测试分组3,办公室,测试区域9,192.168.1.9,测试区域9
+-测试分组3-1,大会议室,测试区域10,192.168.1.10,测试区域10
+-测试分组3-2,小会议室,测试区域11,192.168.1.11,测试区域11
+-测试分组3-3,培训室,测试区域12,192.168.1.12,测试区域12
+Index: 运维集控/项目测试/运维标准版/testdata/05区域功能/新增区域功能.csv
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/testdata/05区域功能/新增区域功能.csv b/运维集控/项目测试/运维标准版/testdata/05区域功能/新增区域功能.csv
+deleted file mode 100644
+--- a/运维集控/项目测试/运维标准版/testdata/05区域功能/新增区域功能.csv	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ /dev/null	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
+@@ -1,7 +0,0 @@
+-funtion_name,sort,remark
+-摄像头,1,摄像头
+-ideahub,2,IdeaHub
+-语音转录,3,语音转录
+-语音识别,4,语音识别
+-语音翻译,5,语音翻译
+-语音合成,6,语音合成
+Index: 运维集控/项目测试/运维标准版/cases/03区域分组/02编辑区域分组.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass AreagroupMod001:\r\n    name = 'Areagroup_modify_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '勾选分组,点击“编辑”按钮')\r\n        try:\r\n            # 等待页面加载,并查找包含文本“测试”的元素旁边的复选框\r\n            checkbox  = WebDriverWait(wd, 10).until(\r\n                EC.presence_of_element_located((By.XPATH, \"//span[contains(text(), '测试区域1')]//span[@class='el-checkbox__inner']\"))\r\n            )\r\n            areagroup_select = checkbox.find_element(By.XPATH, \"./ancestor::span[contains(@class, 'el-checkbox__input')]//input\")\r\n            # 勾选复选框\r\n            if not areagroup_select.is_selected():\r\n                areagroup_select.click()\r\n        finally:\r\n            areagroup_modify = WebDriverWait(wd, 10).until(\r\n                EC.element_to_be_clickable((By.XPATH, \"//span[contains(text(),'编辑')]\"))\r\n            )\r\n            areagroup_modify.click()\r\n            sleep(2)\r\n\r\n        STEP(2, '修改分组名称')\r\n        group_name = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='长度1-20个字符']\"))\r\n        )\r\n        group_name.clear()\r\n        group_name.send_keys(\"测试区域1-已修改\")\r\n\r\n        STEP(3, '修改分组地址')\r\n        group_address = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='输入地址不能大于50个字符']\"))\r\n        )\r\n        group_address.clear()\r\n        group_address.send_keys(\"顺恒利大厦-已修改\")\r\n\r\n        STEP(4, '修改分组备注')\r\n        group_remark = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='请输入备注']\"))\r\n        )\r\n        group_remark.clear()\r\n        group_remark.send_keys(\"修改测试分组\")\r\n\r\n        STEP(5, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(6, '验证是否修改成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/03区域分组/02编辑区域分组.py b/运维集控/项目测试/运维标准版/cases/03区域分组/02编辑区域分组.py
+--- a/运维集控/项目测试/运维标准版/cases/03区域分组/02编辑区域分组.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/03区域分组/02编辑区域分组.py	(date 1735806194954)
+@@ -3,41 +3,36 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class AreagroupMod001:
+-    name = 'Areagroup_modify_001'
++class AreagroupMod:
++    name = 'Areagroup_modify'
+     def teststeps(self):
+         wd = GSTORE['wd']
+ 
+         STEP(1, '勾选分组,点击“编辑”按钮')
+-        try:
+-            # 等待页面加载,并查找包含文本“测试”的元素旁边的复选框
+-            checkbox  = WebDriverWait(wd, 10).until(
+-                EC.presence_of_element_located((By.XPATH, "//span[contains(text(), '测试区域1')]//span[@class='el-checkbox__inner']"))
+-            )
+-            areagroup_select = checkbox.find_element(By.XPATH, "./ancestor::span[contains(@class, 'el-checkbox__input')]//input")
+-            # 勾选复选框
+-            if not areagroup_select.is_selected():
+-                areagroup_select.click()
+-        finally:
+-            areagroup_modify = WebDriverWait(wd, 10).until(
+-                EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'编辑')]"))
+-            )
+-            areagroup_modify.click()
+-            sleep(2)
++        areagroup_select = WebDriverWait(wd, 10).until(
++            EC.element_to_be_clickable((By.XPATH, "(//span[@class='el-checkbox__inner'])[2]"))
++        )
++        areagroup_select.click()
++
++        areagroup_modify = WebDriverWait(wd, 10).until(
++            EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'编辑')]"))
++        )
++        areagroup_modify.click()
++        sleep(1)
+ 
+         STEP(2, '修改分组名称')
+         group_name = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located((By.XPATH, "//input[@placeholder='长度1-20个字符']"))
+         )
+         group_name.clear()
+-        group_name.send_keys("测试区域1-已修改")
++        group_name.send_keys("深圳分组1-已修改")
+ 
+         STEP(3, '修改分组地址')
+         group_address = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located((By.XPATH, "//input[@placeholder='输入地址不能大于50个字符']"))
+         )
+         group_address.clear()
+-        group_address.send_keys("顺恒利大厦-已修改")
++        group_address.send_keys("深圳-已修改")
+ 
+         STEP(4, '修改分组备注')
+         group_remark = WebDriverWait(wd, 10).until(
+@@ -45,7 +40,7 @@
+                 (By.XPATH, "//input[@placeholder='请输入备注']"))
+         )
+         group_remark.clear()
+-        group_remark.send_keys("修改测试分组")
++        group_remark.send_keys("修改深圳分组")
+ 
+         STEP(5, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+@@ -55,8 +50,12 @@
+ 
+         STEP(6, '验证是否修改成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/03区域分组/03删除区域分组.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass AreagroupDel001:\r\n    name = 'Areagroup_delete_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '勾选分组')\r\n        checkbox  = WebDriverWait(wd, 10).until(\r\n                EC.presence_of_element_located((By.XPATH, \"//span[contains(text(), '测试区域1')]//span[@class='el-checkbox__inner']\"))\r\n            )\r\n        areagroup_select = checkbox.find_element(By.XPATH, \"./ancestor::span[contains(@class, 'el-checkbox__input')]//input\")\r\n        areagroup_select.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '点击“删除”按钮')\r\n        areagroup_modify = WebDriverWait(wd, 10).until(\r\n                EC.element_to_be_clickable((By.XPATH, \"//span[contains(text(),'删除')]\"))\r\n            )\r\n        areagroup_modify.click()\r\n        sleep(2)\r\n\r\n        STEP(3, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//span[contains(text(),'确 定')])[3]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(6, '验证是否修改成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/03区域分组/03删除区域分组.py b/运维集控/项目测试/运维标准版/cases/03区域分组/03删除区域分组.py
+--- a/运维集控/项目测试/运维标准版/cases/03区域分组/03删除区域分组.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/03区域分组/03删除区域分组.py	(date 1735806194950)
+@@ -3,25 +3,24 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class AreagroupDel001:
+-    name = 'Areagroup_delete_001'
++class AreagroupDel:
++    name = 'Areagroup_delete'
+     def teststeps(self):
+         wd = GSTORE['wd']
+ 
+         STEP(1, '勾选分组')
+-        checkbox  = WebDriverWait(wd, 10).until(
+-                EC.presence_of_element_located((By.XPATH, "//span[contains(text(), '测试区域1')]//span[@class='el-checkbox__inner']"))
++        areagroup_select  = WebDriverWait(wd, 10).until(
++                EC.presence_of_element_located((By.XPATH, "(//span[@class='el-checkbox__inner'])[2]"))
+             )
+-        areagroup_select = checkbox.find_element(By.XPATH, "./ancestor::span[contains(@class, 'el-checkbox__input')]//input")
+         areagroup_select.click()
+-        sleep(2)
++        sleep(1)
+ 
+         STEP(2, '点击“删除”按钮')
+         areagroup_modify = WebDriverWait(wd, 10).until(
+                 EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'删除')]"))
+             )
+         areagroup_modify.click()
+-        sleep(2)
++        sleep(1)
+ 
+         STEP(3, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+@@ -31,8 +30,11 @@
+ 
+         STEP(6, '验证是否修改成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/lib/base.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import pandas as pd\r\nimport csv\r\nimport urllib\r\nimport glob\r\nimport subprocess\r\nimport requests\r\nimport json\r\nimport hmac\r\nimport hashlib\r\nimport base64\r\nimport time\r\nimport logging\r\nfrom hytest import *\r\nimport pandas as pd\r\nfrom selenium import webdriver\r\nfrom datetime import datetime\r\nfrom urllib.parse import urlencode\r\nfrom selenium.webdriver.common.by import By\r\nfrom selenium.webdriver.edge.options import Options\r\nfrom selenium.webdriver.support.wait import WebDriverWait\r\nfrom selenium.webdriver.support import expected_conditions as EC\r\nfrom selenium.common import TimeoutException,ElementNotInteractableException\r\nfrom time import sleep\r\n\r\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')\r\ndef open_browser():\r\n    INFO('打开浏览器')\r\n    # wd = webdriver.Chrome()\r\n    edge_options = Options()\r\n    edge_options.add_argument('--ignore-certificate-errors')\r\n    edge_options.add_argument('--disable-blink-features=AutomationControlled')\r\n    edge_options.add_argument('--allow-insecure-localhost')\r\n    wd = webdriver.Edge(options=edge_options)\r\n    GSTORE['wd'] = wd\r\n    # wd.get('https://rms.ubainsyun.com/#/login')\r\n    wd.get('https://192.168.5.218:8443/#/login')\r\n    wd.maximize_window()\r\n    wd.implicitly_wait(10)\r\n\r\n\r\ndef user_login(username, password, captcha):\r\n    wd = GSTORE['wd']\r\n    INFO(f'输入登录账号: {username}')\r\n    username_input = WebDriverWait(wd, 3).until(\r\n        EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='请输入登录账号']\"))\r\n    )\r\n    username_input.clear()\r\n    username_input.send_keys(username)\r\n\r\n    INFO(f'输入登录密码: {password}')\r\n    password_input = WebDriverWait(wd, 3).until(\r\n        EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='请输入登录密码']\"))\r\n    )\r\n    password_input.clear()\r\n    password_input.send_keys(password)\r\n\r\n    INFO(f'输入验证码:{captcha}')\r\n    captcha_input = WebDriverWait(wd, 3).until(\r\n        EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='请输入验证码(区分大小写)']\"))\r\n    )\r\n    captcha_input.clear()\r\n    captcha_input.send_keys(captcha)\r\n\r\n    INFO('点击登录按钮')\r\n    login_button = WebDriverWait(wd, 3).until(\r\n        EC.element_to_be_clickable((By.XPATH, \"//div[@class='loginButton']\"))\r\n    )\r\n    login_button.click()\r\n    sleep(2)\r\n\r\ndef validate_input(username, password, captcha):\r\n    if not isinstance(username, str) or not isinstance(password, str) or not isinstance(captcha, str):\r\n        raise ValueError(\"Invalid input type\")\r\n    if len(username) < 1 or len(password) < 1 or len(captcha) < 1:\r\n        raise ValueError(\"Input cannot be empty\")\r\n\r\ndef run_login_tests(df):\r\n    # 遍历每一行\r\n    for index, row in df.iterrows():\r\n        username = row.get('username', None)\r\n        password = row.get('password', None)\r\n        captcha = row.get('captcha', None)\r\n        if username and password and captcha:\r\n            try:\r\n                validate_input(username, password, captcha)\r\n                user_login(username, password, captcha)\r\n            except ValueError as e:\r\n                print(f\"Invalid input at row {index}: {e}\")\r\n\r\ndef main():\r\n    # 获取当前脚本的目录\r\n    current_dir = os.path.dirname(os.path.abspath(__file__))\r\n    csv_file_path = os.path.join(current_dir, '../testdata/01登录模块/登录信息.csv')\r\n    try:\r\n        if not os.path.exists(csv_file_path):\r\n            print(f\"File not found: {csv_file_path}\")\r\n            return\r\n        df = pd.read_csv(csv_file_path, encoding='utf-8')\r\n        run_login_tests(df)\r\n    except Exception as e:\r\n        print(f\"An error occurred: {e}\")\r\n\r\ndef enter_system():\r\n    wd = GSTORE['wd']\r\n    if wd is None:\r\n        raise ValueError(\"WebDriver is not initialized\")\r\n\r\n    logging.info('点击系统设置按钮')\r\n    try:\r\n        enter_sys = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//li[contains(text(),'系统设置')]\"))\r\n        )\r\n        enter_sys.click()\r\n        logging.info('系统设置按钮已点击')\r\n    except (TimeoutException, ElementNotInteractableException) as error:\r\n        logging.error(f\"Error clicking system settings button: {error}\")\r\n\r\ndef enter_manage():\r\n    wd = GSTORE['wd']\r\n    if wd is None:\r\n        raise ValueError(\"WebDriver is not initialized\")\r\n\r\n    logging.info('点击管理按钮')\r\n    try:\r\n        enter_mag = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='el-submenu__title']//span[contains(text(),'管理')]\"))\r\n        )\r\n        enter_mag.click()\r\n        logging.info('管理按钮已点击')\r\n    except (TimeoutException, ElementNotInteractableException) as error:\r\n        logging.error(f\"Error clicking manage button: {error}\")\r\n\r\ndef enter_user_manage():\r\n    wd = GSTORE['wd']\r\n    if wd is None:\r\n        raise ValueError(\"WebDriver is not initialized\")\r\n\r\n    logging.info('点击用户管理按钮')\r\n    try:\r\n        enter_user_mag = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//li[contains(text(),'用户管理')]\"))\r\n        )\r\n        enter_user_mag.click()\r\n        logging.info('打开用户管理页面')\r\n    except (TimeoutException, ElementNotInteractableException) as error:\r\n        logging.error(f\"Error clicking manage button: {error}\")\r\n\r\ndef enter_areagroup_manage():\r\n    wd = GSTORE['wd']\r\n    if wd is None:\r\n        raise ValueError(\"WebDriver is not initialized\")\r\n\r\n    logging.info('点击区域分组按钮')\r\n    try:\r\n        enter_areagroup_mag = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//li[contains(text(),'区域分组')]\"))\r\n        )\r\n        enter_areagroup_mag.click()\r\n        logging.info('打开区域分组页面')\r\n    except (TimeoutException, ElementNotInteractableException) as error:\r\n        logging.error(f\"Error clicking manage button: {error}\")\r\n\r\ndef enter_areatype_manage():\r\n    wd = GSTORE['wd']\r\n    if wd is None:\r\n        raise ValueError(\"WebDriver is not initialized\")\r\n\r\n    logging.info('点击区域类型按钮')\r\n    try:\r\n        enter_areatype_mag = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//li[contains(text(),'区域类型')]\"))\r\n        )\r\n        enter_areatype_mag.click()\r\n        logging.info('打开区域类型页面')\r\n    except (TimeoutException, ElementNotInteractableException) as error:\r\n        logging.error(f\"Error clicking manage button: {error}\")\r\n\r\ndef enter_areafuntion_manage():\r\n    wd = GSTORE['wd']\r\n    if wd is None:\r\n        raise ValueError(\"WebDriver is not initialized\")\r\n\r\n    logging.info('点击区域功能按钮')\r\n    try:\r\n        enter_areafuntion_mag = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//li[contains(text(),'区域功能')]\"))\r\n        )\r\n        enter_areafuntion_mag.click()\r\n        logging.info('打开区域功能页面')\r\n    except (TimeoutException, ElementNotInteractableException) as error:\r\n        logging.error(f\"Error clicking manage button: {error}\")\r\n\r\ndef dingding_send_message(test_report_url, title, text, mobile):\r\n    \"\"\"\r\n    发送钉钉机器人消息\r\n\r\n    :param test_report_url: 测试报告链接\r\n    :param title: 消息标题\r\n    :param text: 消息内容\r\n    :param mobile: 需要@的手机号列表\r\n    \"\"\"\r\n    # 记录调用此函数的日志\r\n    logging.info(\"开始构建并发送钉钉机器人消息\")\r\n\r\n    # 钉钉机器人的 Webhook URL 和密钥\r\n    webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=7fbf40798cad98b1b5db55ff844ba376b1816e80c5777e6f47ae1d9165dacbb4'\r\n    secret = 'SEC610498ed6261ae2df1d071d0880aaa70abf5e67efe47f75a809c1f2314e0dbd6'\r\n\r\n    # 生成时间戳\r\n    timestamp = str(round(time.time() * 1000))\r\n\r\n    # 生成签名\r\n    secret_enc = secret.encode('utf-8')\r\n    string_to_sign = f'{timestamp}\\n{secret}'\r\n    string_to_sign_enc = string_to_sign.encode('utf-8')\r\n    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()\r\n    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))\r\n\r\n    # 构建最终的 Webhook URL\r\n    params = {\r\n        'access_token': webhook_url.split('=')[1],\r\n        'timestamp': timestamp,\r\n        'sign': sign\r\n    }\r\n    encoded_params = urllib.parse.urlencode(params)\r\n    final_webhook_url = f'https://oapi.dingtalk.com/robot/send?{encoded_params}'\r\n\r\n    # 记录最终的 Webhook URL\r\n    logging.info(f\"钉钉机器人Webhook URL: {final_webhook_url}\")\r\n\r\n    # 构建消息体\r\n    headers = {'Content-Type': 'application/json'}\r\n    message = {\r\n        'msgtype': 'link',\r\n        'link': {\r\n            'title': title,\r\n            'messageUrl': test_report_url,\r\n            'text': text\r\n        },\r\n        \"at\": {\r\n            \"atMobiles\": [mobile],\r\n            \"isAtAll\": False\r\n        }\r\n    }\r\n\r\n    try:\r\n        # 发送 POST 请求\r\n        response = requests.post(final_webhook_url, data=json.dumps(message), headers=headers)\r\n\r\n        # 检查响应状态码\r\n        if response.status_code == 200:\r\n            logging.info('消息发送成功!')\r\n            logging.info(f'响应内容: {response.text}')\r\n        else:\r\n            logging.error(f'消息发送失败,状态码: {response.status_code}')\r\n            logging.error(f'响应内容: {response.text}')\r\n    except requests.exceptions.RequestException as e:\r\n        logging.error(f'请求异常: {e}')\r\n\r\n\r\ndef get_latest_report_file(report_dir, base_url):\r\n    \"\"\"\r\n    获取指定目录下最新的HTML报告文件,并返回带有基础URL的完整路径。\r\n\r\n    :param report_dir: 报告文件所在的目录\r\n    :param base_url: 基础URL\r\n    :return: 最新的HTML报告文件的完整URL,如果没有找到则返回None\r\n    \"\"\"\r\n    # 记录调用此函数的日志\r\n    logging.info(\"开始调用get_latest_report_file函数获取报告文件\")\r\n\r\n    # 确保报告目录存在\r\n    if not os.path.exists(report_dir):\r\n        logging.error(f\"报告目录 {report_dir} 不存在。\")\r\n        return None\r\n\r\n    # 获取指定目录下所有符合模式的HTML报告文件\r\n    report_files = glob.glob(os.path.join(report_dir, 'report_*.html'))\r\n\r\n    # 打印找到的文件列表\r\n    logging.debug(f\"找到的报告文件: {report_files}\")\r\n\r\n    # 如果没有找到报告文件,记录警告信息并返回None\r\n    if not report_files:\r\n        logging.warning(\"在指定目录中没有找到报告文件。\")\r\n        return None\r\n\r\n    # 找到最新修改的报告文件\r\n    latest_file = max(report_files, key=os.path.getmtime)\r\n\r\n    # 获取最新报告文件的最后修改时间\r\n    last_modified_time = datetime.fromtimestamp(os.path.getmtime(latest_file)).strftime('%Y-%m-%d %H:%M:%S')\r\n\r\n    # 记录最新报告文件的信息\r\n    logging.info(f\"最新报告文件: {latest_file}, 最后修改时间: {last_modified_time}\")\r\n\r\n    # 将文件路径转换为相对于基础URL的相对路径\r\n    relative_path = os.path.relpath(latest_file, report_dir)\r\n\r\n    # 生成完整的URL\r\n    full_url = f\"{base_url}/{relative_path}\".replace(\"\\\\\", \"/\")\r\n\r\n    # 返回完整的URL\r\n    return full_url\r\n\r\n\r\ndef get_reportfile_send_dingding(report_title, report_url_prefix):\r\n    try:\r\n        # 获取报告文件所在的目录\r\n        report_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..','log')\r\n\r\n        # 获取基础URL\r\n        base_url = report_url_prefix\r\n\r\n        # 获取最新的报告文件\r\n        latest_report = get_latest_report_file(report_dir, base_url)\r\n\r\n        # 如果找到了最新的报告文件,则发送报告链接到钉钉\r\n        if latest_report:\r\n            logging.info(f\"最新报告文件URL: {latest_report}\")\r\n\r\n            try:\r\n                # 记录调用钉钉消息通知函数的日志\r\n                logging.info(\"开始调用钉钉消息通知函数\")\r\n\r\n                # 调用钉钉发送消息接口进行推送测试报告链接\r\n                dingding_send_message(latest_report, report_title, f\"{report_title}_执行完成\", \"13169131600\")\r\n\r\n                # 记录钉钉消息通知函数调用成功的日志\r\n                logging.info(\"钉钉消息通知函数调用成功\")\r\n            except Exception as e:\r\n                # 记录钉钉消息通知函数调用失败的日志\r\n                logging.error(f\"钉钉消息通知函数调用失败: {e}\")\r\n        else:\r\n            # 记录没有找到报告文件的日志\r\n            logging.warning(\"没有找到报告文件以发送。\")\r\n\r\n    except subprocess.CalledProcessError as e:\r\n        # 处理子进程调用失败的异常\r\n        logging.error(f\"命令执行失败,返回码 {e.returncode}: {e.output}\")\r\n    except OSError as e:\r\n        # 处理操作系统相关的异常\r\n        logging.error(f\"发生操作系统错误: {e}\")\r\n    finally:\r\n        # 无论是否成功,都记录测试结束的日志\r\n        logging.info(\"自动化测试完成。\")\r\n\r\n\r\ndef read_csv_data(csv_file_path):\r\n    \"\"\"\r\n    读取CSV文件中的数据,并将其转换为一个包含字典的列表,每个字典代表一行测试用例数据。\r\n\r\n    参数:\r\n    csv_file_path (str): CSV文件的路径。\r\n\r\n    返回:\r\n    list: 包含字典的列表,每个字典包含测试用例的名称和参数。\r\n    \"\"\"\r\n    # 打开CSV文件,使用只读模式,确保兼容性并处理编码\r\n    with open(csv_file_path, mode='r', newline='', encoding='utf-8') as file:\r\n        # 创建CSV阅读器\r\n        reader = csv.reader(file)\r\n        # 读取表头,为后续数据解析做准备\r\n        headers = next(reader)\r\n        ddt_cases = []\r\n        # 遍历CSV文件中的每一行数据\r\n        for row in reader:\r\n            # 将每一行数据转换为字典,其中包含测试用例的名称和参数\r\n            case = {\r\n                'name': row[0],\r\n                'para': row[1:]\r\n            }\r\n            # 将转换后的测试用例数据添加到列表中\r\n            ddt_cases.append(case)\r\n    # 日志记录:CSV文件已读取\r\n    INFO(\"CSV文件已读取\")\r\n    # 返回包含所有测试用例数据的列表\r\n    return ddt_cases
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/lib/base.py b/运维集控/项目测试/运维标准版/lib/base.py
+--- a/运维集控/项目测试/运维标准版/lib/base.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/lib/base.py	(date 1735806195007)
+@@ -24,7 +24,7 @@
+ 
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+ def open_browser():
+-    INFO('打开浏览器')
++    INFO('打开默认浏览器')
+     # wd = webdriver.Chrome()
+     edge_options = Options()
+     edge_options.add_argument('--ignore-certificate-errors')
+@@ -349,10 +349,8 @@
+ def read_csv_data(csv_file_path):
+     """
+     读取CSV文件中的数据,并将其转换为一个包含字典的列表,每个字典代表一行测试用例数据。
+-
+     参数:
+     csv_file_path (str): CSV文件的路径。
+-
+     返回:
+     list: 包含字典的列表,每个字典包含测试用例的名称和参数。
+     """
+Index: 运维集控/项目测试/运维标准版/cases/04区域类型/01新增区域类型.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass AreatypeAdd001:\r\n    name = 'Areatype_add_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '点击新增按钮')\r\n        areatype_add = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'新增')]\"))\r\n        )\r\n        areatype_add.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '填写区域类型')\r\n        type_name = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//div[@class='el-input el-input--suffix']//input[@placeholder='请输入区域类型']\"))\r\n        )\r\n        type_name.clear()\r\n        type_name.send_keys(\"测试类型1\")\r\n\r\n        STEP(3, '填写排序')\r\n        type_sort = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='排序']\"))\r\n        )\r\n        type_sort.clear()\r\n        type_sort.send_keys(\"123\")\r\n\r\n        STEP(4, '填写备注')\r\n        type_remark = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='备注']\"))\r\n        )\r\n        type_remark.clear()\r\n        type_remark.send_keys(\"类型备注测试\")\r\n\r\n        STEP(5, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(6, '验证是否新增成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/04区域类型/01新增区域类型.py b/运维集控/项目测试/运维标准版/cases/04区域类型/01新增区域类型.py
+--- a/运维集控/项目测试/运维标准版/cases/04区域类型/01新增区域类型.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/04区域类型/01新增区域类型.py	(date 1735806194942)
+@@ -3,39 +3,49 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class AreatypeAdd001:
+-    name = 'Areatype_add_001'
++# 构建 CSV 文件的绝对路径
++csv_path = os.path.abspath(
++    os.path.join(os.path.dirname(__file__), '..', '..', 'testdata', '04区域类型', '新增区域类型.csv'))
++
++
++class AreatypeAdd:
++    tag = ['新增区域类型']
++    ddt_cases = read_csv_data(csv_path)
+     def teststeps(self):
+         wd = GSTORE['wd']
+ 
++        #从self.para中解构出数据
++        name = self.name
++        area_type, sort, remark, info= self.para
++
+         STEP(1, '点击新增按钮')
+         areatype_add = WebDriverWait(wd, 10).until(
+             EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
+         )
+         areatype_add.click()
+-        sleep(2)
++        sleep(1)
+ 
+-        STEP(2, '填写区域类型')
++        STEP(2, f'填写区域类型: {area_type}')
+         type_name = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入区域类型']"))
+         )
+         type_name.clear()
+-        type_name.send_keys("测试类型1")
++        type_name.send_keys(area_type)
+ 
+-        STEP(3, '填写排序')
++        STEP(3, f'填写排序:{sort}')
+         type_sort = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located((By.XPATH, "//input[@placeholder='排序']"))
+         )
+         type_sort.clear()
+-        type_sort.send_keys("123")
++        type_sort.send_keys(sort)
+ 
+-        STEP(4, '填写备注')
++        STEP(4, f'填写备注:{remark}')
+         type_remark = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located(
+                 (By.XPATH, "//input[@placeholder='备注']"))
+         )
+         type_remark.clear()
+-        type_remark.send_keys("类型备注测试")
++        type_remark.send_keys(remark)
+ 
+         STEP(5, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+@@ -45,8 +55,12 @@
+ 
+         STEP(6, '验证是否新增成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+-        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == info)
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/04区域类型/02编辑区域类型.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass AreatypeMod001:\r\n    name = 'Areatype_mod_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '搜索对应的区域类型')\r\n        areatype_search= WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//input[contains(@placeholder,'请输入区域类型')])[1]\"))\r\n        )\r\n        areatype_search.clear()\r\n        areatype_search.send_keys(\"测试类型1\")\r\n\r\n        STEP(2, '勾选区域类型')\r\n        areatype_select = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//span[contains(@class,'el-checkbox__inner')])[2]\"))\r\n        )\r\n        areatype_select.click()\r\n\r\n        STEP(3, '点击编辑按钮')\r\n        areatype_mod = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'编辑')]\"))\r\n        )\r\n        areatype_mod.click()\r\n        sleep(2)\r\n\r\n        STEP(4, '修改区域类型内容')\r\n        type_name = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//div[@class='el-input el-input--suffix']//input[@placeholder='请输入区域类型']\"))\r\n        )\r\n        type_name.clear()\r\n        type_name.send_keys(\"修改-测试类型1\")\r\n\r\n        STEP(5, '修改排序')\r\n        type_sort = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='排序']\"))\r\n        )\r\n        type_sort.clear()\r\n        type_sort.send_keys(\"999\")\r\n\r\n        STEP(6, '修改备注信息')\r\n        type_remark = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='备注']\"))\r\n        )\r\n        type_remark.clear()\r\n        type_remark.send_keys(\"修改类型备注测试\")\r\n\r\n        STEP(7, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(8, '验证是否修改成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/04区域类型/02编辑区域类型.py b/运维集控/项目测试/运维标准版/cases/04区域类型/02编辑区域类型.py
+--- a/运维集控/项目测试/运维标准版/cases/04区域类型/02编辑区域类型.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/04区域类型/02编辑区域类型.py	(date 1735806194938)
+@@ -3,7 +3,7 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class AreatypeMod001:
++class AreatypeMod:
+     name = 'Areatype_mod_001'
+     def teststeps(self):
+         wd = GSTORE['wd']
+@@ -13,7 +13,7 @@
+             EC.element_to_be_clickable((By.XPATH, "(//input[contains(@placeholder,'请输入区域类型')])[1]"))
+         )
+         areatype_search.clear()
+-        areatype_search.send_keys("测试类型1")
++        areatype_search.send_keys("会议室")
+ 
+         STEP(2, '勾选区域类型')
+         areatype_select = WebDriverWait(wd, 10).until(
+@@ -33,7 +33,7 @@
+             EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入区域类型']"))
+         )
+         type_name.clear()
+-        type_name.send_keys("修改-测试类型1")
++        type_name.send_keys("修改-会议室")
+ 
+         STEP(5, '修改排序')
+         type_sort = WebDriverWait(wd, 10).until(
+@@ -58,8 +58,12 @@
+ 
+         STEP(8, '验证是否修改成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/04区域类型/03删除区域类型.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass AreatypeDel001:\r\n    name = 'Areatype_del_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '搜索对应的区域类型')\r\n        areatype_search= WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//input[contains(@placeholder,'请输入区域类型')])[1]\"))\r\n        )\r\n        areatype_search.clear()\r\n        areatype_search.send_keys(\"修改-测试类型1\")\r\n\r\n        STEP(2, '勾选区域类型')\r\n        areatype_select = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"(//span[contains(@class,'el-checkbox__inner')])[2]\"))\r\n        )\r\n        areatype_select.click()\r\n\r\n        STEP(3, '点击删除按钮')\r\n        areatype_mod = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'删除')]\"))\r\n        )\r\n        areatype_mod.click()\r\n        sleep(2)\r\n\r\n        STEP(4, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(5, '验证是否修改成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/04区域类型/03删除区域类型.py b/运维集控/项目测试/运维标准版/cases/04区域类型/03删除区域类型.py
+--- a/运维集控/项目测试/运维标准版/cases/04区域类型/03删除区域类型.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/04区域类型/03删除区域类型.py	(date 1735806194935)
+@@ -3,7 +3,7 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class AreatypeDel001:
++class AreatypeDel:
+     name = 'Areatype_del_001'
+     def teststeps(self):
+         wd = GSTORE['wd']
+@@ -13,7 +13,7 @@
+             EC.element_to_be_clickable((By.XPATH, "(//input[contains(@placeholder,'请输入区域类型')])[1]"))
+         )
+         areatype_search.clear()
+-        areatype_search.send_keys("修改-测试类型1")
++        areatype_search.send_keys("修改-会议室")
+ 
+         STEP(2, '勾选区域类型')
+         areatype_select = WebDriverWait(wd, 10).until(
+@@ -30,14 +30,18 @@
+ 
+         STEP(4, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='dialog-footer']//span[contains(text(),'确 定')]"))
++            EC.element_to_be_clickable((By.XPATH, "(//span[contains(text(),'确 定')])[3]"))
+         )
+         commit.click()
+ 
+         STEP(5, '验证是否修改成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/testdata/01登录模块/登录信息.csv
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>username,password,captcha\r\ntest_user1,ub@1234567,csba\r\ntest_user2,ub@123,csba\r\ntest_user3,,csba\r\ntest_user4,ub@1234567,\r\n,ub@1234567,csba
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/testdata/01登录模块/登录信息.csv b/运维集控/项目测试/运维标准版/testdata/01登录模块/登录信息.csv
+--- a/运维集控/项目测试/运维标准版/testdata/01登录模块/登录信息.csv	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/testdata/01登录模块/登录信息.csv	(date 1735806194905)
+@@ -1,6 +1,7 @@
+-username,password,captcha
+-test_user1,ub@1234567,csba
+-test_user2,ub@123,csba
+-test_user3,,csba
+-test_user4,ub@1234567,
+-,ub@1234567,csba
+\ No newline at end of file
++num,username,password,captcha,info
++用户登录-001-登录账号为空,,ub@1234567,csba,请输入登录账号
++用户登录-002-登录密码为空,test_user3,,csba,请输入登录密码
++用户登录-003-验证码为空,test_user4,ub@1234567,,请输入验证码(区分大小写)
++用户登录-004-登录账号不存在,test_user1,ub@1234567,csba,请检则用户名或密码是否正确!
++用户登录-005-登录密码错误,admin@pgy,ub@1234567,csba,输入的用户或密码不一致,
++用户登录-006-正常登录,admin@pgy,ub@123456,csba,登录成功
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/testdata/02用户管理/新增用户.csv
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>account,user_name,new_passwd,comfire_passwd,limits,user_number,phone,email,remark\r\ntest_user1,test_user1,Ubains@123,Ubains@123,1,13579,13169678901,test1@qq.com,test1\r\ntest_user2,test_user2,Ubains@123,Ubains@123,1,13580,13169678902,test2@qq.com,test2\r\ntest_user3,test_user3,Ubains@123,Ubains@123,1,13581,13169678903,test3@qq.com,test3\r\ntest_user4,test_user4,Ubains@123,Ubains@123,3,13582,13169678904,test4@qq.com,test4\r\ntest_user5,test_user5,Ubains@123,Ubains@123,3,13583,13169678905,test5@qq.com,test5\r\ntest_user6,test_user6,Ubains@123,Ubains@123,3,13584,13169678906,test6@qq.com,test6\r\ntest_user7,test_user7,Ubains@123,Ubains@123,4,13585,13169678907,test7@qq.com,test7\r\ntest_user8,test_user8,Ubains@123,Ubains@123,4,13586,13169678908,test8@qq.com,test8\r\ntest_user9,test_user9,Ubains@123,Ubains@123,4,13587,13169678909,test9@qq.com,test9
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/testdata/02用户管理/新增用户.csv b/运维集控/项目测试/运维标准版/testdata/02用户管理/新增用户.csv
+--- a/运维集控/项目测试/运维标准版/testdata/02用户管理/新增用户.csv	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/testdata/02用户管理/新增用户.csv	(date 1735806194901)
+@@ -1,10 +1,10 @@
+-account,user_name,new_passwd,comfire_passwd,limits,user_number,phone,email,remark
+-test_user1,test_user1,Ubains@123,Ubains@123,1,13579,13169678901,test1@qq.com,test1
+-test_user2,test_user2,Ubains@123,Ubains@123,1,13580,13169678902,test2@qq.com,test2
+-test_user3,test_user3,Ubains@123,Ubains@123,1,13581,13169678903,test3@qq.com,test3
+-test_user4,test_user4,Ubains@123,Ubains@123,3,13582,13169678904,test4@qq.com,test4
+-test_user5,test_user5,Ubains@123,Ubains@123,3,13583,13169678905,test5@qq.com,test5
+-test_user6,test_user6,Ubains@123,Ubains@123,3,13584,13169678906,test6@qq.com,test6
+-test_user7,test_user7,Ubains@123,Ubains@123,4,13585,13169678907,test7@qq.com,test7
+-test_user8,test_user8,Ubains@123,Ubains@123,4,13586,13169678908,test8@qq.com,test8
+-test_user9,test_user9,Ubains@123,Ubains@123,4,13587,13169678909,test9@qq.com,test9
+\ No newline at end of file
++name,account,user_name,new_passwd,comfire_passwd,authority,user_number,phone,email,remark,info
++新增用户-001-登录名为空,,test_user1,Ubains@123,Ubains@123,普通用户,13579,13169678901,test1@qq.com,test1,请输入登录名
++新增用户-002-用户名称为空,test_user1,,Ubains@123,Ubains@123,普通用户,13579,13169678901,test1@qq.com,test1,请输入用户名称
++新增用户-003-密码为空,test_user1,test_user1,,Ubains@123,普通用户,13579,13169678901,test1@qq.com,test1,密码至少8个字符
++新增用户-004-确认密码为空,test_user1,test_user1,Ubains@123,,普通用户,13579,13169678901,test1@qq.com,test1,两次密码不一致
++新增用户-005-密码和账号相同,test_user1,test_user1,test_user1,Ubains@123,普通用户,13579,13169678901,test1@qq.com,test1,密码不能和账号相同
++新增用户-006-正常创建1,test_user1,test_user1,Ubains@123,Ubains@123,普通用户,13580,13169678902,test2@qq.com,test1,操作成功!
++新增用户-007-登录名重复,test_user1,test_user1,Ubains@123,Ubains@123,普通用户,13581,13169678902,test2@qq.com,test1,登录名已存在,请重新输入
++新增用户-008-正常创建用户2,test_user2,test_user2,Ubains@123,Ubains@123,普通用户,13582,13169678903,test3@qq.com,test2,操作成功!
++新增用户-009-正常创建用户3,test_user3,test_user3,Ubains@123,Ubains@123,普通用户,13583,13169678904,test4@qq.com,test3,操作成功!
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/testdata/03区域分组/新增区域分组.csv
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>area_group,group_name,group_address,remark\r\n,测试分组1,深圳,第一层级\r\n测试分组1,测试分组1-1,深圳,第二层级\r\n测试分组1-1,测试分组1-2,深圳,第三层级\r\n测试分组1-2,测试分组1-3,深圳,第四层级\r\n,测试分组2,广州,第一层级\r\n 测试分组2,测试分组2-1,广州,第二层级\r\n 测试分组2-1,测试分组2-2,广州,第三层级\r\n 测试分组2-2,测试分组2-3,广州,第四层级\r\n ,测试分组3,上海,第一层级\r\n 测试分组3,测试分组3-1,上海,第二层级\r\n 测试分组3-1,测试分组3-2,上海,第三层级\r\n 测试分组3-2,测试分组3-3,上海,第四层级
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/testdata/03区域分组/新增区域分组.csv b/运维集控/项目测试/运维标准版/testdata/03区域分组/新增区域分组.csv
+--- a/运维集控/项目测试/运维标准版/testdata/03区域分组/新增区域分组.csv	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/testdata/03区域分组/新增区域分组.csv	(date 1735806194898)
+@@ -1,13 +1,13 @@
+-area_group,group_name,group_address,remark
+-,测试分组1,深圳,第一层级
+-测试分组1,测试分组1-1,深圳,第二层级
+-测试分组1-1,测试分组1-2,深圳,第三层级
+-测试分组1-2,测试分组1-3,深圳,第四层级
+-,测试分组2,广州,第一层级
+- 测试分组2,测试分组2-1,广州,第二层级
+- 测试分组2-1,测试分组2-2,广州,第三层级
+- 测试分组2-2,测试分组2-3,广州,第四层级
+- ,测试分组3,上海,第一层级
+- 测试分组3,测试分组3-1,上海,第二层级
+- 测试分组3-1,测试分组3-2,上海,第三层级
+- 测试分组3-2,测试分组3-3,上海,第四层级
+\ No newline at end of file
++name,area_group,group_name,group_address,remark,info
++新增分组-002-创建一级分组-深圳分组1,,深圳分组1,深圳,第一层级,操作成功!
++新增分组-003-创建二级分组-深圳分组2,深圳分组1,深圳分组2,深圳,第二层级,操作成功!
++新增分组-004-创建三级分组-深圳分组3,深圳分组2,深圳分组3,深圳,第三层级,操作成功!
++新增分组-005-创建四级分组-深圳分组4,深圳分组3,深圳分组4,深圳,第四层级,操作成功!
++新增分组-006-创建一级分组-广州分组1,,广州分组1,广州,第一层级,操作成功!
++新增分组-007-创建二级分组-广州分组2,广州分组1,广州分组2,广州,第二层级,操作成功!
++新增分组-008-创建三级分组-广州分组3,广州分组2,广州分组3,广州,第三层级,操作成功!
++新增分组-009-创建四级分组-广州分组4,广州分组3,广州分组4,广州,第四层级,操作成功!
++新增分组-010-创建一级分组-上海分组1,,上海分组1,上海,第一层级,操作成功!
++新增分组-011-创建二级分组-上海分组2,上海分组1,上海分组2,上海,第二层级,操作成功!
++新增分组-012-创建三级分组-上海分组3,上海分组2,上海分组3,上海,第三层级,操作成功!
++新增分组-013-创建四级分组-上海分组4,上海分组3,上海分组4,上海,第四层级,操作成功!
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\ndef suite_setup():\r\n    wd = GSTORE['wd']\r\n    user_login(\"admin@pgy\", \"ub@123456\", \"csba\")\r\n    enter_system()\r\n    enter_manage()\r\n    enter_areafuntion_manage()\r\n\r\n# def suite_teardown():\r\n#      INFO('进行清除操作')\r\n#      wd = GSTORE['wd']\r\n#      wd.quit()\r\n\r\n
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py b/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py
+--- a/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/05区域功能/__st__.py	(date 1735806194932)
+@@ -10,8 +10,8 @@
+     enter_manage()
+     enter_areafuntion_manage()
+ 
+-# def suite_teardown():
+-#      INFO('进行清除操作')
+-#      wd = GSTORE['wd']
+-#      wd.quit()
++def suite_teardown():
++    INFO('进行清除操作')
++    wd = GSTORE['wd']
++    wd.quit()
+ 
+Index: 运维集控/项目测试/运维标准版/testdata/04区域类型/新增区域类型.csv
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>area_type,sort,remark\r\n办公室,1,办公室\r\n大会议室,2,大会议室\r\n小会议室,3,小会议室\r\n培训室,4,培训室\r\n展览室,5,展览室
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/testdata/04区域类型/新增区域类型.csv b/运维集控/项目测试/运维标准版/testdata/04区域类型/新增区域类型.csv
+--- a/运维集控/项目测试/运维标准版/testdata/04区域类型/新增区域类型.csv	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/testdata/04区域类型/新增区域类型.csv	(date 1735806194894)
+@@ -1,6 +1,8 @@
+-area_type,sort,remark
+-办公室,1,办公室
+-大会议室,2,大会议室
+-小会议室,3,小会议室
+-培训室,4,培训室
+-展览室,5,展览室
+\ No newline at end of file
++name,area_type,sort,remark,info
++新增区域类型-001-名称为空,,1,会议室,请输入类型名称
++新增区域类型-002-排序为空,会议室,,会议室,请输入排序
++新增区域类型-003-会议室,会议室,1,会议室,操作成功!
++新增区域类型-004-大会议室,大会议室,2,大会议室,操作成功!
++新增区域类型-005-小会议室,小会议室,3,小会议室,操作成功!
++新增区域类型-006-培训室,培训室,4,培训室,操作成功!
++新增区域类型-007-展览室,展览室,5,展览室,操作成功!
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/02用户管理/__st__.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\ndef suite_setup():\r\n    wd = GSTORE['wd']\r\n    user_login(\"admin@pgy\", \"ub@123456\", \"csba\")\r\n    enter_system()\r\n    enter_manage()\r\n    enter_user_manage()\r\n\r\n# def suite_teardown():\r\n#      INFO('进行清除操作')\r\n#      wd = GSTORE['wd']\r\n#      wd.quit()\r\n\r\n
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/02用户管理/__st__.py b/运维集控/项目测试/运维标准版/cases/02用户管理/__st__.py
+--- a/运维集控/项目测试/运维标准版/cases/02用户管理/__st__.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/02用户管理/__st__.py	(date 1735806194970)
+@@ -8,10 +8,13 @@
+     user_login("admin@pgy", "ub@123456", "csba")
+     enter_system()
+     enter_manage()
+-    enter_user_manage()
++    enter_user_manage()  # 修正缩进
+ 
+-# def suite_teardown():
+-#      INFO('进行清除操作')
+-#      wd = GSTORE['wd']
+-#      wd.quit()
++def suite_teardown():
++    wd = GSTORE['wd']
++    wd.quit()
+ 
++# 本地启动http微服务
++# python - m http.server 80 - -directory log
++# 输出报告到钉钉
++# get_reportfile_send_dingding("用户管理模块_测试报告", "http://192.168.1.251")
+Index: 运维集控/项目测试/运维标准版/.idea/encodings.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"Encoding\">\r\n    <file url=\"file://$PROJECT_DIR$/测试数据/登录用户数据.csv\" charset=\"GBK\" />\r\n  </component>\r\n</project>
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/.idea/encodings.xml b/运维集控/项目测试/运维标准版/.idea/encodings.xml
+--- a/运维集控/项目测试/运维标准版/.idea/encodings.xml	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/.idea/encodings.xml	(date 1735806196219)
+@@ -1,6 +1,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<project version="4">
+-  <component name="Encoding">
+-    <file url="file://$PROJECT_DIR$/测试数据/登录用户数据.csv" charset="GBK" />
+-  </component>
+-</project>
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/01登录模块/管理员登录.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\n\r\nclass user_login_001:\r\n    name = 'login_test_01'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        # 读取 CSV 文件\r\n        csv_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'testdata', '01登录模块', '登录信息.csv'))\r\n\r\n        with open(csv_path, newline='', encoding='utf-8') as csvfile:\r\n            reader = csv.DictReader(csvfile)\r\n            for row in reader:\r\n                username = row['username']\r\n                password = row['password']\r\n                captcha = row['captcha']\r\n\r\n                STEP(1, f'用户 {username} 登录')\r\n                user_login(username, password, captcha)\r\n\r\n                STEP(2, '验证是否登录成功')\r\n                try:\r\n                    get_menu = WebDriverWait(wd, 10).until(\r\n                        EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n                    )\r\n                    get_menu1 = get_menu.text\r\n                    CHECK_POINT('检查是否出现弹窗', get_menu1 == \"操作成功!\")\r\n                except Exception as e:\r\n                    print(f\"登录失败,原因是: {get_menu1}\")
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/01登录模块/管理员登录.py b/运维集控/项目测试/运维标准版/cases/01登录模块/管理员登录.py
+--- a/运维集控/项目测试/运维标准版/cases/01登录模块/管理员登录.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/01登录模块/管理员登录.py	(date 1735806194992)
+@@ -1,33 +1,41 @@
+-import sys
+-import os
+-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
++#构建当前项目路径
++sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
++# 构建 CSV 文件的绝对路径
++csv_path = os.path.abspath(
++    os.path.join(os.path.dirname(__file__), '..', '..', 'testdata', '01登录模块', '登录信息.csv'))
+ 
+-class user_login_001:
+-    name = 'login_test_01'
++class User_Login:
++    tags = ['用户登录','管理员登录']
++    #构建框架的数据集格式
++    ddt_cases = read_csv_data(csv_path)
++
+     def teststeps(self):
++        # 获取 WebDriver 实例
+         wd = GSTORE['wd']
+ 
+-        # 读取 CSV 文件
+-        csv_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'testdata', '01登录模块', '登录信息.csv'))
++        #从self.para中解构出数据
++        name = self.name
++        username, password, captcha, info= self.para
+ 
+-        with open(csv_path, newline='', encoding='utf-8') as csvfile:
+-            reader = csv.DictReader(csvfile)
+-            for row in reader:
+-                username = row['username']
+-                password = row['password']
+-                captcha = row['captcha']
+-
+-                STEP(1, f'用户 {username} 登录')
+-                user_login(username, password, captcha)
++        # 记录当前测试步骤:用户登录
++        STEP(1, f'{username} 用户登录测试')
++        # 使用从 CSV 读取的数据进行登录
++        user_login(username, password, captcha)
+ 
+-                STEP(2, '验证是否登录成功')
+-                try:
+-                    get_menu = WebDriverWait(wd, 10).until(
+-                        EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+-                    )
+-                    get_menu1 = get_menu.text
+-                    CHECK_POINT('检查是否出现弹窗', get_menu1 == "操作成功!")
+-                except Exception as e:
+-                    print(f"登录失败,原因是: {get_menu1}")
+\ No newline at end of file
++        #记录当前测试步骤:输出提示内容
++        STEP(2, f'预期提示内容为:{info}')
++
++        # 记录当前测试步骤:验证是否登录成功
++        STEP(3, '获取登录提示内容')
++        # 等待系统首页的特定元素(如图片)可见
++        get_menu = WebDriverWait(wd, 5).until(
++            EC.visibility_of_element_located((By.XPATH, "//p[@class='el-message__content']"))
++        )
++        get_text = get_menu.text
++
++        # 检查点:验证是否跟预定结果一致
++        CHECK_POINT('校验提示内容是否跟预定结果一致', get_text == info)
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
+Index: 运维集控/项目测试/运维标准版/.idea/modules.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"ProjectModuleManager\">\r\n    <modules>\r\n      <module fileurl=\"file://$PROJECT_DIR$/.idea/运维标准版.iml\" filepath=\"$PROJECT_DIR$/.idea/运维标准版.iml\" />\r\n    </modules>\r\n  </component>\r\n</project>
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/.idea/modules.xml b/运维集控/项目测试/运维标准版/.idea/modules.xml
+--- a/运维集控/项目测试/运维标准版/.idea/modules.xml	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/.idea/modules.xml	(date 1735806196222)
+@@ -1,8 +1,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<project version="4">
+-  <component name="ProjectModuleManager">
+-    <modules>
+-      <module fileurl="file://$PROJECT_DIR$/.idea/运维标准版.iml" filepath="$PROJECT_DIR$/.idea/运维标准版.iml" />
+-    </modules>
+-  </component>
+-</project>
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/.idea/misc.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"Black\">\r\n    <option name=\"sdkName\" value=\"Python 3.12\" />\r\n  </component>\r\n  <component name=\"ProjectRootManager\" version=\"2\" project-jdk-name=\"Python 3.10\" project-jdk-type=\"Python SDK\" />\r\n</project>
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/.idea/misc.xml b/运维集控/项目测试/运维标准版/.idea/misc.xml
+--- a/运维集控/项目测试/运维标准版/.idea/misc.xml	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/.idea/misc.xml	(date 1735806196224)
+@@ -1,7 +1,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<project version="4">
+-  <component name="Black">
+-    <option name="sdkName" value="Python 3.12" />
+-  </component>
+-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
+-</project>
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/02用户管理/01新增用户.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\n\r\nclass UserAdd001:\r\n    name = 'user_add_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '点击新增按钮')\r\n        user_add = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'新增')]\"))\r\n        )\r\n        user_add.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '填写登录名')\r\n        account_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='登录名以字母开头,长度在5-18之间,只能包含字母、数字和下划线、@']\"))\r\n        )\r\n        account_input.clear()\r\n        account_input.send_keys(\"admin@test1\")\r\n\r\n        STEP(3, '填写用户名称')\r\n        account_name_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//div[@class='el-input el-input--suffix']//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        account_name_input.clear()\r\n        account_name_input.send_keys(\"admin@test1\")\r\n\r\n        STEP(4, '填写新密码')\r\n        passwd_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='必须包含字母(不区分大小写)、数字和特殊字符,至少8个字符']\"))\r\n        )\r\n        passwd_input.clear()\r\n        passwd_input.send_keys(\"ub@123456\")\r\n\r\n        STEP(5, '填写确认密码')\r\n        sepasswd_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='请确认密码']\"))\r\n        )\r\n        sepasswd_input.clear()\r\n        sepasswd_input.send_keys(\"ub@123456\")\r\n\r\n        STEP(6, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@aria-label='新增']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(7, '验证是否新增成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.visibility_of_element_located((By.XPATH, \"//p[@class='el-message__content']\"))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        INFO(get_menu1)\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)\r\n\r\n\r\n# class UserAdd002:\r\n#     name = 'user_add_002'\r\n#     def teststeps(self):\r\n#         wd = GSTORE['wd']\r\n#\r\n#         STEP(1, '点击新增按钮')\r\n#         user_add = WebDriverWait(wd, 10).until(\r\n#             EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'新增')]\"))\r\n#         )\r\n#         user_add.click()\r\n#         sleep(2)\r\n#\r\n#         STEP(2, '填写登录名')\r\n#         account_input = WebDriverWait(wd, 10).until(\r\n#             EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='登录名以字母开头,长度在5-18之间,只能包含字母、数字和下划线、@']\"))\r\n#         )\r\n#         account_input.clear()\r\n#         account_input.send_keys(\"admin@test1\")\r\n#\r\n#         STEP(3, '填写用户名称')\r\n#         account_name_input = WebDriverWait(wd, 10).until(\r\n#             EC.presence_of_element_located((By.XPATH, \"//div[@class='el-input el-input--suffix']//input[@placeholder='请输入用户名称']\"))\r\n#         )\r\n#         account_name_input.clear()\r\n#         account_name_input.send_keys(\"测试用户2\")\r\n#\r\n#         STEP(4, '填写新密码')\r\n#         passwd_input = WebDriverWait(wd, 10).until(\r\n#             EC.presence_of_element_located(\r\n#                 (By.XPATH, \"//input[@placeholder='必须包含字母(不区分大小写)、数字和特殊字符,至少8个字符']\"))\r\n#         )\r\n#         passwd_input.clear()\r\n#         passwd_input.send_keys(\"ub@123456\")\r\n#\r\n#         STEP(5, '填写确认密码')\r\n#         sepasswd_input = WebDriverWait(wd, 10).until(\r\n#             EC.presence_of_element_located(\r\n#                 (By.XPATH, \"//input[@placeholder='请确认密码']\"))\r\n#         )\r\n#         sepasswd_input.clear()\r\n#         sepasswd_input.send_keys(\"ub@123456\")\r\n#\r\n#         STEP(6, '点击确认')\r\n#         commit = WebDriverWait(wd, 10).until(\r\n#             EC.element_to_be_clickable((By.XPATH, \"//div[@aria-label='新增']//span[contains(text(),'确 定')]\"))\r\n#         )\r\n#         commit.click()\r\n#\r\n#         STEP(7, '验证是否正常提示')\r\n#         get_menu = WebDriverWait(wd, 10).until(\r\n#             EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n#         )\r\n#         get_menu1 = get_menu.text\r\n#         # CHECK_POINT('检查是否出现错误提示弹窗', get_menu1 == \"登录名已存在,请重新输入\")\r\n#         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n#         sleep(2)\r\n
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/02用户管理/01新增用户.py b/运维集控/项目测试/运维标准版/cases/02用户管理/01新增用户.py
+--- a/运维集控/项目测试/运维标准版/cases/02用户管理/01新增用户.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/02用户管理/01新增用户.py	(date 1735806194984)
+@@ -1,120 +1,119 @@
+-import sys
+-import os
+-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
++#构建当前项目路径
++sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
++# 构建 CSV 文件的绝对路径
++csv_path = os.path.abspath(
++    os.path.join(os.path.dirname(__file__), '..', '..', 'testdata', '02用户管理', '新增用户.csv'))
+ 
+-class UserAdd001:
+-    name = 'user_add_001'
++class UserAdd:
++    tags = ['新增用户']
++    #构建框架的数据集格式
++    ddt_cases = read_csv_data(csv_path)
++
+     def teststeps(self):
+         wd = GSTORE['wd']
+ 
++        #从self.para中解构出数据
++        name = self.name
++        account, user_name, new_passwd, comfire_passwd, authority, user_number, phone, email, remark, info= self.para
++
+         STEP(1, '点击新增按钮')
+         user_add = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
+         )
+         user_add.click()
+         sleep(2)
+ 
+-        STEP(2, '填写登录名')
++        STEP(2, f'填写登录名: {account}')
+         account_input = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//input[@placeholder='登录名以字母开头,长度在5-18之间,只能包含字母、数字和下划线、@']"))
++            EC.presence_of_element_located(
++                (By.XPATH, "//input[@placeholder='登录名以字母开头,长度在5-18之间,只能包含字母、数字和下划线、@']"))
+         )
+         account_input.clear()
+-        account_input.send_keys("admin@test1")
++        account_input.send_keys(account)
+ 
+-        STEP(3, '填写用户名称')
+-        account_name_input = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入用户名称']"))
+-        )
+-        account_name_input.clear()
+-        account_name_input.send_keys("admin@test1")
+-
+-        STEP(4, '填写新密码')
+-        passwd_input = WebDriverWait(wd, 10).until(
++        STEP(3, f'填写用户名称: {user_name}')
++        user_name_input = WebDriverWait(wd, 10).until(
++            EC.presence_of_element_located(
++                (By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入用户名称']"))
++        )
++        user_name_input.clear()
++        user_name_input.send_keys(user_name)
++
++        STEP(4, f'填写新的密码: {new_passwd}')
++        new_passwd_input = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located(
+                 (By.XPATH, "//input[@placeholder='必须包含字母(不区分大小写)、数字和特殊字符,至少8个字符']"))
+         )
+-        passwd_input.clear()
+-        passwd_input.send_keys("ub@123456")
++        new_passwd_input.clear()
++        new_passwd_input.send_keys(new_passwd)
+ 
+-        STEP(5, '填写确认密码')
+-        sepasswd_input = WebDriverWait(wd, 10).until(
++        STEP(5, f'填写确认密码: {comfire_passwd}')
++        comfire_passwd_input = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located(
+                 (By.XPATH, "//input[@placeholder='请确认密码']"))
+         )
+-        sepasswd_input.clear()
+-        sepasswd_input.send_keys("ub@123456")
++        comfire_passwd_input.clear()
++        comfire_passwd_input.send_keys(comfire_passwd)
++
++        STEP(6, f'选择权限: {authority}')
++        authority_select = WebDriverWait(wd, 10).until(
++            EC.presence_of_element_located(
++                (By.XPATH, "//span[@class='el-radio__label'][contains(text(),'普通用户')]"))
++        )
++        authority_select.click()
+ 
+-        STEP(6, '点击确认')
++        STEP(7, f'填写用户工号: {user_number}')
++        user_number_input = WebDriverWait(wd, 10).until(
++            EC.presence_of_element_located(
++                (By.XPATH, "//input[@placeholder='请输入工号']"))
++        )
++        user_number_input.clear()
++        user_number_input.send_keys(user_number)
++
++        STEP(8, f'填写手机号: {phone}')
++        phone_input = WebDriverWait(wd, 10).until(
++            EC.presence_of_element_located(
++                (By.XPATH, "//input[@placeholder='请输入手机号码']"))
++        )
++        phone_input.clear()
++        phone_input.send_keys(phone)
++
++        STEP(9, f'填写邮箱: {email}')
++        email_input = WebDriverWait(wd, 10).until(
++            EC.presence_of_element_located(
++                (By.XPATH, "//input[@placeholder='请输入邮箱']"))
++        )
++        email_input.clear()
++        email_input.send_keys(email)
++
++        STEP(10, f'填写备注: {remark}')
++        remark_input = WebDriverWait(wd, 10).until(
++            EC.presence_of_element_located(
++                (By.XPATH, "//input[@placeholder='备注']"))
++        )
++        remark_input.clear()
++        remark_input.send_keys(remark)
++
++        STEP(11, '点击“确认”按钮')
+         commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[@aria-label='新增']//span[contains(text(),'确 定')]"))
++            EC.element_to_be_clickable(
++                (By.XPATH, "//div[@aria-label='新增']//span[contains(text(),'确 定')]"))
+         )
+         commit.click()
+ 
+-        STEP(7, '验证是否新增成功')
++        STEP(12, f'预期提示内容为:{info}')
++
++        STEP(13, '获取页面实际提示内容')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.visibility_of_element_located((By.XPATH, "//p[@class='el-message__content']"))
++            EC.visibility_of_element_located(
++                (By.XPATH, "//p[@class='el-message__content']"))
+         )
+         get_menu1 = get_menu.text
+-        INFO(get_menu1)
+-        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+ 
+-
+-# class UserAdd002:
+-#     name = 'user_add_002'
+-#     def teststeps(self):
+-#         wd = GSTORE['wd']
+-#
+-#         STEP(1, '点击新增按钮')
+-#         user_add = WebDriverWait(wd, 10).until(
+-#             EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
+-#         )
+-#         user_add.click()
+-#         sleep(2)
+-#
+-#         STEP(2, '填写登录名')
+-#         account_input = WebDriverWait(wd, 10).until(
+-#             EC.presence_of_element_located((By.XPATH, "//input[@placeholder='登录名以字母开头,长度在5-18之间,只能包含字母、数字和下划线、@']"))
+-#         )
+-#         account_input.clear()
+-#         account_input.send_keys("admin@test1")
+-#
+-#         STEP(3, '填写用户名称')
+-#         account_name_input = WebDriverWait(wd, 10).until(
+-#             EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入用户名称']"))
+-#         )
+-#         account_name_input.clear()
+-#         account_name_input.send_keys("测试用户2")
+-#
+-#         STEP(4, '填写新密码')
+-#         passwd_input = WebDriverWait(wd, 10).until(
+-#             EC.presence_of_element_located(
+-#                 (By.XPATH, "//input[@placeholder='必须包含字母(不区分大小写)、数字和特殊字符,至少8个字符']"))
+-#         )
+-#         passwd_input.clear()
+-#         passwd_input.send_keys("ub@123456")
+-#
+-#         STEP(5, '填写确认密码')
+-#         sepasswd_input = WebDriverWait(wd, 10).until(
+-#             EC.presence_of_element_located(
+-#                 (By.XPATH, "//input[@placeholder='请确认密码']"))
+-#         )
+-#         sepasswd_input.clear()
+-#         sepasswd_input.send_keys("ub@123456")
+-#
+-#         STEP(6, '点击确认')
+-#         commit = WebDriverWait(wd, 10).until(
+-#             EC.element_to_be_clickable((By.XPATH, "//div[@aria-label='新增']//span[contains(text(),'确 定')]"))
+-#         )
+-#         commit.click()
+-#
+-#         STEP(7, '验证是否正常提示')
+-#         get_menu = WebDriverWait(wd, 10).until(
+-#             EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
+-#         )
+-#         get_menu1 = get_menu.text
+-#         # CHECK_POINT('检查是否出现错误提示弹窗', get_menu1 == "登录名已存在,请重新输入")
+-#         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-#         sleep(2)
++        CHECK_POINT('校验实际提示内容和预期提示内容是否一致', get_menu1 == info)
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/.idea/inspectionProfiles/profiles_settings.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+><component name=\"InspectionProjectProfileManager\">\r\n  <settings>\r\n    <option name=\"USE_PROJECT_PROFILE\" value=\"false\" />\r\n    <version value=\"1.0\" />\r\n  </settings>\r\n</component>
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/profiles_settings.xml b/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/profiles_settings.xml
+--- a/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/profiles_settings.xml	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/profiles_settings.xml	(date 1735806196215)
+@@ -1,6 +1,0 @@
+-<component name="InspectionProjectProfileManager">
+-  <settings>
+-    <option name="USE_PROJECT_PROFILE" value="false" />
+-    <version value="1.0" />
+-  </settings>
+-</component>
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/02用户管理/02查询用户.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\n\r\nclass Userquery001:\r\n    name = 'user_query_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '点击搜索框')\r\n        user_query = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        user_query.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '填写登录名')\r\n        account_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        account_input.clear()\r\n        account_input.send_keys(\"admin@test1\")\r\n\r\n        STEP(3, '校验是否成功检索用户')\r\n        get_user = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//div[normalize-space()='admin@test1']\"))\r\n        )\r\n        get_username = get_user.text\r\n        CHECK_POINT('校验是否成功检索用户', get_username == \"admin@test1\")\r\n        sleep(2)\r\n\r\n\r\n        # 调用钉钉输出测试报告\r\n        # get_reportfile_send_dingding(\"123213_测试报告\", \"http://192.168.1.251\")
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/02用户管理/02查询用户.py b/运维集控/项目测试/运维标准版/cases/02用户管理/02查询用户.py
+--- a/运维集控/项目测试/运维标准版/cases/02用户管理/02查询用户.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/02用户管理/02查询用户.py	(date 1735806194979)
+@@ -4,8 +4,8 @@
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+ 
+-class Userquery001:
+-    name = 'user_query_001'
++class Userquery:
++    name = 'user_query'
+     def teststeps(self):
+         wd = GSTORE['wd']
+ 
+@@ -14,23 +14,21 @@
+             EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='请输入用户名称']"))
+         )
+         user_query.click()
+-        sleep(2)
+ 
+         STEP(2, '填写登录名')
+         account_input = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located((By.XPATH, "//input[@placeholder='请输入用户名称']"))
+         )
+         account_input.clear()
+-        account_input.send_keys("admin@test1")
++        account_input.send_keys("test_user1")
+ 
+         STEP(3, '校验是否成功检索用户')
+         get_user = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//div[normalize-space()='admin@test1']"))
++            EC.presence_of_element_located((By.XPATH, "//div[normalize-space()='test_user1']"))
+         )
+         get_username = get_user.text
+-        CHECK_POINT('校验是否成功检索用户', get_username == "admin@test1")
+-        sleep(2)
++        CHECK_POINT('校验是否成功检索用户', get_username == "test_user1")
+ 
+-
+-        # 调用钉钉输出测试报告
+-        # get_reportfile_send_dingding("123213_测试报告", "http://192.168.1.251")
+\ No newline at end of file
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        wd.refresh()
+Index: 运维集控/项目测试/运维标准版/.idea/inspectionProfiles/Project_Default.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+><component name=\"InspectionProjectProfileManager\">\r\n  <profile version=\"1.0\">\r\n    <option name=\"myName\" value=\"Project Default\" />\r\n    <inspection_tool class=\"PyPep8Inspection\" enabled=\"true\" level=\"WEAK WARNING\" enabled_by_default=\"true\">\r\n      <option name=\"ignoredErrors\">\r\n        <list>\r\n          <option value=\"W292\" />\r\n        </list>\r\n      </option>\r\n    </inspection_tool>\r\n    <inspection_tool class=\"PyPep8NamingInspection\" enabled=\"true\" level=\"WEAK WARNING\" enabled_by_default=\"true\">\r\n      <option name=\"ignoredErrors\">\r\n        <list>\r\n          <option value=\"N812\" />\r\n        </list>\r\n      </option>\r\n    </inspection_tool>\r\n  </profile>\r\n</component>
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/Project_Default.xml b/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/Project_Default.xml
+--- a/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/Project_Default.xml	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/.idea/inspectionProfiles/Project_Default.xml	(date 1735806196217)
+@@ -1,19 +1,0 @@
+-<component name="InspectionProjectProfileManager">
+-  <profile version="1.0">
+-    <option name="myName" value="Project Default" />
+-    <inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
+-      <option name="ignoredErrors">
+-        <list>
+-          <option value="W292" />
+-        </list>
+-      </option>
+-    </inspection_tool>
+-    <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
+-      <option name="ignoredErrors">
+-        <list>
+-          <option value="N812" />
+-        </list>
+-      </option>
+-    </inspection_tool>
+-  </profile>
+-</component>
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/02用户管理/03编辑用户.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\n\r\nclass UserModify001:\r\n    name = 'user_modify_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '点击搜索框')\r\n        user_query = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        user_query.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '填写登录名')\r\n        account_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        account_input.clear()\r\n        account_input.send_keys(\"admin@test1\")\r\n\r\n        STEP(3, '勾选用户')\r\n        select_click= WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//tbody//tr//td//div//label//span//span\"))\r\n        )\r\n        select_click.click()\r\n        sleep(2)\r\n\r\n        STEP(4, '点击编辑按钮')\r\n        user_update = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[contains(@class,'company-edmit-right')]//span[contains(text(),'编辑')]\"))\r\n        )\r\n        user_update.click()\r\n        sleep(2)\r\n\r\n        STEP(5, '填写用户名称')\r\n        account_name_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//div[@class='el-input el-input--suffix']//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        account_name_input.clear()\r\n        account_name_input.send_keys(\"admin@update\")\r\n\r\n        STEP(6, '勾选修改密码按钮')\r\n        user_passwd_click = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[contains(@class,'dialog-input')]//span[contains(@class,'el-checkbox__inner')]\"))\r\n        )\r\n        user_passwd_click.click()\r\n        sleep(2)\r\n\r\n        STEP(6, '填写当前用户密码')\r\n        current_passwd = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[contains(@placeholder,'请输当前登录用户的密码')]\"))\r\n        )\r\n        current_passwd.clear()\r\n        current_passwd.send_keys(\"ub@123456\")\r\n\r\n        STEP(7, '填写新密码')\r\n        newpasswd = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[contains(@placeholder,'必须包含字母(不区分大小写)、数字和特殊字符,至少8个字符')]\"))\r\n        )\r\n        newpasswd.clear()\r\n        newpasswd.send_keys(\"ub@12345678\")\r\n\r\n        STEP(8, '填写确认密码')\r\n        verify_passwd = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='请确认密码']\"))\r\n        )\r\n        verify_passwd.clear()\r\n        verify_passwd.send_keys(\"ub@12345678\")\r\n\r\n        STEP(9, '填写用户工号')\r\n        sepasswd_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='请输入工号']\"))\r\n        )\r\n        sepasswd_input.clear()\r\n        sepasswd_input.send_keys(\"123456\")\r\n\r\n        STEP(9, '填写手机号')\r\n        phone = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='请输入手机号码']\"))\r\n        )\r\n        phone.clear()\r\n        phone.send_keys(\"13169131242\")\r\n\r\n        STEP(10, '填写邮箱')\r\n        sepasswd_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='请输入邮箱']\"))\r\n        )\r\n        sepasswd_input.clear()\r\n        sepasswd_input.send_keys(\"12341@qq.com\")\r\n\r\n        STEP(11, '填写备注')\r\n        user_remark = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='备注']\"))\r\n        )\r\n        user_remark.clear()\r\n        user_remark.send_keys(\"测试用户\")\r\n\r\n        STEP(12, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[contains(@aria-label,'编辑')]//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(13, '验证是否编辑成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.visibility_of_element_located((By.XPATH, \"//p[@class='el-message__content']\"))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/02用户管理/03编辑用户.py b/运维集控/项目测试/运维标准版/cases/02用户管理/03编辑用户.py
+--- a/运维集控/项目测试/运维标准版/cases/02用户管理/03编辑用户.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/02用户管理/03编辑用户.py	(date 1735806194976)
+@@ -13,40 +13,31 @@
+         user_query = WebDriverWait(wd, 10).until(
+             EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='请输入用户名称']"))
+         )
+-        user_query.click()
+-        sleep(2)
++        user_query.clear()
++        user_query.send_keys("test_user1")
+ 
+-        STEP(2, '填写登录名')
+-        account_input = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//input[@placeholder='请输入用户名称']"))
+-        )
+-        account_input.clear()
+-        account_input.send_keys("admin@test1")
+-
+-        STEP(3, '勾选用户')
++        STEP(2, '勾选用户')
+         select_click= WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//tbody//tr//td//div//label//span//span"))
++            EC.presence_of_element_located((By.XPATH, "//th[contains(@class,'is-leaf el-table__cell')]//span[contains(@class,'el-checkbox__inner')]"))
+         )
+         select_click.click()
+-        sleep(2)
+ 
+-        STEP(4, '点击编辑按钮')
++        STEP(3, '点击编辑按钮')
+         user_update = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'company-edmit-right')]//span[contains(text(),'编辑')]"))
++            EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'编辑')]"))
+         )
+         user_update.click()
+-        sleep(2)
+ 
+-        STEP(5, '填写用户名称')
++        STEP(4, '修改用户名称')
+         account_name_input = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//div[@class='el-input el-input--suffix']//input[@placeholder='请输入用户名称']"))
++            EC.presence_of_element_located((By.XPATH, "//div[contains(@class,'dialog-input')]//input[contains(@placeholder,'请输入用户名称')]"))
+         )
+         account_name_input.clear()
+-        account_name_input.send_keys("admin@update")
++        account_name_input.send_keys("test_update")
+ 
+-        STEP(6, '勾选修改密码按钮')
++        STEP(5, '勾选修改密码按钮')
+         user_passwd_click = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'dialog-input')]//span[contains(@class,'el-checkbox__inner')]"))
++            EC.element_to_be_clickable((By.XPATH, "//span[@class='el-checkbox__label']"))
+         )
+         user_passwd_click.click()
+         sleep(2)
+@@ -54,7 +45,7 @@
+         STEP(6, '填写当前用户密码')
+         current_passwd = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located(
+-                (By.XPATH, "//input[contains(@placeholder,'请输当前登录用户的密码')]"))
++                (By.XPATH, "//input[@placeholder='请输当前登录用户的密码']"))
+         )
+         current_passwd.clear()
+         current_passwd.send_keys("ub@123456")
+@@ -62,7 +53,7 @@
+         STEP(7, '填写新密码')
+         newpasswd = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located(
+-                (By.XPATH, "//input[contains(@placeholder,'必须包含字母(不区分大小写)、数字和特殊字符,至少8个字符')]"))
++                (By.XPATH, "//input[@placeholder='必须包含字母(不区分大小写)、数字和特殊字符,至少8个字符']"))
+         )
+         newpasswd.clear()
+         newpasswd.send_keys("ub@12345678")
+@@ -109,14 +100,17 @@
+ 
+         STEP(12, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+-            EC.element_to_be_clickable((By.XPATH, "//div[contains(@aria-label,'编辑')]//span[contains(text(),'确 定')]"))
++            EC.element_to_be_clickable((By.XPATH, "//div[@aria-label='编辑']//span[contains(text(),'确 定')]"))
+         )
+         commit.click()
+ 
+         STEP(13, '验证是否编辑成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.visibility_of_element_located((By.XPATH, "//p[@class='el-message__content']"))
++            EC.visibility_of_element_located((By.XPATH, "//p[contains(@class,'el-message__content')]"))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        wd.refresh()
+\ No newline at end of file
+Index: 运维集控/项目测试/运维标准版/cases/02用户管理/04删除用户.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass Userdelete001:\r\n    name = 'user_delete_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '点击搜索框')\r\n        user_query = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        user_query.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '填写登录名')\r\n        account_input = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='请输入用户名称']\"))\r\n        )\r\n        account_input.clear()\r\n        account_input.send_keys(\"admin@test1\")\r\n\r\n        STEP(3, '勾选用户')\r\n        select_click= WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//tbody//tr//td//div//label//span//span\"))\r\n        )\r\n        select_click.click()\r\n        sleep(2)\r\n\r\n        STEP(4, '点击删除按钮')\r\n        user_update = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//span[contains(text(),'删除')]\"))\r\n        )\r\n        user_update.click()\r\n        sleep(2)\r\n\r\n        STEP(5, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//button[contains(@class,'el-button el-button--default el-button--small el-button--primary')]//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n\r\n        STEP(6, '验证是否删除成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.visibility_of_element_located((By.XPATH, \"//p[@class='el-message__content']\"))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)\r\n\r\n        # 本地启动http微服务\r\n        # python - m http.server 80 - -directory log\r\n        # 输出报告到钉钉\r\n        get_reportfile_send_dingding(\"用户管理模块_测试报告\", \"http://192.168.1.251\")
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/02用户管理/04删除用户.py b/运维集控/项目测试/运维标准版/cases/02用户管理/04删除用户.py
+--- a/运维集控/项目测试/运维标准版/cases/02用户管理/04删除用户.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/02用户管理/04删除用户.py	(date 1735806194974)
+@@ -12,29 +12,20 @@
+         user_query = WebDriverWait(wd, 10).until(
+             EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='请输入用户名称']"))
+         )
+-        user_query.click()
+-        sleep(2)
++        user_query.clear()
++        user_query.send_keys("test_user3")
+ 
+-        STEP(2, '填写登录名')
+-        account_input = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//input[@placeholder='请输入用户名称']"))
+-        )
+-        account_input.clear()
+-        account_input.send_keys("admin@test1")
+-
+-        STEP(3, '勾选用户')
++        STEP(2, '勾选用户')
+         select_click= WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.XPATH, "//tbody//tr//td//div//label//span//span"))
++            EC.presence_of_element_located((By.XPATH, "//th[contains(@class,'is-leaf el-table__cell')]//span[contains(@class,'el-checkbox__inner')]"))
+         )
+         select_click.click()
+-        sleep(2)
+ 
+         STEP(4, '点击删除按钮')
+         user_update = WebDriverWait(wd, 10).until(
+             EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'删除')]"))
+         )
+         user_update.click()
+-        sleep(2)
+ 
+         STEP(5, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+@@ -42,16 +33,13 @@
+         )
+         commit.click()
+ 
+-
+         STEP(6, '验证是否删除成功')
+         get_menu = WebDriverWait(wd, 10).until(
+             EC.visibility_of_element_located((By.XPATH, "//p[@class='el-message__content']"))
+         )
+         get_menu1 = get_menu.text
+         CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+ 
+-        # 本地启动http微服务
+-        # python - m http.server 80 - -directory log
+-        # 输出报告到钉钉
+-        get_reportfile_send_dingding("用户管理模块_测试报告", "http://192.168.1.251")
+\ No newline at end of file
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        wd.refresh()
+Index: 运维集控/项目测试/运维标准版/cases/03区域分组/01新增区域分组.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>import sys\r\nimport os\r\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))\r\nfrom 运维集控.项目测试.运维标准版.lib.base import *\r\n\r\nclass AreagroupAdd001:\r\n    name = 'Areagroup_add_001'\r\n    def teststeps(self):\r\n        wd = GSTORE['wd']\r\n\r\n        STEP(1, '点击新增按钮')\r\n        areagroup_add = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='company-edmit-right']//span[contains(text(),'新增')]\"))\r\n        )\r\n        areagroup_add.click()\r\n        sleep(2)\r\n\r\n        STEP(2, '填写分组名称')\r\n        group_name = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='长度1-20个字符']\"))\r\n        )\r\n        group_name.clear()\r\n        group_name.send_keys(\"测试区域1\")\r\n\r\n        STEP(3, '填写分组地址')\r\n        group_address = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.XPATH, \"//input[@placeholder='输入地址不能大于50个字符']\"))\r\n        )\r\n        group_address.clear()\r\n        group_address.send_keys(\"顺恒利大厦\")\r\n\r\n        STEP(4, '填写分组备注')\r\n        group_remark = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located(\r\n                (By.XPATH, \"//input[@placeholder='请输入备注']\"))\r\n        )\r\n        group_remark.clear()\r\n        group_remark.send_keys(\"测试分组备注\")\r\n\r\n        STEP(6, '点击确认')\r\n        commit = WebDriverWait(wd, 10).until(\r\n            EC.element_to_be_clickable((By.XPATH, \"//div[@class='dialog-footer']//span[contains(text(),'确 定')]\"))\r\n        )\r\n        commit.click()\r\n\r\n        STEP(7, '验证是否新增成功')\r\n        get_menu = WebDriverWait(wd, 10).until(\r\n            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))\r\n        )\r\n        get_menu1 = get_menu.text\r\n        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == \"操作成功!\")\r\n        sleep(2)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/运维集控/项目测试/运维标准版/cases/03区域分组/01新增区域分组.py b/运维集控/项目测试/运维标准版/cases/03区域分组/01新增区域分组.py
+--- a/运维集控/项目测试/运维标准版/cases/03区域分组/01新增区域分组.py	(revision b789fc6f1e5a92b7596341cee33aeff2b5a8357e)
++++ b/运维集控/项目测试/运维标准版/cases/03区域分组/01新增区域分组.py	(date 1735806194959)
+@@ -3,39 +3,64 @@
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
+ from 运维集控.项目测试.运维标准版.lib.base import *
+ 
+-class AreagroupAdd001:
+-    name = 'Areagroup_add_001'
++#构建当前项目路径
++sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..')))
++# 构建 CSV 文件的绝对路径
++csv_path = os.path.abspath(
++    os.path.join(os.path.dirname(__file__), '..', '..', 'testdata', '03区域分组', '新增区域分组.csv'))
++
++class AreagroupAdd:
++    tag = ['新增区域分组']
++    ddt_cases = read_csv_data(csv_path)
+     def teststeps(self):
+         wd = GSTORE['wd']
++        # 从self.para中解构出数据
++        name = self.name
++        area_group, group_name, group_address, remark, info = self.para
+ 
+         STEP(1, '点击新增按钮')
+         areagroup_add = WebDriverWait(wd, 10).until(
+             EC.element_to_be_clickable((By.XPATH, "//div[@class='company-edmit-right']//span[contains(text(),'新增')]"))
+         )
+         areagroup_add.click()
+-        sleep(2)
+ 
+-        STEP(2, '填写分组名称')
+-        group_name = WebDriverWait(wd, 10).until(
++        STEP(2, f'查看并选择区域分组:{area_group}')
++        if area_group:
++            area_group_input = WebDriverWait(wd, 10).until(
++                EC.presence_of_element_located((By.XPATH, "// input[ @ placeholder = '请选择分组']"))
++            )
++            area_group_input.clear()
++            area_group_input.send_keys(area_group)
++            sleep(1)
++            #默认选择第一个内容
++            area_group_select = WebDriverWait(wd, 10).until(
++                EC.presence_of_element_located((By.XPATH, "//div[@class='el-cascader__suggestion-panel el-scrollbar']//li[1]//span[1]"))
++            )
++            area_group_select.click()
++        else:
++            print("group_name 为空,不执行选择区域分组的操作")
++
++        STEP(3, f'填写分组名称:{group_name}')
++        group_name_input = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located((By.XPATH, "//input[@placeholder='长度1-20个字符']"))
+         )
+-        group_name.clear()
+-        group_name.send_keys("测试区域1")
++        group_name_input.clear()
++        group_name_input.send_keys(group_name)
+ 
+-        STEP(3, '填写分组地址')
+-        group_address = WebDriverWait(wd, 10).until(
++        STEP(4, f'填写分组地址:{group_address}')
++        group_address_input = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located((By.XPATH, "//input[@placeholder='输入地址不能大于50个字符']"))
+         )
+-        group_address.clear()
+-        group_address.send_keys("顺恒利大厦")
++        group_address_input.clear()
++        group_address_input.send_keys(group_address)
+ 
+-        STEP(4, '填写分组备注')
++        STEP(5, f'填写分组备注:{remark}')
+         group_remark = WebDriverWait(wd, 10).until(
+             EC.presence_of_element_located(
+                 (By.XPATH, "//input[@placeholder='请输入备注']"))
+         )
+         group_remark.clear()
+-        group_remark.send_keys("测试分组备注")
++        group_remark.send_keys(remark)
+ 
+         STEP(6, '点击确认')
+         commit = WebDriverWait(wd, 10).until(
+@@ -45,8 +70,13 @@
+ 
+         STEP(7, '验证是否新增成功')
+         get_menu = WebDriverWait(wd, 10).until(
+-            EC.presence_of_element_located((By.CSS_SELECTOR, '.el-message__content'))
++            EC.visibility_of_element_located((By.XPATH, "//p[@class='el-message__content']"))
+         )
+         get_menu1 = get_menu.text
+-        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == "操作成功!")
+-        sleep(2)
+\ No newline at end of file
++        CHECK_POINT('检查是否出现成功提示弹窗', get_menu1 == info )
++
++        # 截图并保存
++        SELENIUM_LOG_SCREEN(wd, "50%")
++        sleep(1)
++        wd.refresh()
++