为什么要截屏
- 截屏:就是把当前屏幕上浏览器窗口内的网页或某个特定的网页区域截图保存为图片的过程
- 为什么要截屏?简单地说,主要是为了保留证据。
- 截图帮助我们了解应用的流程,并检查它是否有相应的行为
- 有助于执行交叉浏览测试,因为用户需要查看执行报告
- 捕获失败测试的屏幕截图,方便复现Bug
何时要截屏
- 截屏应用场景:跟踪脚本运行后网页状态,或运行脚本出现错误或失败时,进行截屏操作
- 记录操作步骤执行后界面状态
- 断言失败
- 定位元素错误
- 弹出框没有出现
selenium截屏
- selenium中提供截屏操作方法
- 注意:图片完整名称必须包含路径和后缀,只支持png格式。
- 路径支持相对路径和绝对路径
driver.save_screenshot(r'D:\a.png')
driver.find_element(By.ID,"search").screenshot(r'.\b.png')
"""
浏览器窗口最大化
打开ECshop前台首页
对整个浏览器窗口截屏
对网页的右侧商品信息区,做区域截屏
设置窗口尺寸大小为宽2000px高3000px
对整个浏览器窗口截屏
"""
import os
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox() # 启动浏览器
driver.maximize_window() # 设置浏览器为最大化
print(driver.get_window_size()) # 打印当前浏览器尺寸
driver.get('http://localhost/upload/index.php') # 打开前台首页
a = r'D:\screenshots' # 定义一个变量存储目录地址
if not os.path.exists(a): # 如果目录不存在
os.mkdir(a) # 新建文件夹
driver.save_screenshot(r'D:\screenshots\a1.png')
driver.find_element(By.CLASS_NAME,"AreaR").screenshot(r'D:\screenshots\a2.png')
driver.set_window_size(2000,3000)
driver.save_screenshot(r'D:\screenshots\a3.png')
driver.quit()
对浏览器窗口截屏
- 不截浏览器标题栏、地址栏、系统任务栏、只截浏览器的网页部分
- 如果当前屏幕有滚动条,只截取当前屏幕上显示的部分,不截取完整网页,需要先把浏览器窗口尺寸修改为比网页尺寸大,然后再截屏就可以截取完整网页
- 有多frame的情况下,不论是否切换frame,都不影响对整个浏览器窗口截屏
- 多个浏览器窗口情况下,只对当前一个窗口截屏
对页面元素截屏
- 不论窗口多大,都可以针对页面元素截取该元素尺寸区间的完整范围
- 有多个frame的情况下,切换到frame后对body进行元素定位,再截图可以截取一个子网页的内容
消息框截图
-
selenium截屏功能限制:默认的截屏方法无法对消息框截图。
-
消息框截图:Pillow库是一个Python的第三方的图像处理库。
- 安装Pillow库
pip install pillow
- 导入模块
from PIL import imageGrab # imageGrab 模块用于将当前屏幕的内容或者剪切板上的内容拷贝到PIL图像内存
- 实例化对象
image = imageGrab.grab()
- 保存截图
image.save(文件名) # 文件名必须包含路径和后缀,一般用png格式