Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
U
ubains-module-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
郑晓兵
ubains-module-test
Commits
39fd8782
提交
39fd8782
authored
12月 25, 2024
作者:
陈泽健
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
补充会议审批相关功能之间的流程自动化处理,会议审批模块已补充完成。
上级
6637f1da
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
276 行增加
和
7 行删除
+276
-7
README.md
预定系统/README.md
+2
-0
01审批会议创建.py
预定系统/cases/会议审批/01审批会议创建.py
+6
-5
02审批会议操作.py
预定系统/cases/会议审批/02审批会议操作.py
+262
-0
01审批会议创建.cpython-310.pyc
预定系统/cases/会议审批/__pycache__/01审批会议创建.cpython-310.pyc
+0
-0
02审批会议操作.cpython-310.pyc
预定系统/cases/会议审批/__pycache__/02审批会议操作.cpython-310.pyc
+0
-0
会议审批操作.csv
预定系统/测试数据/会议审批/会议审批操作.csv
+4
-0
会议审批预约.csv
预定系统/测试数据/会议审批/会议审批预约.csv
+2
-2
没有找到文件。
预定系统/README.md
浏览文件 @
39fd8782
...
...
@@ -134,3 +134,4 @@
-
根据展厅巡检使用时遇到的问题进行调整,在议题文件上传前做文件是否存在的校验,若不存在则跳出函数。补充讯飞流程的切换窗口句柄代码。
-
补充会议审批预约以及取消审批功能的自动化处理。调整会议模板以及历史会议的自动化处理顺序,无需重复初始化浏览器。
-
处理各模块间的执行流程优化。
-
补充会议审批相关功能之间的流程自动化处理,会议审批模块已补充完成。
\ No newline at end of file
预定系统/cases/会议审批/01审批会议创建.py
浏览文件 @
39fd8782
...
...
@@ -21,7 +21,7 @@ csv_file_path = os.path.join(current_dir, '../../测试数据/会议审批/会
time_format
=
"
%
H:
%
M"
class
MeetingApproval_Book_000x
:
tag
=
[
'会议审批功能'
]
tag
s
=
[
'会议审批功能'
]
"""
执行指令:
1.cd 预定系统
...
...
@@ -159,10 +159,6 @@ class MeetingApproval_Book_000x:
CHECK_POINT
(
"审批会议名称是否正确"
,
notify_text
==
message_name
)
STEP
(
6
,
"点击【取消审批】按钮"
)
# 查询会议
safe_send_keys
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
message_name
,
wd
)
send_keyboard
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
wd
)
sleep
(
2
)
safe_click
((
By
.
XPATH
,
"//span[contains(text(),'取消审批')]"
),
wd
)
sleep
(
2
)
# 点击【取消】按钮
...
...
@@ -177,3 +173,7 @@ class MeetingApproval_Book_000x:
"Meeting_Approval"
,
"Message_Book"
,
f
"{name}取消审批成功提示信息"
)
INFO
(
f
"取消审批成功提示信息为:{notify_text}"
)
CHECK_POINT
(
"取消审批成功提示是否正确"
,
notify_text
==
"取消成功"
)
# 切换至会议室列表界面
safe_click
((
By
.
XPATH
,
"//span[contains(text(),'会议室列表')]"
),
wd
)
sleep
(
2
)
\ No newline at end of file
预定系统/cases/会议审批/02审批会议操作.py
0 → 100644
浏览文件 @
39fd8782
from
datetime
import
datetime
,
timedelta
from
time
import
sleep
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
*
# 获取当前脚本所在的目录
current_dir
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
# 构建CSV文件的绝对路径
csv_file_path
=
os
.
path
.
join
(
current_dir
,
'../../测试数据/会议审批/会议审批操作.csv'
)
# 定义时间格式
time_format
=
"
%
H:
%
M"
class
MeetingApproval_Status_000x
:
tags
=
[
'会议审批功能'
]
"""
执行指令:
1.cd 预定系统
2.hytest --report_title 审批会议预约测试报告 --test 审批会议预约_0**
"""
ddt_cases
=
read_csv_data
(
csv_file_path
)
def
teststeps
(
self
):
"""
执行测试步骤以会议室删除功能。
本函数根据参数输入会议室名称进行搜索并删除会议室,并检查删除后的提示信息是否与预期相符。
字段含义:
name:用例名称
conference_name:会议室名称
message_name:会议名称
book_start_time:会议开始时间
book_end_time:会议结束时间
check_text:检查提示文本
"""
# 初始化通知文本为空字符串
notify_text
=
""
# 从全局存储中获取webdriver实例
wd
=
GSTORE
[
'wd'
]
name
=
self
.
name
conference_name
,
message_name
,
book_start_time
,
book_end_time
,
approval_type
,
approval_opinion
,
check_text
=
self
.
para
# 在会议室列表搜索会议室
STEP
(
1
,
f
"在会议室列表搜索:{conference_name}"
)
# 展开筛选下拉框
safe_click
((
By
.
XPATH
,
"//i[@class='el-collapse-item__arrow el-icon-arrow-right']"
),
wd
)
sleep
(
1
)
# 输入会议室名称,并点击【查询】按钮
safe_send_keys
((
By
.
XPATH
,
"//input[@placeholder='请输入会议室名称']"
),
conference_name
,
wd
)
safe_click
((
By
.
XPATH
,
"//button[@type='button']//span[contains(text(),'查询')]"
),
wd
)
sleep
(
1
)
INFO
(
"检查搜索结果"
)
# 获取搜索出的会议室名称
notify_text
=
elment_get_text
((
By
.
XPATH
,
"//span[@class='MeetingCityList_name']"
),
wd
)
INFO
(
f
"搜索结果为:{notify_text}"
)
CHECK_POINT
(
"搜索结果是否正确"
,
conference_name
in
notify_text
)
# 点击【会议预定】按钮,进入会议预定界面
STEP
(
2
,
"点击【会议预定】按钮"
)
safe_click
((
By
.
XPATH
,
"//span[@class='MeetingCityList_t_btn']"
),
wd
)
sleep
(
1
)
INFO
(
"检查页面标题是否正确"
)
# 获取页面标题
notify_text
=
elment_get_text
((
By
.
XPATH
,
"//div[@class='reserve_Title']"
),
wd
)
INFO
(
f
"页面标题为:{notify_text}"
)
CHECK_POINT
(
"页面标题是否正确"
,
"会议预定"
in
notify_text
)
sleep
(
1
)
# 在会议预定第一步界面进行数据填入
STEP
(
3
,
"会议第一步数据填写"
)
INFO
(
f
"输入会议名称:{message_name},选择会议开始时间:{book_start_time},选择会议结束时间:{book_end_time}"
)
# 输入会议名称
safe_send_keys
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称']"
),
message_name
,
wd
)
# 将字符串转换为时间对象
start_time
=
datetime
.
strptime
(
book_start_time
,
time_format
)
end_time
=
datetime
.
strptime
(
book_end_time
,
time_format
)
# 如果需要将时间差转换为分钟数
time_diff_minutes
=
(
end_time
-
start_time
)
.
total_seconds
()
/
60
INFO
(
f
"时间差为:time_diff_minutes"
)
# 判断如果开始时间与结束时间相等,则不重复点击
if
book_start_time
==
book_end_time
:
INFO
(
f
"开始时间与结束时间相等,选择时间块:{book_start_time}"
)
# 根据开始时间选择对应时间块,时间格式为:**:**
safe_click
((
By
.
XPATH
,
f
"(//div[normalize-space()='{book_start_time}'])[1]"
),
wd
)
elif
book_start_time
!=
book_end_time
:
INFO
(
f
"开始时间与结束时间不相等,选择时间块:{book_start_time},{book_end_time}"
)
# 根据开始时间选择对应时间块,时间格式为:**:**
safe_click
((
By
.
XPATH
,
f
"(//div[normalize-space()='{book_start_time}'])[1]"
),
wd
)
# 根据结束时间选择对应时间块,时间格式为:**:**
safe_click
((
By
.
XPATH
,
f
"(//div[normalize-space()='{book_end_time}'])[1]"
),
wd
)
sleep
(
2
)
# 判断时间差是否大于最大预约时长1小时,即60分钟
if
time_diff_minutes
>
60
:
INFO
(
f
"时间差大于最大预约时长1小时,选择【超出预约时长】"
)
notify_text
=
get_notify_text
(
wd
,
(
By
.
XPATH
,
"//p[contains(@class,'el-message__content')]"
),
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}_超出预约时长"
)
INFO
(
f
"提示信息为:{notify_text}"
)
CHECK_POINT
(
"超出预约时长提示是否正确"
,
"最大预定时间 1 小时"
in
notify_text
)
sleep
(
2
)
# 不选时间点击【下一步】查看提示信息
INFO
(
"不选时间点击【下一步】查看提示信息"
)
safe_click
((
By
.
XPATH
,
"//div[contains(text(),'下一步')]"
),
wd
)
sleep
(
1
)
notify_text
=
get_notify_text
(
wd
,
(
By
.
XPATH
,
"//p[contains(@class,'el-message__content')]"
),
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}请选择会议时间提示信息"
)
INFO
(
f
"提示信息为:{notify_text}"
)
CHECK_POINT
(
"未选时间提示是否正确"
,
"请选择会议时间"
in
notify_text
)
sleep
(
1
)
# 重新选择时间,将字符串转换为时间对象
time_obj
=
datetime
.
strptime
(
book_end_time
,
time_format
)
time_obj_minus_5_minutes
=
time_obj
-
timedelta
(
minutes
=
30
)
# 将时间对象转换回字符串
book_end_time
=
time_obj_minus_5_minutes
.
strftime
(
time_format
)
INFO
(
f
"重新选择结束时间为:{book_end_time}"
)
# 根据开始时间选择对应时间块,时间格式为:**:**
safe_click
((
By
.
XPATH
,
f
"(//div[normalize-space()='{book_start_time}'])[1]"
),
wd
)
# 根据结束时间选择对应时间块,时间格式为:**:**
safe_click
((
By
.
XPATH
,
f
"(//div[normalize-space()='{book_end_time}'])[1]"
),
wd
)
sleep
(
2
)
STEP
(
4
,
"点击【快速预约】按钮"
)
safe_click
((
By
.
XPATH
,
"//div[@class='header_Quick']"
),
wd
)
sleep
(
4
)
safe_click
((
By
.
XPATH
,
"//button[@type='button']//span[contains(text(),'预定')]"
),
wd
)
sleep
(
2
)
notify_text
=
get_notify_text
(
wd
,
(
By
.
XPATH
,
"//p[contains(@class,'el-message__content')]"
),
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}预定成功提示信息"
)
INFO
(
f
"预定成功提示信息为:{notify_text}"
)
CHECK_POINT
(
"预定成功提示是否正确"
,
notify_text
==
check_text
)
STEP
(
5
,
"检查审批会议是否创建成功"
)
# 进入会议审批模块
safe_click
((
By
.
XPATH
,
"//span[contains(text(),'会议审批')]"
),
wd
)
sleep
(
2
)
# 查询会议
safe_send_keys
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
message_name
,
wd
)
send_keyboard
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
wd
)
sleep
(
2
)
# 获取审批会议名称
notify_text
=
elment_get_text
((
By
.
CSS_SELECTOR
,
"body > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(3) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > div:nth-child(1)"
),
wd
)
INFO
(
f
"审批会议名称为:{notify_text}"
)
SELENIUM_LOG_SCREEN
(
wd
,
"50
%
"
,
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}_审批会议名称"
)
CHECK_POINT
(
"审批会议名称是否正确"
,
notify_text
==
message_name
)
STEP
(
5
,
"登录审批人账号,查看是否存在需审批会议"
)
safe_click
((
By
.
XPATH
,
"//img[@title='退出登录']"
),
wd
)
sleep
(
2
)
# 登录审批人的账号
admin_login
(
"admin@ZDH"
,
"Ubains@4321"
)
sleep
(
2
)
# 进入会议审批模块
safe_click
((
By
.
XPATH
,
"//ul[@class='meeting_list']//span[contains(text(),'会议审批')]"
),
wd
)
sleep
(
2
)
# 查询会议
safe_send_keys
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
message_name
,
wd
)
send_keyboard
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
wd
)
sleep
(
2
)
# 查看会议详细信息
safe_click
((
By
.
XPATH
,
"//button[@type='button']//span[contains(text(),'详细信息')]"
),
wd
)
sleep
(
2
)
SELENIUM_LOG_SCREEN
(
wd
,
"50
%
"
,
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}_审批会议信息"
)
safe_click
((
By
.
XPATH
,
"//div[@aria-label='详细信息']//span[contains(text(),'确定')]"
),
wd
)
# 点击【审批】按钮
safe_click
((
By
.
XPATH
,
"//button[@type='button']//span[contains(text(),'审批')]"
),
wd
)
sleep
(
1
)
if
approval_type
==
'通过'
:
STEP
(
6
,
"审批通过"
)
# 审批通过
safe_send_keys
((
By
.
XPATH
,
"//textarea[@placeholder='请输入审批意见']"
),
approval_opinion
,
wd
)
sleep
(
1
)
# 点击【同意】按钮
safe_click
((
By
.
XPATH
,
"//span[contains(text(),'同意')]"
),
wd
)
sleep
(
2
)
# 获取审批结果
notify_text
=
get_notify_text
(
wd
,
(
By
.
XPATH
,
"//p[contains(@class,'el-message__content')]"
),
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}审批通过提示信息"
)
CHECK_POINT
(
"审批通过提示是否正确"
,
notify_text
==
"审批完成!"
)
INFO
(
f
"审批结果为:{notify_text}"
)
else
:
STEP
(
6
,
"审批不通过"
)
# 审批不通过,不输入审批意见
safe_click
((
By
.
XPATH
,
"//span[contains(text(),'驳回')]"
),
wd
)
sleep
(
1
)
notify_text
=
get_notify_text
(
wd
,
(
By
.
XPATH
,
"//p[contains(@class,'el-message__content')]"
),
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}审批意见为空提示信息"
)
INFO
(
f
"审批结果为:{notify_text}"
)
CHECK_POINT
(
"审批意见为空提示是否正确"
,
notify_text
==
"请输入审批意见"
)
sleep
(
2
)
# 审批不通过,输入审批意见
safe_send_keys
((
By
.
XPATH
,
"//textarea[@placeholder='请输入审批意见']"
),
approval_opinion
,
wd
)
sleep
(
1
)
# 点击【驳回】按钮
safe_click
((
By
.
XPATH
,
"//span[contains(text(),'驳回')]"
),
wd
)
sleep
(
2
)
# 获取审批结果
notify_text
=
get_notify_text
(
wd
,
(
By
.
XPATH
,
"//p[contains(@class,'el-message__content')]"
),
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}审批不通过提示信息"
)
INFO
(
f
"审批结果为:{notify_text}"
)
CHECK_POINT
(
"审批不通过提示是否正确"
,
notify_text
==
"审批完成!"
)
STEP
(
7
,
"在我已审批模块查看是否存在审批操作后的会议数据"
)
safe_click
((
By
.
XPATH
,
"//div[@id='tab-third']"
),
wd
)
sleep
(
1
)
# 查询会议
safe_send_keys
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
message_name
,
wd
)
send_keyboard
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
wd
)
sleep
(
2
)
# 查看审批会议的名称
notify_text
=
elment_get_text
((
By
.
CSS_SELECTOR
,
"body > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > div:nth-child(3) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > div:nth-child(1)"
),
wd
)
INFO
(
f
"审批会议名称为:{notify_text}"
)
CHECK_POINT
(
"审批会议名称是否正确"
,
notify_text
==
message_name
)
# 查看审批会议的状态
notify_text
=
elment_get_text
((
By
.
CSS_SELECTOR
,
"body > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > div:nth-child(3) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(7) > div:nth-child(1) > span:nth-child(1)"
),
wd
)
INFO
(
f
"审批会议状态为:{notify_text}"
)
CHECK_POINT
(
"审批会议状态是否正确"
,
notify_text
==
approval_type
)
SELENIUM_LOG_SCREEN
(
wd
,
"50
%
"
,
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}_审批会议名称"
)
if
approval_type
==
'通过'
:
STEP
(
8
,
"在抄送我的模块查看是否存在审批通过的会议数据"
)
safe_click
((
By
.
XPATH
,
"//div[@id='tab-fourth']"
),
wd
)
sleep
(
1
)
# 查询会议
safe_send_keys
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
message_name
,
wd
)
send_keyboard
((
By
.
XPATH
,
"//input[@placeholder='请输入会议名称搜索']"
),
wd
)
sleep
(
2
)
# 查看审批抄送的会议名称
notify_text
=
elment_get_text
((
By
.
CSS_SELECTOR
,
"body > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(4) > div:nth-child(1) > div:nth-child(3) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > div:nth-child(1)"
),
wd
)
INFO
(
f
"审批抄送的会议名称为:{notify_text}"
)
CHECK_POINT
(
"审批抄送的会议名称是否正确"
,
notify_text
==
message_name
)
# 查看审批抄送会议的详细信息
safe_click
((
By
.
CSS_SELECTOR
,
"body > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(4) > div:nth-child(1) > div:nth-child(3) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(7) > div:nth-child(1) > button:nth-child(1) > span:nth-child(1)"
)
,
wd
)
SELENIUM_LOG_SCREEN
(
wd
,
"50
%
"
,
"Meeting_Approval"
,
"Approval_Option"
,
f
"{name}_审批抄送的会议详情"
)
if
name
==
'审批会议操作_001'
:
# 退出当前账号,返回至普通用户账号
INFO
(
"退出当前账号,返回至普通用户账号"
)
safe_click
((
By
.
XPATH
,
"//img[contains(@title,'退出登录')]"
),
wd
)
admin_login
(
"admin@user"
,
"Ubains@4321"
)
\ No newline at end of file
预定系统/cases/会议审批/__pycache__/01审批会议创建.cpython-310.pyc
浏览文件 @
39fd8782
No preview for this file type
预定系统/cases/会议审批/__pycache__/02审批会议操作.cpython-310.pyc
0 → 100644
浏览文件 @
39fd8782
File added
预定系统/测试数据/会议审批/会议审批操作.csv
0 → 100644
浏览文件 @
39fd8782
name,conference_name,message_name,book_start_time,book_end_time,approval_type,approval_opinion,check_text
审批会议操作_001,产研中心会议室,这是审批不通过会议,18:00,18:15,驳回,审批驳回了,会议正在审批中
审批会议操作_002,产研中心会议室,这是审批通过会议,18:00,18:15,通过,通过了,会议正在审批中
\ No newline at end of file
预定系统/测试数据/会议审批/会议审批预约.csv
浏览文件 @
39fd8782
name,conference_name,message_name,book_start_time,book_end_time,check_text
审批会议预约_001,产研中心会议室,这是审批会议,15:00,15:15,会议正在审批中
\ No newline at end of file
审批会议预约_001,产研中心会议室,这是审批会议,18:00,18:15,会议正在审批中
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论