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());
};