由于UI层自动化的不稳定性,经常会遇到执行中断或用例失败的问题,以下是一些常见的措施。

详细的日志

定位出错时截图

Pytest的缓存机制(可以记录成功了哪些失败了哪些)

自动重试机制(如pytest-rerunfailures)

用例录像

用例录像是最直观的一种方式,可以查看到实时的操作情况。很多云平台如Saucelabs等都提供了用例录像的功能。

然而很遗憾selenium本身没有这种能力。除了借助三方软件如ffmpeg同步录屏外,另外一种实现方法是另外启动一个线程,不断截图,最后将图片拼接成git。

操作方法如下。

实时截图

编写一个循环截图函数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。

操作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()

图片拼接成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

最终效果--有点像幻灯片

image

selenium录屏python_Selenium实现录屏的一种方法相关推荐

  1. 电视android怎么解决,安卓手机怎么投屏到电视?用这3种方法可完美解决

    安卓手机怎么投屏到电视?用这3种方法可完美解决 2021年04月01日 17:47作者:网络编辑:王动 分享 有些用户觉得智能电视能看的资源太少,想把安卓手机里的资源投屏到电视上看,该怎么办呢?下面简 ...

  2. 小屏幕android电视,手机屏幕还能投屏到电视?教你4种方法,1秒钟小屏变大屏

    手机屏幕太小,尤其是看大片的时候,总有种意犹未尽的感觉,那么今天就来教大家手机怎样一键从小屏变成大屏,在家也能享受影院级的观赏感. 下面为大家准备了2种方法,一起来看看吧! 1.手机自带投屏功能 安卓 ...

  3. 电脑蓝屏代码0x00000050怎么解决?3种方法快速解决

    电脑蓝屏代码0x00000050是Windows系统中常见的一个蓝屏错误,通常是由于操作系统或硬件设备驱动程序的问题导致的.可使用驱动人生推荐的以下3种方法解决. 一.重装驱动程序 电脑蓝屏代码0x0 ...

  4. python等待网页加载_Python Selenium等待(waits)页面加载完成的三种方法

    从网上load的: 网页常常会因为网络原因,程序问题等等导致打开网页慢,一直在那里打圈圈. 出现这种情况时网页里的很多元素就没有加载完成,如果你刚好要定位的元素没有加载完,这时定位的话程序就会抛出异常 ...

  5. 安卓投屏大师_还不会把手机投屏到电脑?教你四种方法,柯达带你直播玩的更溜...

    现在很多人都喜欢把手机的内容投屏到电脑上,毕竟手机小小的屏幕看着确实不够满足.特别是一些喜欢做直播的朋友,就会需要把手机投屏到电脑上来完成手游直播.可是却有很多朋友表示不知道如何操作才能够实现,今天小 ...

  6. 背景随意更换,同时改变多个竖屏短视频背景图片的两种方法

    怎么在电脑上批量剪辑多个短视频呢?比如改变多个竖屏短视频的背景图,下面可以随小编一起用视频剪辑高手来试试. 一.直接添加上下图片 运行视频剪辑高手,在"批量剪辑视频"功能上,单击& ...

  7. 电脑为啥老是黑屏?只因为你不知道这9种方法

    1.检查主机电源,工作是否正常. 首先,通过杳看主机机箱面板电源指示灯是否亮,及电源风扇是否转动来确定主机系统有没有得到电源供应.其次,用万用表检查外部电压是否符合要求,电压过高或过低都可能引起主机电 ...

  8. 批量剪辑教程,将竖屏视频剪辑为横屏的四种方法

    我们在刷抖音时,看到大部分视频都是竖屏展示的,但是有些视频平台,在上传视频时,需要将竖屏的视频改为横屏的,今天小编就用视频剪辑高手中的四种功能,批量将多个竖屏剪辑为横屏视频. 方法一:顺时旋转90度 ...

  9. linux kill进程后黑屏,Linux中Kill进程的N种方法

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal smx ...

最新文章

  1. 【Windows】清除win10开始菜单中失效打程序标签
  2. 【转载】mysql常用函数汇总
  3. 基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计
  4. 迁移学习之MobileNet(88层)和MobileNetV2(88层)
  5. SAP WM高阶之上架策略B (Bulk Storage)
  6. zh-cn 与 zh-hans 是什么关系、有什么区别
  7. SAP评估控制 Valuation control
  8. SAP SD基本业务总结
  9. Ocelot Api网关教程(9)- QoS
  10. 前端学习(1164):剩余参数02
  11. bash/shell编程学习(2)
  12. Logistic分类函数
  13. Android 系统(74)--Android重启原因分析
  14. 表-创建表-表的转换函数
  15. 基于jQuery UI CSS Framework开发Widget
  16. 微信公众号调用扫一扫,使扫一扫支持扫PDF417格式的条码
  17. iOS 蓝牙扫描设备注意 2021-10-12
  18. 测试驱动开发(TDD)开发思路
  19. GD32创建工程与启动文件选择
  20. TexMacs环境变量

热门文章

  1. 【沙滩爱心桌面主题】_9.4
  2. 在MingW上更新的G ++获取大量错误消息(G++ updated on MingW gets massive error messages)
  3. Yolov5身份证检测——模型训练
  4. VS中更改exe程序图标
  5. 初识ELK(日志系统)
  6. Python数据分析-pandas-数据处理
  7. [转]将106键盘布局(日式键盘布局)改为101键盘布局(美式键盘布局)(
  8. 可以带着游泳的耳机、游泳听歌的运动耳机推荐
  9. 生命是脆弱的-人生最大的挫折
  10. 苏轼:醉笑陪君三万场 不诉离殇