如何在Playwright中检测新打开标签页是否处于激活(前台)状态
断言Playwright中新打开标签页的状态(未关闭+前台激活)
核心问题解答
判断页面是否未关闭:Playwright的
Page对象自带isClosed()方法,直接调用即可判断页面是否处于关闭状态,你代码里的expect(newTab.isClosed()).toBe(false)是正确的用法。断言页面处于前台(激活状态):在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
相关产品推荐
相关产品推荐

