《刚刚问世》系列初窥篇-Java+Playwright自动化测试-38-屏幕截图利器-上篇(详细教程)

1.简介

在日常的软件开发和测试的工作中,屏幕截图是一种常用、常见的工具,用于记录应用程序或者网页的状态、错误信息等。Playwright 提供了一种简单而强大的方式来实现屏幕截图,帮助开发人员和测试人员轻松捕获和分析应用程序的界面。本文将介绍如何使用 Playwright 实现屏幕截图。而且这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法。想必看过python+playwright系列的文章已经有了自己答案,没有看过的宏哥这里告诉你答案当然是:肯定有的。宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享,差点遗漏了。那么在这个契机下就把它插队分享和讲解一下。Playwright提供了一个截屏的API: page.screenshot(); 。使用该API,只需要指定截图的图片的保存路径及文件名即可。如果仅指定文件名,默认保存在当前目录。

2.截图语法

截图介绍官方API的文档地址:playwright.dev/java/docs/s...

2.1截图参数

bash 复制代码
screenshot方法可以进行截图,参数如下:

timeout:以毫秒为单位的超时时间,0为禁用超时

path:设置截图的路径

type:图片类型,默认jpg

quality:像素,不适用于jpg

omit_background: 隐藏默认白色背景,并允许捕获具有透明度的屏幕截图。不适用于"jpeg"图像。

full_page:如果为true,则获取完整可滚动页面的屏幕截图,而不是当前可见的视口。默认为

`假`。

clip:指定结果图像剪裁的对象clip={'x': 10 , 'y': 10, 'width': 10, 'height': 10}

3.快速截图(截取当前屏幕)

playwright除了可以截取当前屏幕,还可以截长图,也可以对某个元素截图,是不是炒鸡方便。在 Playwright 中,要实现屏幕截图非常简单。你只需要调用 page 对象的 screenshot() 方法,并指定保存截图的文件路径即可。这是捕获屏幕截图并将其保存到文件中的快速截图(如果仅仅截取当前屏幕(浏览器)上能看到的部分)语法如下:

less 复制代码
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("screenshot.png")));

3.1实战示例

宏哥这里以访问百度首页,然后进行截图,给小伙伴或者同学们来快速演示一下。

3.1.1代码设计

3.1.2参考代码

java 复制代码
package com.bjhg.playwright;

import java.nio.file.Paths;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥(微信搜索,关注宏哥,提前解锁更多测试干货)
 * 
 * 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-38-屏幕截图利器-上篇(详细教程)
 *
 * 2025年09月05日
 */

public class Test_Screenshots {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try (Playwright playwright = Playwright.create()) {
            //1.使用chromium浏览器,# 浏览器配置,设置以GUI模式启动Chrome浏览器(要查看浏览器UI,在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度。
            Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(300));
            //2.创建context
            BrowserContext context = browser.newContext();
            //创建page
            Page page = context.newPage();
            page.screenshot();
            //3.浏览器访问demo
            page.navigate("https://www.baidu.com");
            Thread.sleep(300);
            //4.屏幕截图
            page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("screenshot.png")));
            Thread.sleep(1000);
            System.out.println("Test Pass");
            //5.关闭page
            page.close();
            //6.关闭browser
            browser.close();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

3.1.3运行代码

1.运行代码,右键Run As->Java Application,就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作(访问百度首页)。如下图所示:

4.整页截图(截取整个页面)

有时候,页面可能会比较长,一个屏幕无法全部展示出来。如果想截取整个页面,怎么办呢?设置full_page=True 参数 screenshot 是一个完整的可滚动页面的屏幕截图,给人一种错觉:就好像你有一个非常高的屏幕并且页面可以完全容纳下它。

playwright屏幕截图语法如下:

less 复制代码
page.screenshot(new Page.ScreenshotOptions()
  .setPath(Paths.get("screenshot.png"))
  .setFullPage(true));

4.1实战示例

宏哥这里以访问宏哥博客园的首页为例,然后进行截图,给小伙伴或者同学们来讲解演示一下。其实很简单就是在前边的代码中加一个参数即可搞定。

我们首先来看一下宏哥的博客园首页,一屏幕完全是放不下的,需要滚动才可以看到后边的信息,以及底部内容。如下图所示:

4.1.1代码设计

4.1.2参考代码

java 复制代码
package com.bjhg.playwright;

import java.nio.file.Paths;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥(微信搜索,关注宏哥,提前解锁更多测试干货)
 * 
 * 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-38-屏幕截图利器-上篇(详细教程)
 *
 * 2025年09月05日
 */

public class Test_Screenshots {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try (Playwright playwright = Playwright.create()) {
            //1.使用chromium浏览器,# 浏览器配置,设置以GUI模式启动Chrome浏览器(要查看浏览器UI,在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度。
            Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(300));
            //2.创建context
            BrowserContext context = browser.newContext();
            //创建page
            Page page = context.newPage();
            page.screenshot();
            //3.浏览器访问demo
            page.navigate("https://www.cnblogs.com/du-hong");
            Thread.sleep(300);
            //4.屏幕截图
            page.screenshot(new Page.ScreenshotOptions()
            .setPath(Paths.get("screenshot.png"))
            .setFullPage(true));
            Thread.sleep(1000);
            System.out.println("Test Pass");
            //5.关闭page
            page.close();
            //6.关闭browser
            browser.close();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

4.1.3运行代码

1.运行代码,右键Run As->Java Application,就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作(访问博客园,然后截图,宏哥将图片缩小,才看到截图的全部)。如下图所示:

5.小结

好了,今天时间不早了,关于playwright的截图就先介绍讲解到这里,下一篇继续介绍截图的其他操作方法。感谢您耐心的阅读!!!

相关推荐
子兮曰8 小时前
🚀别再被JSON.parse坑了!这个深度克隆方案解决了我3年的前端痛点
前端·javascript·全栈
R瑾安8 小时前
VUE基础
前端·javascript·vue.js
awei09168 小时前
SpringBoot3中使用Caffeine缓存组件
java·缓存·springboot·springboot3
无敌爆龙战士8 小时前
一文搞懂pnpm+monorepo的原理
前端
艾小码8 小时前
告别无效加班!这4个表单操作技巧,让你效率翻倍
前端·javascript·html
xiguolangzi8 小时前
mysql业务笔记
java
杨杨杨大侠8 小时前
手搓责任链框架 3:处理器实现
java·spring·github
TimelessHaze8 小时前
面试必备:深入理解 Toast 组件的事件通信与优化实现
前端·trae
zayyo8 小时前
从 Promise 到 Generator,再到 Co 与 Async/Await 的演进
前端·javascript