You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Playwright中检测新打开标签页是否处于激活(前台)状态

断言Playwright中新打开标签页的状态(未关闭+前台激活)

核心问题解答

  1. 判断页面是否未关闭:Playwright的Page对象自带isClosed()方法,直接调用即可判断页面是否处于关闭状态,你代码里的expect(newTab.isClosed()).toBe(false)是正确的用法。

  2. 断言页面处于前台(激活状态):在Playwright的BrowserContext中,调用context.pages()会返回当前上下文的所有页面,数组的最后一项就是当前处于前台的活跃页面——因为新打开的标签页默认会成为活跃窗口。基于这个特性,无需检查页面元素就能断言新标签页在前台。

修改后的完整测试代码

import { expect, test } from "@playwright/test";

test("should redirect user to new tab after clicking link", async ({
  page,
  context,
}) => {
  // Arrange
  const expectedUrl = "https://github.com/microsoft/playwright";

  await page.goto("https://playwright.dev/");
  await page.waitForLoadState();
  const newTabPromise = page.waitForEvent("popup");

  await context.route("**/*", (route) => route.abort());
  let observedURL = "unknown";
  context.on("request", (request) => {
    observedURL = request.url();
  });

  // Act
  await page.getByRole("link", { name: "GitHub repository" }).click();
  const newTab = await newTabPromise;

  // Assert
  // 验证请求URL符合预期
  expect(observedURL).toContain(expectedUrl);
  // 验证新标签页未关闭
  expect(newTab.isClosed()).toBe(false);
  // 验证新标签页处于前台(活跃状态)
  const allPages = context.pages();
  expect(allPages[allPages.length - 1]).toBe(newTab);
});

关键说明

  • context.pages()返回的页面顺序严格对应窗口的激活顺序,最后一个元素始终是当前前台的页面,这个逻辑不需要依赖任何页面元素,完全符合你的需求。
  • 因为你拦截了新标签页的所有请求,无需等待页面加载完成即可进行断言,节省测试时间。

内容的提问来源于stack exchange,提问作者pbaranski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:03:31