提交 e9d530eb authored 作者: 陈泽健's avatar 陈泽健

优化user_login函数,增加approval_status_control会议审批的公用函数。实现长安大学取消审批短信通知的JSON测试。

上级 51f027a3
......@@ -148,7 +148,7 @@ def get_login_url_from_config(login_type):
return login_url
# 管理员登录函数
def admin_login(username, password):
def user_login(username, password):
"""
管理员登录函数。
该函数通过模拟用户输入用户名、密码和验证码,并点击登录按钮,以实现管理员登录。
......@@ -1475,7 +1475,7 @@ def get_current_time_formatted():
return closest_time_point
# 会议创建函数
def meeting_message(meeting_room_name, message_type, message_name, wd):
def meeting_message(meeting_room_name, message_type, message_name, project_type, wd):
"""
会议室会议预定功能的实现。
......@@ -1483,8 +1483,10 @@ def meeting_message(meeting_room_name, message_type, message_name, wd):
包括会议名称和类型,最后选择会议时间并完成预定。
参数:
- MeetingRoomName (str): 会议室名称,用于搜索指定的会议室。
- MessageType (str): 会议类型,用于填写会议信息。
- meeting_room_name (str): 会议室名称,用于搜索指定的会议室。
- message_type (str): 会议类型,用于填写会议信息。
- message_name (str): 会议名称,用于填写会议信息。
- project_type (str): 项目类型,用于判断是否需要输入特定信息,如固定电话。
- wd: WebDriver实例,用于操作浏览器。
返回:
......@@ -1507,13 +1509,18 @@ def meeting_message(meeting_room_name, message_type, message_name, wd):
safe_click(
(By.XPATH, f"//div[@class='reserve_input']//span[@class='el-checkbox__label'][contains(text(),'{message_type}')]"), wd)
sleep(1)
# 判断是否为项目定制的预约界面
if project_type == "长安大学":
# 输入固定电话
safe_send_keys((By.XPATH,"//input[@placeholder='固定电话']"), "13724387311", wd)
# 选择会议时间,点击【快速预定】按钮
current_time = get_current_time_formatted()
print(f"获取当前的时间{current_time}")
safe_click((By.XPATH, f"//div[normalize-space()='{current_time}']"), wd)
sleep(1)
safe_click((By.XPATH, "//div[@class='header_Quick']"), wd)
safe_click((By.XPATH, "//div[@class='header_Quick']"), wd)
sleep(2)
# 点击【确定】按钮
safe_click((By.XPATH, "//button[@type='button']//span[contains(text(),'预定')]"), wd)
......@@ -1609,3 +1616,32 @@ def del_message(message_name, wd):
# 进入【会议室列表】界面
safe_click((By.XPATH, "//span[contains(text(),'会议室列表')]"), wd)
sleep(1)
# 设置会议审批状态函数
def approval_status_control(message_name, approval_type, wd):
"""
设置会议审批状态。
参数:
- message_name: 会议名称,用于搜索特定的会议。
- approval_type: 审批类型,用于选择审批操作(如驳回)。
- wd: WebDriver实例,用于与浏览器交互。
"""
# 进入会议审批模块界面
safe_click((By.XPATH, "//span[contains(text(),'会议审批')]"), wd)
sleep(1)
# 进入待我审批界面
safe_click((By.XPATH, "//div[@id='tab-second']"), wd)
sleep(1)
# 搜索会议
safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议名称搜索']"), message_name, wd)
send_keyboard((By.XPATH, "//input[@placeholder='请输入会议名称搜索']"), wd)
sleep(1)
# 点击【审批】按钮
safe_click((By.XPATH, "//button[@type='button']//span[contains(text(),'审批')]"), wd)
sleep(1)
# 输入驳回意见
safe_send_keys((By.XPATH, "//textarea[@placeholder='请输入审批意见']"), "审批意见", wd)
# 点击【驳回】按钮
safe_click((By.XPATH, f"//span[contains(text(),'{approval_type}')]"), wd)
sleep(1)
\ No newline at end of file
......@@ -259,3 +259,4 @@
- 处理异常情况,补充截图操作。
68. 2025-03-17
- 补充实现展会的AI创会的简单代码处理,调整config.json配置项增加长安大学的配置信息。
- 优化user_login函数,增加approval_status_control会议审批的公用函数。实现长安大学取消审批短信通知的JSON测试。
\ No newline at end of file
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
def suite_teardown():
......
......@@ -31,7 +31,7 @@ class SMCMeeting_00x:
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
# 调用会议创建函数
meeting_message("SMC会议室", "SMC3.0", "SMC3.0", wd)
meeting_message("SMC会议室", "SMC3.0", "SMC3.0", "标准版", wd)
sleep(1)
for step in case:
print(f"当前步骤: {step}")
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
def suite_teardown():
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
def suite_teardown():
......
......@@ -35,7 +35,7 @@ class TxcentMeeting_00x:
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
# 调用会议创建函数
meeting_message("腾讯会议室", "腾讯会议", "腾讯会议",wd)
meeting_message("腾讯会议室", "腾讯会议", "腾讯会议","标准版", wd)
sleep(1)
for step in case:
print(f"当前步骤: {step}")
......
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
def suite_teardown():
browser_quit()
\ No newline at end of file
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
def suite_teardown():
browser_quit()
\ No newline at end of file
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
def suite_teardown():
browser_quit()
\ No newline at end of file
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
def suite_teardown():
browser_quit()
\ No newline at end of file
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
def suite_teardown():
......
......@@ -35,7 +35,7 @@ class EditMessage_00x:
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
# 调用会议创建函数
meeting_message("预约会议室", "普通会议", "普通会议",wd)
meeting_message("预约会议室", "普通会议", "普通会议","标准版", wd)
# 搜索会议
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字搜索']"), "普通会议", wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字搜索']"), wd)
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
def suite_teardown():
......
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
sleep(2)
# 进入历史记录界面
safe_click((By.XPATH,"//span[contains(text(),'历史记录')]"), wd)
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 切换至历史会议模块
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@PT", "Ubains@4321")
user_login("admin@PT", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
......
......@@ -35,7 +35,7 @@ class MessageApproval:
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
# 创建审批会议
meeting_message("审批会议室", "普通会议", "审批测试会议",wd)
meeting_message("审批会议室", "普通会议", "审批测试会议","标准版", wd)
for step in case:
print(f"当前步骤: {step}")
# 先赋值
......
......@@ -172,7 +172,7 @@ class MeetingApproval_Status_000x:
safe_click((By.XPATH,"//img[@title='退出登录']"),wd)
sleep(2)
# 登录审批人的账号
admin_login("admin@ZDH","Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
logging.info("登录审批人账号")
sleep(2)
# 进入会议审批模块
......@@ -288,4 +288,4 @@ class MeetingApproval_Status_000x:
INFO("退出当前账号,返回至普通用户账号")
logging.info("退出当前账号,返回至普通用户账号")
safe_click((By.XPATH, "//img[contains(@title,'退出登录')]"), wd)
admin_login("admin@user", "Ubains@4321")
\ No newline at end of file
user_login("admin@user", "Ubains@4321")
\ No newline at end of file
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@user", "Ubains@4321")
user_login("admin@user", "Ubains@4321")
sleep(2)
def suite_teardown():
......
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
safe_click((By.CSS_SELECTOR, ".el-collapse-item__arrow.el-icon-arrow-right"), wd)
sleep(2)
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -22,7 +22,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开会议室管理下拉菜单")
......
......@@ -22,7 +22,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开会议室管理下拉菜单")
......
......@@ -22,7 +22,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开会议室管理下拉菜单")
......
......@@ -16,7 +16,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
sleep(2)
# 进入历史记录界面
safe_click((By.XPATH,"//span[contains(text(),'会议模板')]"), wd)
\ No newline at end of file
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 切换至会议模板模块
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -22,7 +22,7 @@ def suite_setup():
browser_init("展厅预定巡检")
wd = GSTORE['wd']
admin_login("Test02", "ubains@123")
user_login("Test02", "ubains@123")
def suite_teardown():
browser_quit()
\ No newline at end of file
......@@ -22,7 +22,7 @@ def suite_setup():
browser_init("展厅预定巡检")
wd = GSTORE['wd']
admin_login("Test02", "ubains@123")
user_login("Test02", "ubains@123")
def suite_teardown():
browser_quit()
\ No newline at end of file
......@@ -26,7 +26,7 @@ def suite_setup():
app_init(device_ip,62001)
wd = GSTORE['wd']
admin_login("Test02", "ubains@123")
user_login("Test02", "ubains@123")
sleep(5)
......
......@@ -26,7 +26,7 @@ def suite_setup():
browser_init("展厅预定巡检")
wd = GSTORE['wd']
admin_login("Test02", "ubains@123")
user_login("Test02", "ubains@123")
def suite_teardown():
device_ip = '192.168.5.142'
......
......@@ -22,7 +22,7 @@ def suite_setup():
browser_init("展厅预定巡检")
wd = GSTORE['wd']
admin_login("Test02", "ubains@123")
user_login("Test02", "ubains@123")
sleep(2)
# 进入后台
enter_the_backend()
......
......@@ -30,7 +30,7 @@ def suite_setup():
# 传入系统类型,展厅预定巡检 == 192.168.5.200
browser_init("展厅预定巡检")
wd = GSTORE['wd']
admin_login("Test02", "ubains@123")
user_login("Test02", "ubains@123")
def suite_teardown():
device_ip = '192.168.5.112'
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -15,7 +15,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -14,7 +14,7 @@ def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
user_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
......
......@@ -132,7 +132,7 @@ class Main_User_Manage_000x:
wd.get(login_url)
# 最大化浏览器窗口
wd.maximize_window()
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开账号管理下拉菜单")
......
......@@ -110,7 +110,7 @@ class User_Chanage_Pwd_000x:
wd.get(login_url)
# 最大化浏览器窗口
wd.maximize_window()
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
# wd.refresh()
INFO("打开账号管理下拉菜单")
......
......@@ -103,7 +103,7 @@ class Add_User_000x:
wd.get(login_url)
# 最大化浏览器窗口
wd.maximize_window()
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开账号管理下拉菜单")
......
......@@ -100,7 +100,7 @@ class Query_User_000x:
wd.get(login_url)
# 最大化浏览器窗口
wd.maximize_window()
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开账号管理下拉菜单")
......
......@@ -99,7 +99,7 @@ class User_Status_000x:
CHECK_POINT('校验登录提示信息', notify_text == '用户被停用')
STEP(7, '重新登录管理员账号,回到用户管理界面')
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开账号管理下拉菜单")
safe_click((By.XPATH, "//span[@class='aside_menu menu_account']"), wd)
......@@ -128,7 +128,7 @@ class User_Status_000x:
wd.get(login_url)
# 最大化浏览器窗口
wd.maximize_window()
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
wd.refresh()
......
......@@ -20,7 +20,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开账号管理下拉菜单")
......
......@@ -14,7 +14,7 @@ def suite_setup():
browser_init("标准版预定系统")
wd = GSTORE['wd']
admin_login("admin@ZDH", "Ubains@4321")
user_login("admin@ZDH", "Ubains@4321")
enter_the_backend()
INFO("打开账号管理下拉菜单")
......
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..','..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("长安大学预定测试环境")
user_login("admin@PT", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..' , '..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
# 构建XLSX文件的绝对路径
xlsx_file_path = os.path.join(预定系统_path, '测试数据', '长安大学测试用例.xlsx')
class MessageApproval:
tags = ['长安大学审批测试']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 长安大学审批测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 长安大学审批测试
"""
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行会议模板模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
# 读取Excel文件中的测试用例数据
ddt_cases = read_xlsx_data(xlsx_file_path, "会议审批")
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
# 创建审批会议
meeting_message("审批会议室", "普通会议", "审批测试会议","长安大学", wd)
for step in case:
print(f"当前步骤: {step}")
# 先赋值
locator_type = get_by_enum(step.get('locator_type'))
locator_value = step.get('locator_value')
element_type = step.get('element_type')
element_value = step.get('element_value')
expented_result = step.get('expented_result')
# 判断页面功能类型
if step.get("page") == "ApprovalInitiate":
if element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(1)
elif element_type == "click":
safe_click((locator_type, locator_value), wd)
sleep(2)
elif element_type == "getTips":
notify_text = get_notify_text(wd, (locator_type, locator_value), "Message_Template", "Template_Edit", "长安审批测试")
INFO(f"提示信息为:{notify_text}")
CHECK_POINT("编辑测试判断是否正确", expented_result in notify_text)
SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "function":
print(f"这是element_value的值:{element_value}")
# 退出登录,并调用用户登录函数
safe_click((By.XPATH, "//img[@title='退出登录']"), wd)
sleep(1)
wd.refresh()
user_login(element_value[0],element_value[1])
sleep(2)
# 调用审批会议状态设置函数
approval_status_control("审批测试会议", element_value[2], wd)
sleep(1)
# 退出登录
safe_click((By.XPATH, "//img[@title='退出登录']"), wd)
wd.refresh()
# 登录与退出操作频繁,到登录页后存在一个缓存界面,可以点击退出按钮
quit_element = wd.find_element(By.XPATH, "//div[@class='operat']//span//img")
if quit_element != "":
quit_element.click()
# 调用用户登录函数,登录普通用户
user_login("admin@PT","Ubains@4321")
# 进入会议审批模块
safe_click((By.XPATH, "//span[contains(text(),'会议审批')]"), wd)
sleep(1)
\ No newline at end of file
name,conference_name,message_name,book_type,issue_name,book_start_time,book_end_time,message_notification,check_text
展厅巡检_001,展厅会议室,展厅巡检测试,普通会议,议题1,08:00,08:15,开会前一天提醒,预定成功
\ No newline at end of file
展厅巡检_001,MeetingRoom,展厅巡检测试,普通会议,议题1,08:00,08:15,开会前一天提醒,预定成功
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论