餐饮网站建设背景阿里巴巴国际站运营培训
由于UI层自动化的不稳定性,经常会遇到执行中断或用例失败的问题,以下是一些常见的措施。
1.详细的日志
 2.定位出错时截图
 3.Pytest的缓存机制(可以记录成功了哪些失败了哪些)
 4.自动重试机制(如pytest-rerunfailures)
 5.用例录像
用例录像是最直观的一种方式,可以查看到实时的操作情况。很多云平台如Saucelabs等都提供了用例录像的功能。
 然而很遗憾selenium本身没有这种能力。除了借助三方软件如ffmpeg同步录屏外,另外一种实现方法是另外启动一个线程,不断截图,最后将图片拼接成git。
 操作方法如下。
实时截图
1.编写一个循环截图函数shot
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('简书 韩志超')
 dr.find_element('id', 'su').click()
 time.sleep(1)
 dr.get('https://www.qq.com')
 dr.back()
 time.sleep(2)
 dr.quit()
3.图片拼接成gif
需要安装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('简书 韩志超')
 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
  
