由于UI层自动化的不稳定性,经常会遇到执行中断或用例失败的问题,以下是一些常见的措施。
用例录像是最直观的一种方式,可以查看到实时的操作情况。很多云平台如Saucelabs等都提供了用例录像的功能。
然而很遗憾selenium本身没有这种能力。除了借助三方软件如ffmpeg同步录屏外,另外一种实现方法是另外启动一个线程,不断截图,最后将图片拼接成git。
操作方法如下。
def shot(dr):
i = 0
while True:
img_file = os.path.join(img_dir, f'{i}.png')
try:
dr.save_screenshot(img_file)
except:
return
i += 1
由于webdriver接口执行截图命令的速度限制,每一轮截图无需再sleep。
2. 操作web时,启动一个线程
img_dir = 'img' # 临时图片目录
dr = webdriver.Chrome()
t = threading.Thread(target=shot, args=(dr, img_dir)) # 新建线程
t.start() # 启动截图线程
dr.get('https://www.baidu.com')
dr.find_element('id', 'kw').send_keys('csdn测试八戒')
dr.find_element('id', 'su').click()
time.sleep(1)
dr.get('https://www.qq.com')
dr.back()
time.sleep(2)
dr.quit()
需要安装pillow:
pip install pillow
img_list = os.listdir(img_dir) # 列出目录所有图片
img_list.sort(key=lambda x: int(x[:-4])) # 排序
first_img = Image.open(os.path.join(img_dir, img_list[0])) # 第一张图片对象
else_imgs = [Image.open(os.path.join(img_dir, img)) for img in img_list[1:]] # 剩余图片对象
first_img.save("record.gif", append_images=else_imgs,
duration=300,
save_all=True) # 拼接保存
from selenium import webdriver
import threading
import os
import time
from PIL import Image
def clear_dir(path):
"""创建或清空目录"""
if not os.path.isdir(path):
os.mkdir(path) # 创建目录
else: # 清空目录
[os.remove(os.path.join(path, file_name)) for file_name in os.listdir(path)]
def shot(dr, img_dir):
"""循环截图函数"""
i = 0
clear_dir(img_dir) # 清空目录
while True:
img_file = os.path.join(img_dir, f'{i}.png')
try:
dr.save_screenshot(img_file)
except:
return
i += 1
# Selenium操作
img_dir = 'img' # 临时图片目录
dr = webdriver.Chrome()
t = threading.Thread(target=shot, args=(dr, img_dir)) # 新建线程
t.start() # 启动截图线程
dr.get('https://www.baidu.com')
dr.find_element('id', 'kw').send_keys('csdn测试八戒')
dr.find_element('id', 'su').click()
time.sleep(1)
dr.get('https://www.qq.com')
dr.back()
time.sleep(2)
dr.quit()
# 图片拼接成gif
img_list = os.listdir(img_dir) # 列出目录所有图片
img_list.sort(key=lambda x: int(x[:-4])) # 排序
first_img = Image.open(os.path.join(img_dir, img_list[0])) # 第一张图片对象
else_imgs = [Image.open(os.path.join(img_dir, img)) for img in img_list[1:]] # 剩余图片对象
first_img.save("record.gif", append_images=else_imgs,
duration=300, # 每张图片的过过渡时间
save_all=True) # 拼接保存,如果想要循环播放可以加上loop=0
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,