SoftwareTest
一.为什么要进行截屏操作
截屏:就是把当前屏幕上浏览器窗口内的网页或某个特定的网页区域截图保存为图片的过程。
为什么要截屏?简单地说,主要是为了保留证据。
截图帮助我们了解应用的流程,并检查它是否有相应的行为。
有助于执行交叉浏览测试,因为用户需要查看执行报告。
捕获失败测试的屏幕截屏,方便复现Bug。
无头浏览器跟踪执行。
二.何时要截屏
- 截屏应用场景:跟踪脚本运行后网页状态,或运行脚本出现错误或失败时,进行截屏操作。
- 记录操作步骤执行后界面状态
- 断言失败
- 定位元素错误
- 弹出框没有出现
三.怎么截屏
编号 | 功能 | 语法 | 参数 |
---|---|---|---|
1 | 对当前浏览器窗口内的网页进行截屏 | driver.save_screenshot(filename) | filename为图片完整名称 |
2 | 对元素截屏 | 页面元素对象.screenshot(filename) | filename为图片完整名称 |
- 注意:图片完整名称必须包含路径和后缀,只支持png格式。
- 既支持绝对路径,也支持相对路径。
- 示例:
- driver.save_screenshot(r"D:\a.png")
- driver.find_element(By.ID,"search").screenshot(r".\b.png")
四.用Pillow进行消息框截图 Selenium截屏功能限制:默认的截屏方法无法对消息框截图。 消息框截图:Pillow库是一个Python的第三方图像处理库。
- 安装pillow:在pycharm解释器里安装pillow
- 导入模块from PIL import ImageGrab ImageGrab模块用于将当前屏幕的内容或者剪贴板上的内容拷贝到PIL图像内存
- Image=ImageGrab.grab()
- Image.save(文件名) 文件名必须包含路径和后缀,一般用png格式。
1. 浏览器窗口最大化
2. 打开ECShop前台首页
3. 对整个浏览器窗口截屏
4. 对网页的右侧商品信息区,做区域截屏
5. 设置窗口尺寸大小为宽2000px高3000px
6. 对整个浏览器窗口截屏
import os
p=r"c:\pp"
if not os.path.exists(p):
os.mkdir(p)
#driver.save_screenshot(p+"\a1.png")#3. 对整个浏览器窗口截屏
driver.save_screenshot(os.path.join(p,"al.png"))
ele=driver.find_element(By.CLASS_NAME,"AreaR")
ele.screenshot(os.path.join(p,"b1.png"))#4. 对网页的右侧商品信息区,做区域截屏
driver.set_window_size(2000,3000)
driver.save_screenshot(os.path.join(p,"c1.png"))#6. 对放大的整个浏览器窗口截屏
1. 打开ECShop后台页
2. 输入正确的用户名、密码、验证码,点击“进入管理中心”,等待5秒,对整个浏览器窗口截屏
3. 切换上方头部区,对整个浏览器窗口截屏
4. 定位上方头部区的body元素,对该元素进行截屏
5. 点击“计算器”,等待3秒,对整个浏览器窗口截屏
6. 切换到计算器窗口,对整个浏览器窗口截屏
if not os.path.exists(p):
os.mkdir(p)
driver.switch_to.frame("header-frame")
driver.save_screenshot(os.path.join(p,"02.png"))#切换上方头部区,对整个浏览器窗口截屏
ele=driver.find_element(By.XPATH,'//body')#在header-frame子网页中只有一个body,可以直接用body定位
ele.screenshot(os.path.join(p,"03.png"))#定位上方头部区的body元素,对该元素进行截屏
driver.find_element(By.LINK_TEXT,"计算器").click()
driver.save_screenshot(os.path.join(p,"04.png"))#没有切换窗口,还是对当前窗口截屏
Lst=driver.window_handles
driver.switch_to.window(lst[-1])
driver.save_screenshot(os.path.join(p, "05.png")#对计算器窗口截屏
1. 打开ECShop后台页
2. 点击“进入管理中心”,等待3秒
3. 尝试对整个浏览器窗口截屏
4. 切换到弹出框,等待3秒
5. 尝试对整个浏览器窗口截屏
6. 点击 “确定”,等待3秒
7. 尝试对整个浏览器窗口截屏
8. 使用pillow截屏
from PIL import ImageGrab
#driver.save_screenshot(os.path.join(p,"p1.png"))
mes=driver.switch_to.alert
#driver.save_screenshot(os.path.join(p,"p2.png"))
mes.accept()
#driver.save_screenshot(os.path.join(p,"p3.png"))
#都失败
Image=ImageGrab.grab()
Image.save(文件名)
- 小结
- 对浏览器窗口截屏:
- 如果当前屏幕有滚动条,只截取当前屏幕上显示的部分,不截取完整网页,需要先把浏览器窗口尺寸修改为比网页尺寸大,然后再截屏就可以截取完整网页。
- 有多frame的情况下,不论是否切换frame,都不影响对整个浏览器窗口截屏。
- 多浏览器窗口情况下,只对当前一个窗口截屏
- 对页面元素截屏:
- 不论窗口多大,都可以针对页面元素截取该元素尺寸区间的完整范围
- 有多frame的情况下,切换frame后对body进行元素定位,再截图可以截取这一个子网页的内容。
- 指令:
driver.save_screenshot(r"D:\a.png")
对整个浏览器网页截屏driver.find_element(By.ID,"search").screenshot(r".\b.png")
-》对元素截屏- 消息框情况下对整个浏览器网页截屏
from PIL import ImageGrab
Image=ImageGrab.grab()
Image.save(文件名)
- 对浏览器窗口截屏:
上次更新: 2025/5/2 14:40:28