最近一个新的视频项目上线,上线后发现有部分视频在切片播放时,加载报错,需要测试人员看看都有哪些视频存在加载问题,但视频数量较多,手工一个一个点指定有点累挺,遂想起了selenium,着手写了一个脚本代替手动执行
分析:
首先分析获取视频播放地址
发现地址都是https://www.xxx.com/video/d-前缀后面拼接视频ID,数据库中查找所有视频ID,拼接成播放地址,并整理成.xlsx文件
调用openpyxl库打开xlsx,读出地址
然后写selenium脚本
遍历文件,找到url,调用selenium,启动webdriver访问浏览器等待加载成功
加载成功后判断页面是否有播放按钮,若是没有,执行截图操作,保存到err_image文件夹中,打印错误地址
运行结束后可在文件夹中查看错误截图
详细代码如下:
import os
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from openpyxl import load_workbook
'''
当前脚本是在浏览器中打开aaa.xlsx文件中的视频地址,进行访问,等待加载完成后查找视频播放按钮
如果找不到就截图当前页面存放到err_image文件夹中,并打印错误地址
'''
class Vedio(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(1) # 隐式等待
cls.driver.maximize_window()
def testImage(self):
excel_file_path = 'aaa.xlsx'
# 读取Excel文件
workbook = load_workbook(excel_file_path)
sheet = workbook.active
# 设置截图保存路径
image_folder = 'err_image'
if not os.path.exists(image_folder):
os.makedirs(image_folder)
# 遍历Excel表格中的链接地址
row_offset = 1 # 起始行
for row in sheet.iter_rows(min_row=row_offset, values_only=True):
link = row[0] # 链接在第一列,根据实际情况调整列索引
print(link)
if link: # 确保链接不为空
try:
# 打开链接
self.driver.get(link)
# 设置显式等待时间
wait_time = 3 # 秒
try:
# 等待特定div元素出现
WebDriverWait(self.driver, wait_time).until(
EC.presence_of_element_located((By.CLASS_NAME, 'outter'))
)
# 如果找到了元素,可以选择不截图或者执行其他操作
# 这里我们找到元素后不需要截图,直接继续循环
continue # 跳过截图部分
except TimeoutException:
# 如果超时未找到元素,则进行截图
print("Element not found, taking screenshot.")
# 截图并保存
screenshot_path = os.path.join(image_folder, f"{int(time.time())}.png")
self.driver.save_screenshot(screenshot_path)
print(f"Screenshot saved for link: {link}")
except Exception as e:
print(f"Error accessing link {link}: {e}")
@classmethod
def tearDownClass(cls) -> None:
# time.sleep(2)
cls.driver.quit() # 调用quit方法
if name == 'main':
unittest.main()
个人观点,仅供参考
版权归原作者 尘心软测技术 所有, 如有侵权,请联系我们删除。