Перейти к основному содержимому

Pages

Страницы

Каждый BrowserContext может содержать несколько страниц. Page относится к одной вкладке или всплывающему окну в контексте браузера. Он должен использоваться для навигации по URL-адресам и взаимодействия с содержимым страницы.

// Создать страницу.
var page = await context.NewPageAsync();

// Явная навигация, аналогично вводу URL в браузере.
await page.GotoAsync("http://example.com");
// Заполнить поле ввода.
await page.Locator("#search").FillAsync("query");

// Неявная навигация путем нажатия на ссылку.
await page.Locator("#submit").ClickAsync();
// Ожидание нового URL.
Console.WriteLine(page.Url);

Несколько страниц

Каждый контекст браузера может содержать несколько страниц (вкладок).

  • Каждая страница ведет себя как сфокусированная, активная страница. Выводить страницу на передний план не требуется.
  • Страницы внутри контекста учитывают эмуляцию на уровне контекста, такую как размеры окна просмотра, пользовательские маршруты сети или локаль браузера.
// Создать две страницы
var pageOne = await context.NewPageAsync();
var pageTwo = await context.NewPageAsync();

// Получить страницы контекста браузера
var allPages = context.Pages;

Обработка новых страниц

Событие page в контекстах браузера может использоваться для получения новых страниц, которые создаются в контексте. Это может быть использовано для обработки новых страниц, открытых ссылками с target="_blank".

// Получить страницу после конкретного действия (например, нажатия на ссылку)
var newPage = await context.RunAndWaitForPageAsync(async () =>
{
await page.GetByText("open new tab").ClickAsync();
});
// Взаимодействовать с новой страницей как обычно
await newPage.GetByRole(AriaRole.Button).ClickAsync();
Console.WriteLine(await newPage.TitleAsync());

Если действие, которое вызывает новую страницу, неизвестно, можно использовать следующий шаблон.

// Получить все новые страницы (включая всплывающие окна) в контексте
context.Page += async (_, page) => {
await page.WaitForLoadStateAsync();
Console.WriteLine(await page.TitleAsync());
};

Обработка всплывающих окон

Если страница открывает всплывающее окно (например, страницы, открытые ссылками с target="_blank"), вы можете получить ссылку на него, прослушивая событие popup на странице.

Это событие генерируется в дополнение к событию browserContext.on('page'), но только для всплывающих окон, относящихся к этой странице.

// Получить всплывающее окно после конкретного действия (например, нажатия)
var popup = await page.RunAndWaitForPopupAsync(async () =>
{
await page.GetByText("open the popup").ClickAsync();
});
// Взаимодействовать с всплывающим окном как обычно
await popup.GetByRole(AriaRole.Button).ClickAsync();
Console.WriteLine(await popup.TitleAsync());

Если действие, которое вызывает всплывающее окно, неизвестно, можно использовать следующий шаблон.

// Получить все всплывающие окна, когда они открываются
page.Popup += async (_, popup) => {
await popup.WaitForLoadStateAsync();
Console.WriteLine(await page.TitleAsync());
};