无头浏览器测试 通常指没有头的物体或东西,在浏览器的语境中,它指的是没有 UI 的浏览器模拟。无头浏览器自动化使用 Web 浏览器进行端到端测试,而无需加载浏览器的 UI。
Puppeteer 的一些主要功能包括:
Puppeteer 是一个 Node.js 库,用于控制 Chrome 或 Chromium 浏览器,主要用于自动化测试、网页抓取和生成 PDF 等任务。“无头”在 Puppeteer 中指的是可以无需用户界面运行的浏览器实例。
换句话说,浏览器在后台运行,不会显示可以与之进行视觉交互的窗口。相反,它以编程方式执行任务,并且可以通过脚本或代码进行控制。
Puppeteer 允许您控制具有可见 GUI 的常规浏览器实例和无头浏览器实例。无头模式对于网页抓取、自动化测试以及生成屏幕截图或 PDF 等任务特别有用,因为它允许以高效的方式执行这些任务,而不会显示浏览器窗口。
使用 Puppeteer 无头模式的一些好处:
无头浏览器对于需要与网站进行自动交互、数据提取、测试以及其他不需要视觉渲染的操作的任务特别强大。
您对网页抓取和 Browserless 有什么奇妙的想法或疑问?
让我们看看其他开发人员在 Discord 和 Telegram 上分享了什么!
如何使用 Puppeteer 和 Browserless 进行无头浏览器测试?
让我们在接下来的内容中找出答案!
在测试之前,我们需要有一个 Browserless 服务。Browserless 可以帮助我们解决复杂的 Web 抓取和大型自动化任务。借助完全托管的成果的云部署,Browserless 具有更强大的功能。
Browserless 采用以浏览器为中心的策略,提供强大的无头部署能力,并提供更高的性能和可靠性。请 点击此处 了解有关 Browserless 服务配置的更多信息。
完成环境初始化后,我们需要进一步确定测试目标。
我们将只学习一个使用 Puppeteer 与 Browserless 的示例,而没有特定的网页。请根据您的目标网站和要求指定样本。
这里,让我们使用 Puppeteer
获取页面的标题并创建屏幕截图。之后,我们将把它与 Jest 结合起来编写测试用例。
以下是我们主要的测试内容:
接下来,请按照以下步骤安装 Puppeteer
并运行测试脚本:
步骤 1: 在 Vs code 中创建一个新文件夹
步骤 2: 打开 Vs code 终端并运行以下命令以安装相关依赖项
npm init -y
pnpm add jest jest-html-reporter puppeteer-core
步骤 3: 完成相关文件
jest.config.js
配置文件以执行相关配置:module.exports = {
testTimeout: 10000, // 10 秒
reporters: [
'default',
[
'jest-html-reporter',
{
pageTitle: 'Test Report',
outputPath: './test-report.html',
includeFailureMsg: true,
includeConsoleLog: true,
},
],
],
};
__tests__/puppeteer.spec.js
测试脚本要启动浏览器,您需要传入相关的配置(有关完整配置,请参考 LaunchNewBrowser)
const puppeteer = require('puppeteer-core');
describe('My First Puppeteer Test', () => {
it('should load the page and check the title', async () => {
const browserWSEndpoint = await launchAndConnectToBrowser();
const browser = await puppeteer.connect({
browserWSEndpoint: browserWSEndpoint,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
const title = await page.title();
expect(title).toBe('Example Domain');
await browser.close();
});
// 拍摄页面的屏幕截图
it('should take a screenshot of the page', async () => {
const browserWSEndpoint = await launchAndConnectToBrowser();
const browser = await puppeteer.connect({
browserWSEndpoint: browserWSEndpoint,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
});
});
async function launchAndConnectToBrowser() {
const token = ''; // 您从 nstbrowser 获取的 api token
const config = {
proxy:
'', // 必需;输入格式:schema://user:password@host:port 例如:http://user:password@localhost:8080
// platform: 'windows', // 支持:windows、mac、linux
// kernel: 'chromium', // 只支持:chromium
// kernelMilestone: '128', // 支持:128
// args: {
// "--proxy-bypass-list": "detect.nstbrowser.io"
// }, // 浏览器参数
// fingerprint: {
// userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', // userAgent 支持从 v0.15.0 开始
// },
};
const query = new URLSearchParams({
token: token, // 必需
config: JSON.stringify(config),
});
const browserWSEndpoint = `ws://less.nstbrowser.io/connect?${query.toString()}`;
return browserWSEndpoint;
}
现在我们只需要打开控制台并运行以下脚本命令:
npx jest --detectOpenHandles
这里的命令可以主要分解为:
npx
命令执行 jest 命令。jest.config.js
配置文件并获取基本配置信息。执行上述命令后,我们将看到以下输出。这里,测试执行过程的每个重要结果都会被输出,并且它向我们展示了我们的测试用例已经通过。
同时,我们可以打开 test-report.html
文件查看生成的具体报告:
项目的文件夹结构如下。我们还可以看到输出的屏幕截图文件内容,这意味着我们的测试用例已经完全通过。
page.waitForTimeout
),而是优先等待特定事件或元素 (page.waitForSelector
),这使您的自动化更有效率,并且更能抵抗不同的加载时间。browser.createIncognitoBrowserContext
)。这可以防止缓存数据、cookie 或本地存储影响后续会话。navigator.webdriver
删除)之类的技术可以帮助绕过无头检测。Puppeteer 无头浏览器 使一切都变得容易。在本博文中,我们旨在与您分享:
Nstbrowser 的 Browserless 简化了 Puppeteer 的配置和操作。就像以前一样,是时候阅读了:Browserless 如何工作 与 Playwright 和 Puppeteer!