Pages
Страницы
Каждый BrowserContext может содержать несколько страниц. Page относится к одной вкладке или всплывающему окну в контексте браузера. Он должен использоваться для навигации по URL-адресам и взаимодействия с содержимым страницы.
// Создайте страницу.
const page = await context.newPage();
// Явная навигация, аналогичная вводу URL в браузере.
await page.goto('http://example.com');
// Заполнение поля ввода.
await page.locator('#search').fill('query');
// Неявная навигация путем нажатия на ссылку.
await page.locator('#submit').click();
// Ожидаем новый URL.
console.log(page.url());
Несколько страниц
Каждый контекст браузера может содержать несколько страниц (вкладок).
- Каждая страница ведет себя как активная, сфокусированная страница. Выводить страницу на передний план не требуется.
- Страницы в контексте учитывают эмуляцию на уровне контекста, такую как размеры окна просмотра, пользовательские сетевые маршруты или локаль браузера.
// Создайте две страницы
const pageOne = await context.newPage();
const pageTwo = await context.newPage();
// Получите страницы контекста браузера
const allPages = context.pages();
Обработка новых страниц
Событие page
в контекстах браузера может использоваться для получения новых страниц, созданных в контексте. Это может быть использовано для обработки новых страниц, открытых ссылками с target="_blank"
.
// Начните ожидание новой страницы перед нажатием. Обратите внимание, что await нет.
const pagePromise = context.waitForEvent('page');
await page.getByText('open new tab').click();
const newPage = await pagePromise;
// Взаимодействуйте с новой страницей как обычно.
await newPage.getByRole('button').click();
console.log(await newPage.title());
Если действие, которое вызывает новую страницу, неизвестно, можно использовать следующий шаблон.
// Получите все новые страницы (включая всплывающие окна) в контексте
context.on('page', async page => {
await page.waitForLoadState();
console.log(await page.title());
});
Обработка всплывающих окон
Если страница открывает всплывающее окно (например, страницы, открытые ссылками с target="_blank"
), вы можете получить ссылку на него, прослушивая событие popup
на странице.
Это событие генерируется в дополнение к событию browserContext.on('page')
, но только для всплывающих окон, относящихся к этой странице.
// Начните ожидание всплывающего окна перед нажатием. Обратите внимание, что await нет.
const popupPromise = page.waitForEvent('popup');
await page.getByText('open the popup').click();
const popup = await popupPromise;
// Взаимодействуйте с новым всплывающим окном как обычно.
await popup.getByRole('button').click();
console.log(await popup.title());
Если действие, которое вызывает всплывающее окно, неизвестно, можно использовать следующий шаблон.
// Получите все всплывающие окна, когда они открываются
page.on('popup', async popup => {
await popup.waitForLoadState();
console.log(await popup.title());
});