頁面
頁面
每個 BrowserContext 可以有多個頁面。 Page 指的是瀏覽器環境中的單一分頁或彈出式視窗。它應該用於導航到 URL 並與頁面內容互動。
// 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);
多個頁面
每個瀏覽器環境可以容納多個頁面(分頁)。
- 每個頁面的行為都像一個聚焦、活動的頁面。不需要將頁面帶到最前面。
- 環境內的頁面會遵循環境層級的模擬,例如視窗大小、自訂網路路由或瀏覽器地區設定。
// Create two pages
var pageOne = await context.NewPageAsync();
var pageTwo = await context.NewPageAsync();
// Get pages of a browser context
var allPages = context.Pages;
處理新頁面
瀏覽器環境上的 page
事件可用於取得在環境中建立的新頁面。這可以用於處理由 target="_blank"
連結開啟的新頁面。
// 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());
如果觸發新頁面的動作未知,可以使用以下模式。
// Get all new pages (including popups) in the context
context.Page += async (_, page) => {
await page.WaitForLoadStateAsync();
Console.WriteLine(await page.TitleAsync());
};
處理彈出視窗
如果頁面開啟彈出視窗(例如由 target="_blank"
連結開啟的頁面),您可以透過監聽頁面上的 popup
事件來取得對它的參考。
此事件除了 browserContext.on('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());
如果觸發彈出視窗的動作未知,可以使用以下模式。
// Get all popups when they open
page.Popup += async (_, popup) => {
await popup.WaitForLoadStateAsync();
Console.WriteLine(await page.TitleAsync());
};