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

排查驱动加载失败问题,问题由浏览器驱动与当前浏览器版本不同导致,已优化代码为自动根据浏览器版本下载对应驱动。补充关于定制化项目的脚本路径,补充工商银行查询停车缴费系统数据的代码。

上级 ab580ca3
import csv
import re
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
import psutil
import logging
from hytest import *
......@@ -26,10 +27,12 @@ def browser_init():
# 添加实验性选项,排除某些命令行开关以减少输出日志
options.add_experimental_option('excludeSwitches', ['enable-Logging'])
# 使用webdriver_manager自动下载并管理chromedriver
service = ChromeService(ChromeDriverManager().install())
# 尝试创建WebDriver实例并执行初始化操作
try:
# 使用配置的选项创建WebDriver(Chrome浏览器)实例
wd = webdriver.Chrome(options=options)
# 创建WebDriver实例
wd = webdriver.Chrome(service=service, options=options)
# 设置隐式等待时间为10秒,以允许元素加载
wd.implicitly_wait(10)
......@@ -42,6 +45,7 @@ def browser_init():
wd.maximize_window()
# 将WebDriver实例存储在全局存储器中,以便后续使用
GSTORE['wd'] = wd
INFO("'----------' 浏览器初始化完成 '----------'")
except Exception as e:
# 捕获并记录初始化过程中的任何异常
logging.error(f"浏览器初始化失败:{e}")
......
......@@ -57,4 +57,7 @@
16. 2024-11-19
- 输出会议室管理模块下的会议室编辑代码处理,增加注释。
- 补充完善当前已完成模块的脚本执行指令。
- 输出会议预定代码,预约主流程已完成。
\ No newline at end of file
- 输出会议预定代码,预约主流程已完成。
17. 2024-11-20
- 排查驱动加载失败问题,问题由浏览器驱动与当前浏览器版本不同导致,已优化代码为自动根据浏览器版本下载对应驱动。
- 补充关于定制化项目的脚本路径,补充工商银行查询停车缴费系统数据的代码。
\ No newline at end of file
......@@ -42,7 +42,7 @@ class Message_Book_000x:
wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
conference_name, message_name, book_type, host_name, message_content, book_start_time, book_end_time, inside_participant_name, outside_participant_name, outside_participant_phone,notification_method, check_text = self.para
conference_name, message_name, book_type, repetitive_cycle, host_name, message_content, book_start_time, book_end_time, inside_participant_name, outside_participant_name, outside_participant_phone,notification_method, check_text = self.para
# 在会议室列表搜索会议室
STEP(1, f"在会议室列表搜索:{conference_name}")
......@@ -75,9 +75,22 @@ class Message_Book_000x:
INFO(f"输入会议名称:{message_name},选择预约类型:{book_type},输入主持人:{host_name},输入会议内容:{message_content},选择会议开始时间:{book_start_time},选择会议结束时间:{book_end_time}")
# 输入会议名称
safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议名称']"),message_name,wd)
# 选择预定类型
safe_click((By.XPATH, f"//span[contains(text(),'{book_type}')]"),wd)
sleep(1)
# 判断预约类型
if book_type == "普通会议":
INFO("预约类型为:普通会议")
# 选择普通会议
safe_click((By.XPATH, f"//span[contains(text(),'{book_type}')]"), wd)
sleep(1)
else:
INFO("预约类型为:周期会议")
# 选择周期会议
safe_click((By.XPATH, f"//span[contains(text(),'{book_type}')]"),wd)
sleep(1)
# 选择重复周期
safe_click((By.XPATH, f"//span[contains(text(),'{repetitive_cycle}')]"),wd)
sleep(1)
# 输入会议主持人
safe_send_keys((By.XPATH, "//input[@placeholder='请输入']"),host_name,wd)
# 输入会议内容
......
......@@ -201,7 +201,7 @@ CSV文件已读取
========= 测试开始 : 20241119_185158 =========
========= 测试开始 : 20241120_103639 =========
......@@ -212,6 +212,7 @@ CSV文件已读取
-- 第 1 步 -- 初始化浏览器
'----------' 正在初始化浏览器 '----------'
'----------' 浏览器初始化完成 '----------'
-- 第 2 步 -- 处理SSL认证
......@@ -230,7 +231,7 @@ CSV文件已读取
>>> cases\会议主流程\会议预约.py
* 会议预约_001 - 2024-11-19 18:52:00
* 会议预约_001 - 2024-11-20 10:36:55
[ case execution steps ]
......@@ -249,97 +250,3 @@ CSV文件已读取
** 检查点 ** 页面标题是否正确 ----> 通过
-- 第 3 步 -- 会议第一步数据填写
输入会议名称:这是会议名称测试,选择预约类型:普通会议,输入主持人:陈泽键,输入会议内容:这是会议内容哈哈,选择会议开始时间:19:00,选择会议结束时间:20:15
时间差为:time_diff_minutes
开始时间与结束时间不相等,选择时间块:19:00,20:15
时间差大于最大预约时长1小时,选择【超出预约时长】
picture imgs/Message_Manage/Message_Book/会议预约_001_超出预约时长20241119185211109208.png
提示信息为:最大预定时间 1 小时
** 检查点 ** 超出预约时长提示是否正确 ----> 通过
不选时间点击【下一步】查看提示信息
picture imgs/Message_Manage/Message_Book/会议预约_001请选择会议时间提示信息20241119185214311471.png
提示信息为:请选择会议时间
** 检查点 ** 未选时间提示是否正确 ----> 通过
重新选择结束时间为:19:45
-- 第 4 步 -- 会议第二步数据填写
选择内部参会人:admin@CZJ
已选择参会人:admin@CZJ
** 检查点 ** 内部参会人选择是否正确 ----> 通过
输入外部参会人名称:陈泽坚,外部参会人号码:17319004674
检查弹窗标题是否正确
弹窗标题为:添加外部参会人员
** 检查点 ** 弹窗标题是否正确 ----> 通过
picture imgs/Message_Manage/Message_Book/会议预约_001_添加外部参会人提示信息20241119185223107527.png
提示信息为:添加成功
** 检查点 ** 提示信息是否正确 ----> 通过
-- 第 5 步 -- 会议第三步数据填写
检查页面标题是否正确
页面标题为:消息提醒
** 检查点 ** 页面标题是否正确 ----> 通过
选择通知方式:短信
-- 第 6 步 -- 点击【确定】按钮
-- 第 7 步 -- 检查提示会议信息是否正确
输入会议名称:这是会议名称测试,输入会议内容:这是会议内容哈哈
** 检查点 ** 提示信息是否正确 ----> 通过
-- 第 8 步 -- 点击【确定】按钮
picture imgs/Message_Manage/Message_Book/会议预约_001_预定成功提示信息20241119185233551804.png
预定成功提示信息为:预定成功
** 检查点 ** 预定成功提示是否正确 ----> 通过
PASS
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241119_185235 =========
耗时 : 37.617 秒
预备执行用例数量 : 1
实际执行用例数量 : 1
通过 : 1
失败 : 0
异常 : 0
套件初始化失败 : 0
套件清除 失败 : 0
用例初始化失败 : 0
用例清除 失败 : 0
......@@ -5,295 +5,3 @@
== cases\__st__.py
== cases\会议主流程\__st__.py
== cases\会议主流程\会议预约.py
CSV文件已读取
== cases\会议室管理\会议室管理\__st__.py
== cases\会议室管理\会议室管理\会议室删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\__st__.py
== cases\会议室管理\功能管理\功能删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\__st__.py
== cases\会议室管理\区域管理\区域删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\区域新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\区域编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\测试\test.py
** no cases in this file, skip it.
== cases\登录模块\账号密码登录测试.py
CSV文件已读取
** no cases in this file , skip it.
== cases\系统管理\__st__.py
== cases\系统管理\系统设置.py
** no cases in this file , skip it.
== cases\设备管理\安卓信息.py
** no cases in this file, skip it.
== cases\设备管理\毫米波雷达.py
** no cases in this file, skip it.
== cases\账号管理\用户管理\__st__.py
== cases\账号管理\用户管理\主流程.py
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户修改密码.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户状态设置.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\__st__.py
== cases\账号管理\部门管理\主流程.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门编辑.py
CSV文件已读取
** no cases in this file , skip it.
=== [ 执行测试用例 ] ===
预备执行用例数量 : 1
========= 测试开始 : 20241119_185130 =========
>>> cases\
[ suite setup ] cases\
-- 第 1 步 -- 初始化浏览器
'----------' 正在初始化浏览器 '----------'
-- 第 2 步 -- 处理SSL认证
'----------' 正在处理SSL证书警告 '----------'
'----------' SSL证书警告处理完成 '----------'
>>> cases\会议主流程\
[ suite setup ] cases\会议主流程\
输入用户名:admin@ZDH
输入密码:Ubains@4321
输入验证码:csba
点击登录按钮
>>> cases\会议主流程\会议预约.py
* 会议预约_001 - 2024-11-19 18:51:33
[ case execution steps ]
-- 第 1 步 -- 在会议室列表搜索:产研中心会议室
检查搜索结果
搜索结果为:产研中心会议室
** 检查点 ** 搜索结果是否正确 ----> 通过
-- 第 2 步 -- 点击【会议预定】按钮
检查页面标题是否正确
页面标题为:会议预定
** 检查点 ** 页面标题是否正确 ----> 通过
-- 第 3 步 -- 会议第一步数据填写
输入会议名称:这是会议名称测试,选择预约类型:普通会议,输入主持人:陈泽键,输入会议内容:这是会议内容哈哈,选择会议开始时间:19:00,选择会议结束时间:20:15
时间差为:time_diff_minutes
开始时间与结束时间不相等,选择时间块:19:00,20:15
时间差大于最大预约时长1小时,选择【超出预约时长】
picture imgs/Message_Manage/Message_Book/会议预约_001_超出预约时长20241119185143408978.png
提示信息为:该时间段已有会议,请重新选择
** 检查点 ** 超出预约时长提示是否正确 ----> !! 不通过!!
FAIL
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\会议主流程\会议预约.py", line 113, in teststeps
CHECK_POINT("超出预约时长提示是否正确", "最大预定时间 1 小时" in notify_text)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 76, in CHECK_POINT
raise AssertionError()
AssertionError
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241119_185145 =========
耗时 : 15.405 秒
预备执行用例数量 : 1
实际执行用例数量 : 1
通过 : 0
失败 : 1
异常 : 0
套件初始化失败 : 0
套件清除 失败 : 0
用例初始化失败 : 0
用例清除 失败 : 0
......@@ -91,6 +91,11 @@ CSV文件已读取
== cases\测试\test.py
** no cases in this file, skip it.
== cases\测试\工商银行项目-停车系统预约列表获取.py
** no cases in this file, skip it.
== cases\登录模块\账号密码登录测试.py
......@@ -201,7 +206,7 @@ CSV文件已读取
========= 测试开始 : 20241119_184914 =========
========= 测试开始 : 20241120_102706 =========
......@@ -216,134 +221,39 @@ CSV文件已读取
-- 第 2 步 -- 处理SSL认证
'----------' 正在处理SSL证书警告 '----------'
'----------' SSL证书警告处理完成 '----------'
>>> cases\会议主流程\
[ suite setup ] cases\会议主流程\
输入用户名:admin@ZDH
输入密码:Ubains@4321
输入验证码:csba
点击登录按钮
>>> cases\会议主流程\会议预约.py
* 会议预约_001 - 2024-11-19 18:49:17
[ case execution steps ]
-- 第 1 步 -- 在会议室列表搜索:产研中心会议室
检查搜索结果
搜索结果为:产研中心会议室
** 检查点 ** 搜索结果是否正确 ----> 通过
-- 第 2 步 -- 点击【会议预定】按钮
检查页面标题是否正确
页面标题为:会议预定
** 检查点 ** 页面标题是否正确 ----> 通过
-- 第 3 步 -- 会议第一步数据填写
输入会议名称:这是会议名称测试,选择预约类型:普通会议,输入主持人:陈泽键,输入会议内容:这是会议内容哈哈,选择会议开始时间:19:00,选择会议结束时间:20:15
时间差为:time_diff_minutes
开始时间与结束时间不相等,选择时间块:19:00,20:15
时间差大于最大预约时长1小时,选择【超出预约时长】
picture imgs/Message_Manage/Message_Book/会议预约_001_超出预约时长20241119184927257946.png
提示信息为:最大预定时间 1 小时
** 检查点 ** 超出预约时长提示是否正确 ----> 通过
不选时间点击【下一步】查看提示信息
picture imgs/Message_Manage/Message_Book/会议预约_001请选择会议时间提示信息20241119184930444218.png
提示信息为:请选择会议时间
** 检查点 ** 未选时间提示是否正确 ----> 通过
重新选择结束时间为:19:45
-- 第 4 步 -- 会议第二步数据填写
选择内部参会人:admin@CZJ
已选择参会人:admin@CZJ
** 检查点 ** 内部参会人选择是否正确 ----> 通过
输入外部参会人名称:陈泽坚,外部参会人号码:17319004674
检查弹窗标题是否正确
弹窗标题为:添加外部参会人员
** 检查点 ** 弹窗标题是否正确 ----> 通过
picture imgs/Message_Manage/Message_Book/会议预约_001_添加外部参会人提示信息20241119184939280444.png
提示信息为:添加成功
** 检查点 ** 提示信息是否正确 ----> 通过
-- 第 5 步 -- 会议第三步数据填写
检查页面标题是否正确
页面标题为:消息提醒
** 检查点 ** 页面标题是否正确 ----> 通过
选择通知方式:短信
-- 第 6 步 -- 点击【确定】按钮
-- 第 7 步 -- 检查提示会议信息是否正确
输入会议名称:这是会议名称测试,输入会议内容:这是会议内容哈哈
** 检查点 ** 提示信息是否正确 ----> 通过
-- 第 8 步 -- 点击【确定】按钮
picture imgs/Message_Manage/Message_Book/会议预约_001_预定成功提示信息20241119184951534297.png
预定成功提示信息为:预定成功
** 检查点 ** 预定成功提示是否正确 ----> !! 不通过!!
FAIL
suite setup fail | 'NoneType' object has no attribute 'find_element'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\会议主流程\会议预约.py", line 215, in teststeps
CHECK_POINT("预定成功提示是否正确", notify_text == check_text)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 76, in CHECK_POINT
raise AssertionError()
AssertionError
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\__st__.py", line 22, in suite_setup
handle_ssl_warning()
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\Base\base.py", line 64, in handle_ssl_warning
safe_click((By.XPATH, '//*[@id="details-button"]'), wd)
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\Base\base.py", line 169, in safe_click
element = WebDriverWait(wd, 20).until(EC.visibility_of_element_located(element_locator))
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\support\wait.py", line 96, in until
value = method(self._driver)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 156, in _predicate
return _element_if_visible(driver.find_element(*locator))
AttributeError: 'NoneType' object has no attribute 'find_element'
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241119_184953 =========
========= 测试结束 : 20241120_102714 =========
耗时 : 39.730
耗时 : 7.684
预备执行用例数量 : 1
实际执行用例数量 : 1
实际执行用例数量 : 0
通过 : 0
失败 : 1
失败 : 0
异常 : 0
套件初始化失败 : 0
套件初始化失败 : 1
套件清除 失败 : 0
......
name,conference_name,message_name,book_type,host_name,message_content,book_start_time,book_end_time,inside_participant_name,outside_participant_name,outside_participant_phone,notification_method,check_text
会议预约_001,产研中心会议室,这是会议名称测试,普通会议,陈泽键,这是会议内容哈哈,19:00,20:15,admin@CZJ,陈泽坚,17319004674,短信,预定成功
\ No newline at end of file
name,conference_name,message_name,book_type,repetitive_cycle,host_name,message_content,book_start_time,book_end_time,inside_participant_name,outside_participant_name,outside_participant_phone,notification_method,check_text
会议预约_001,产研中心会议室,这是会议名称测试,普通会议,每天,陈泽键,这是会议内容哈哈,19:00,20:15,admin@CZJ,陈泽坚,17319004674,短信,预定成功
\ No newline at end of file
import requests
import json
import time
from hashlib import sha1
from urllib.parse import urlencode
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def reservation_paged_list():
"""
获取预约分页列表的数据。
本函数通过发送POST请求到指定的URL,获取预约分页列表的数据。
它首先构造请求所需的URL、数据参数和签名,然后发送请求并处理响应。
"""
# 定义API的URL
url = "https://pmsapi.demo.dasiot.cn/v4/api/reservation/reservationPagedList"
# 获取当前时间戳,用于请求签名
timestamp = int(time.time() * 1000)
# 定义请求体的数据参数
data_map = {
"pageIndex": 1,
"pageSize": 1000
}
# 创建签名所用的字典,包含数据参数和时间戳
sign_map = data_map.copy()
sign_map["timestamp"] = timestamp
# 拼接sign参数
data_str = urlencode(sign_map).lower()
string_sign_temp = f"{data_str}&key=2cc2e7-b027-41bb-af4b-f6"
# 对stringSignTemp进行SHA-1运算并转为大写,生成最终的签名
sign = sha1(string_sign_temp.encode()).hexdigest().upper()
# 定义请求头,包含时间戳和签名
headers = {
"timestamp": str(timestamp),
"sign": sign
}
# 记录日志,包括签名、请求路径、请求头和请求体参数
logging.info(f"获取sign:{sign}")
logging.info(f"分页查询预约列表请求路径:{url}")
logging.info(f"分页查询预约列表请求头:{headers}")
logging.info(f"分页查询预约列表请求体参数:{data_map}")
try:
# 发送POST请求
response = requests.post(url, json=data_map, headers=headers)
# 检查响应状态码,如果状态码表示请求有错误,则抛出异常
response.raise_for_status()
# 获取响应体内容
body_str = response.text
# 记录响应日志
logging.info(f"分页查询预约列表返回参数:{body_str}")
except requests.exceptions.RequestException as e:
# 如果请求失败,记录错误日志
logging.error(f"请求失败:{e}")
if __name__ == "__main__":
reservation_paged_list()
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论