页面
页面
¥Pages
每个 BrowserContext 可以有多个页面。Page 指的是浏览器上下文中的单个选项卡或弹出窗口。它应用于导航到 URL 并与页面内容交互。
¥Each BrowserContext can have multiple pages. A Page refers to a single tab or a popup window within a browser context. It should be used to navigate to URLs and interact with the page content.
// Create a page.
var page = await context.NewPageAsync();
// Navigate explicitly, similar to entering a URL in the browser.
await page.GotoAsync("http://example.com");
// Fill an input.
await page.Locator("#search").FillAsync("query");
// Navigate implicitly by clicking a link.
await page.Locator("#submit").ClickAsync();
// Expect a new url.
Console.WriteLine(page.Url);
多页
¥Multiple pages
每个浏览器上下文可以托管多个页面(选项卡)。
¥Each browser context can host multiple pages (tabs).
-
每个页面的行为就像一个集中的活动页面。不需要将页面置于前面。
¥Each page behaves like a focused, active page. Bringing the page to front is not required.
-
上下文内的页面遵循上下文级模拟,例如视口大小、自定义网络路由或浏览器区域设置。
¥Pages inside a context respect context-level emulation, like viewport sizes, custom network routes or browser locale.
// Create two pages
var pageOne = await context.NewPageAsync();
var pageTwo = await context.NewPageAsync();
// Get pages of a browser context
var allPages = context.Pages;
处理新页面
¥Handling new pages
浏览器上下文中的 page
事件可用于获取在上下文中创建的新页面。这可用于处理 target="_blank"
链接打开的新页面。
¥The page
event on browser contexts can be used to get new pages that are created in the context. This can be used to handle new pages opened by target="_blank"
links.
// Get page after a specific action (e.g. clicking a link)
var newPage = await context.RunAndWaitForPageAsync(async () =>
{
await page.GetByText("open new tab").ClickAsync();
});
// Interact with the new page normally
await newPage.GetByRole(AriaRole.Button).ClickAsync();
Console.WriteLine(await newPage.TitleAsync());
如果触发新页面的操作未知,则可以使用以下模式。
¥If the action that triggers the new page is unknown, the following pattern can be used.
// Get all new pages (including popups) in the context
context.Page += async (_, page) => {
await page.WaitForLoadStateAsync();
Console.WriteLine(await page.TitleAsync());
};
处理弹出窗口
¥Handling popups
如果页面打开了一个弹出窗口(例如通过 target="_blank"
链接打开的页面),你可以通过监听页面上的 popup
事件来获取对其的引用。
¥If the page opens a pop-up (e.g. pages opened by target="_blank"
links), you can get a reference to it by listening to the popup
event on the page.
除了 browserContext.on('page')
事件之外,还会触发此事件,但仅针对与此页面相关的弹出窗口。
¥This event is emitted in addition to the browserContext.on('page')
event, but only for popups relevant to this page.
// Get popup after a specific action (e.g., click)
var popup = await page.RunAndWaitForPopupAsync(async () =>
{
await page.GetByText("open the popup").ClickAsync();
});
// Interact with the popup normally
await popup.GetByRole(AriaRole.Button).ClickAsync();
Console.WriteLine(await popup.TitleAsync());
如果触发弹出窗口的操作未知,则可以使用以下模式。
¥If the action that triggers the popup is unknown, the following pattern can be used.
// Get all popups when they open
page.Popup += async (_, popup) => {
await popup.WaitForLoadStateAsync();
Console.WriteLine(await page.TitleAsync());
};