Page
Класс Page
предоставляет методы для работы с одной вкладкой в Browser или фоновыми страницами расширений (extension background page) в Chromium. Один экземпляр Browser может содержать несколько экземпляров Page.
Пример ниже создаёт страницу, переходит на указанный URL и сохраняет скриншот:
const { webkit } = require('playwright'); // Также можно использовать 'chromium' или 'firefox'.
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'screenshot.png' });
await browser.close();
})();
Класс Page
генерирует различные события (описаны ниже), которые можно обрабатывать с помощью стандартных методов EventEmitter
в Node.js, таких как on
, once
или removeListener
.
Пример ниже выводит сообщение при загрузке страницы (load
):
page.once('load', () => console.log('Page loaded!'));
Чтобы отписаться от событий, используйте метод removeListener
:
function logRequest(interceptedRequest) {
console.log('A request was made:', interceptedRequest.url());
}
page.on('request', logRequest);
// Позже в коде...
page.removeListener('request', logRequest);
Методы
addInitScript
Добавлено до версии v1.9Добавляет скрипт, который будет выполнен в одном из следующих сценариев:
- Каждый раз, когда страница загружается.
- Каждый раз, когда дочерний фрейм присоединяется или загружается. В этом случае скрипт выполняется в контексте вновь присоединенного фрейма.
Скрипт выполняется после создания документа, но до выполнения любых его скриптов. Это полезно для изменения среды JavaScript, например, для задания начального значения Math.random
.
Использование
Пример переопределения Math.random
перед загрузкой страницы:
// preload.js
Math.random = () => 42;
// В вашем скрипте playwright, предполагая, что файл preload.js находится в той же директории
await page.addInitScript({ path: './preload.js' });
await page.addInitScript(mock => {
window.mock = mock;
}, mock);
Порядок выполнения нескольких скриптов, установленных через browserContext.addInitScript() и page.addInitScript(), не определен.
Аргументы
-
script
function | string | Object#-
path
string (опционально)Путь к JavaScript файлу. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории. Опционально. -
content
string (опционально)Сырой контент скрипта. Опционально.
Скрипт для выполнения на странице.
-
-
arg
Serializable (опционально)#Опциональный аргумент для передачи в script (поддерживается только при передаче функции).
Возвращает
addLocatorHandler
Добавлено в: v1.42При тестировании веб-страницы иногда появляются неожиданные наложения, такие как диалог "Зарегистрироваться", которые блокируют действия, которые вы хотите автоматизировать, например, нажатие кнопки. Эти наложения не всегда появляются одинаково или в одно и то же время, что делает их сложными для обработки в автоматизированных тестах.
Этот метод позволяет вам настроить специальную функцию, называемую обработчиком, которая активируется, когда обнаруживает, что наложение видно. Задача обработчика - удалить наложение, позволяя вашему тесту продолжаться так, как будто наложения не было.
Вещи, которые нужно учитывать:
- Когда наложение показывается предсказуемо, мы рекомендуем явно ожидать его в вашем тесте и отклонять его как часть вашего обычного тестового потока, вместо использования page.addLocatorHandler().
- Playwright проверяет наличие наложения каждый раз перед выполнением или повторной попыткой действия, требующего проверки возможности действия, или перед выполнением проверки утверждения с автоматическим ожиданием. Когда наложение видно, Playwright сначала вызывает обработчик, а затем продолжает выполнение действия/утверждения. Обратите внимание, что обработчик вызывается только при выполнении действия/утверждения - если наложение становится видимым, но вы не выполняете никаких действий, обработчик не будет вызван.
- После выполнения обработчика Playwright убедится, что наложение, вызвавшее обработчик, больше не видно. Вы можете отказаться от этого поведения с помощью noWaitAfter.
- Время выполнения обработчика учитывается в тайм-ауте действия/утверждения, которое вызвало обработчик. Если ваш обработчик занимает слишком много времени, это может вызвать тайм-ауты.
- Вы можете зарегистрировать несколько обработчиков. Однако в любой момент времени будет выполняться только один обработчик. Убедитесь, что действия в обработчике не зависят от другого обработчика.
Выполнение обработчика изменит состояние вашей страницы в середине теста. Например, это изменит текущий фокус элемента и переместит мышь. Убедитесь, что действия, выполняемые после обработчика, являются автономными и не зависят от неизменности состояния фокуса и мыши.
For example, consider a test that calls locator.focus() followed by keyboard.press(). If your handler clicks a button between these two actions, the focused element most likely will be wrong, and key press will happen on the unexpected element. Use locator.press() instead to avoid this problem.
Another example is a series of mouse actions, where mouse.move() is followed by mouse.down(). Again, when the handler runs between these two actions, the mouse position will be wrong during the mouse down. Prefer self-contained actions like locator.click() that do not rely on the state being unchanged by a handler.
Использование
Пример, который закрывает диалог "Подписаться на рассылку", когда он появляется:
// Настройка обработчика.
await page.addLocatorHandler(page.getByText('Sign up to the newsletter'), async () => {
await page.getByRole('button', { name: 'No thanks' }).click();
});
// Пишите тест как обычно.
await page.goto('https://example.com');
await page.getByRole('button', { name: 'Start here' }).click();
Пример, который пропускает страницу "Подтвердите свои данные безопасности", когда она отображается:
// Настройка обработчика.
await page.addLocatorHandler(page.getByText('Confirm your security details'), async () => {
await page.getByRole('button', { name: 'Remind me later' }).click();
});
// Пишите тест как обычно.
await page.goto('https://example.com');
await page.getByRole('button', { name: 'Start here' }).click();
Пример с пользовательским обратным вызовом на каждой проверке доступности. Используется локатор <body>
, который всегда виден, поэтому обработчик вызывается перед каждой проверкой доступности. Важно указать noWaitAfter, потому что обработчик не скрывает элемент <body>
.
// Настройка обработчика.
await page.addLocatorHandler(page.locator('body'), async () => {
await page.evaluate(() => window.removeObstructionsForTestIfNeeded());
}, { noWaitAfter: true });
// Пишите тест как обычно.
await page.goto('https://example.com');
await page.getByRole('button', { name: 'Start here' }).click();
Обработчик принимает оригинальный локатор в качестве аргумента. Вы также можете автоматически удалить обработчик после определенного количества вызовов, установив times:
await page.addLocatorHandler(page.getByLabel('Close'), async locator => {
await locator.click();
}, { times: 1 });
Аргументы
-
Локатор, который вызывает обработчик.
-
handler
function(Locator):Promise<Object>#Функция, которая должна быть выполнена, как только локатор появится. Эта функция должна избавиться от элемента, который блокирует действия, такие как клик.
-
options
Object (опционально)-
noWaitAfter
boolean (опционально) Добавлено в: v1.44#По умолчанию, после вызова обработчика Playwright будет ждать, пока оверлей не станет скрытым, и только затем продолжит действие/проверку, которое вызвало обработчик. Эта опция позволяет отказаться от этого поведения, чтобы оверлей мог оставаться видимым после выполнения обработчика.
-
times
number (опционально) Добавлено в: v1.44#Указывает максимальное количество раз, которое этот обработчик должен быть вызван. По умолчанию не ограничено.
-
Возвращает
addScriptTag
Добавлено до v1.9Добавляет тег <script>
на страницу с нужным URL или содержимым. Возвращает добавленный тег, когда срабатывает onload скрипта или когда содержимое скрипта было внедрено в фрейм.
Использование
await page.addScriptTag();
await page.addScriptTag(options);
Аргументы
options
Object (опционально)-
Сырой JavaScript-контент для внедрения в фрейм.
-
Путь к JavaScript-файлу для внедрения в фрейм. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории. -
Тип скрипта. Используйте 'module', чтобы загрузить JavaScript ES6 модуль. Подробнее см. script.
-
URL скрипта, который нужно добавить.
-
Возвращает
addStyleTag
Добавлено до v1.9Добавляет тег <link rel="stylesheet">
на страницу с нужным URL или тег <style type="text/css">
с содержимым. Возвращает добавленный тег, когда срабатывает onload таблицы стилей или когда CSS-контент был внедрен в фрейм.
Использование
await page.addStyleTag();
await page.addStyleTag(options);
Аргументы
options
Object (опционально)
Возвращает
bringToFront
Добавлено до v1.9Перемещает страницу на передний план (активирует вкладку).
Использование
await page.bringToFront();
Возвращает
close
Добавлено до v1.9Если runBeforeUnload равен false
, не выполняет обработчики выгрузки и ждет закрытия страницы. Если runBeforeUnload равен true
, метод выполнит обработчики выгрузки, но не будет ждать закрытия страницы.
По умолчанию, page.close()
не выполняет обработчики beforeunload
.
если runBeforeUnload передан как true, может быть вызван диалог beforeunload
, который должен быть обработан вручную через событие page.on('dialog').
Использование
await page.close();
await page.close(options);
Аргументы
options
Object (опционально)-
reason
string (опционально) Добавлено в: v1.40#Причина, которая будет сообщена операциям, прерванным закрытием страницы.
-
runBeforeUnload
boolean (опционально)#По умолчанию
false
. Выполнять ли обработчики страницы before unload.
-
Возвращает
content
Добавлено до v1.9Получает полный HTML-контент страницы, включая doctype.
Использование
await page.content();
Возвращает
context
Добавлено до v1.9Получает контекст браузера, к которому принадлежит страница.
Использование
page.context();
Возвращает
dragAndDrop
Добавлено в: v1.13Этот метод перетаскивает исходный элемент на целевой элемент. Сначала он перемещается к исходному элементу, выполняет mousedown
, затем перемещается к целевому элементу и выполняет mouseup
.
Использование
await page.dragAndDrop('#source', '#target');
// или укажите точные позиции относительно верхнего левого угла элементов:
await page.dragAndDrop('#source', '#target', {
sourcePosition: { x: 34, y: 7 },
targetPosition: { x: 10, y: 20 },
});
Аргументы
-
Селектор для поиска элемента для перетаскивания. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Селектор для поиска элемента, на который нужно сбросить. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
Пропускать ли проверки actionability. По умолчанию
false
. -
noWaitAfter
boolean (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
sourcePosition
Object (опционально) Добавлено в: v1.14#Кликает на исходный элемент в этой точке относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
targetPosition
Object (опционально) Добавлено в: v1.14#Сбрасывает на целевой элемент в этой точке относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью параметраactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию, без его выполнения.
-
Возвращает
emulateMedia
Добавлено до v1.9Этот метод изменяет CSS media type
через аргумент media
и/или медиа-функцию 'prefers-colors-scheme'
, используя аргумент colorScheme
.
Использование
await page.evaluate(() => matchMedia('screen').matches);
// → true
await page.evaluate(() => matchMedia('print').matches);
// → false
await page.emulateMedia({ media: 'print' });
await page.evaluate(() => matchMedia('screen').matches);
// → false
await page.evaluate(() => matchMedia('print').matches);
// → true
await page.emulateMedia({});
await page.evaluate(() => matchMedia('screen').matches);
// → true
await page.evaluate(() => matchMedia('print').matches);
// → false
await page.emulateMedia({ colorScheme: 'dark' });
await page.evaluate(() => matchMedia('(prefers-color-scheme: dark)').matches);
// → true
await page.evaluate(() => matchMedia('(prefers-color-scheme: light)').matches);
// → false
Аргументы
options
Object (опционально)-
colorScheme
null | "light" | "dark" | "no-preference" (опционально) Добавлено в: v1.9#Эмулирует медиа-функцию prefers-colors-scheme, поддерживаемые значения:
'light'
и'dark'
. Передачаnull
отключает эмуляцию цветовой схемы.'no-preference'
устарело. -
contrast
null | "no-preference" | "more" (опционально) Добавлено в: v1.51#Эмулирует медиа-функцию
'prefers-contrast'
, поддерживаемые значения:'no-preference'
,'more'
. Передачаnull
отключает эмуляцию контраста. -
forcedColors
null | "active" | "none" (опционально) Добавлено в: v1.15#Эмулирует медиа-функцию
'forced-colors'
, поддерживаемые значения:'active'
и'none'
. Передачаnull
отключает эмуляцию принудительных цветов. -
media
null | "screen" | "print" (опционально) Добавлено в: v1.9#Изменяет CSS media type страницы. Единственные допустимые значения:
'screen'
,'print'
иnull
. Передачаnull
отключает эмуляцию CSS media. -
reducedMotion
null | "reduce" | "no-preference" (опционально) Добавлено в: v1.12#Эмулирует медиа-функцию
'prefers-reduced-motion'
, поддерживаемые значения:'reduce'
,'no-preference'
. Передачаnull
отключает эмуляцию уменьшенного движения.
-
Возвращает
evaluate
Добавлено до v1.9Возвращает значение вызова pageFunction.
Если функция, переданная в page.evaluate(), возвращает Promise, то page.evaluate() будет ждать разрешения промиса и вернет его значение.
Если функция, переданная в page.evaluate(), возвращает не-Serializable значение, то page.evaluate() разрешится в undefined
. Playwright также поддерживает передачу некоторых дополнительных значений, которые не сериализуются через JSON
: -0
, NaN
, Infinity
, -Infinity
.
Использование
Передача аргумента в pageFunction:
const result = await page.evaluate(([x, y]) => {
return Promise.resolve(x * y);
}, [7, 8]);
console.log(result); // выводит "56"
Вместо функции также можно передать строку:
console.log(await page.evaluate('1 + 2')); // выводит "3"
const x = 10;
console.log(await page.evaluate(`1 + ${x}`)); // выводит "11"
Экземпляры ElementHandle могут быть переданы в качестве аргумента в page.evaluate():
const bodyHandle = await page.evaluate('document.body');
const html = await page.evaluate<string, HTMLElement>(([body, suffix]) =>
body.innerHTML + suffix, [bodyHandle, 'hello']
);
await bodyHandle.dispose();
Аргументы
-
pageFunction
function | string#Функция для выполнения в контексте страницы.
-
arg
EvaluationArgument (опционально)#Опциональный аргумент для передачи в pageFunction.
Возвращает
evaluateHandle
Добавлено до v1.9Возвращает значение вызова pageFunction в виде JSHandle.
Единственное отличие между page.evaluate() и page.evaluateHandle() заключается в том, что page.evaluateHandle() возвращает JSHandle.
Если функция, переданная в page.evaluateHandle(), возвращает Promise, то page.evaluateHandle() будет ждать разрешения промиса и вернет его значение.
Использование
// Обработчик для объекта window.
const aWindowHandle = await page.evaluateHandle(() => Promise.resolve(window));
Вместо функции также можно передать строку:
const aHandle = await page.evaluateHandle('document'); // Обработчик для 'document'
Экземпляры JSHandle могут быть переданы в качестве аргумента в page.evaluateHandle():
const aHandle = await page.evaluateHandle(() => document.body);
const resultHandle = await page.evaluateHandle(body => body.innerHTML, aHandle);
console.log(await resultHandle.jsonValue());
await resultHandle.dispose();
Аргументы
-
pageFunction
function | string#Функция для выполнения в контексте страницы.
-
arg
EvaluationArgument (опционально)#Опциональный аргумент для передачи в pageFunction.
Возвращает
exposeBinding
Добавлено до версии v1.9Метод добавляет функцию с именем name в объект window
каждого фрейма на этой странице. При вызове функция выполняет callback и возвращает Promise, который разрешается в возвращаемое значение callback. Если callback возвращает Promise, он будет ожидаться.
Первый аргумент функции callback содержит информацию о вызывающем: { browserContext: BrowserContext, page: Page, frame: Frame }
.
Смотрите browserContext.exposeBinding() для версии, охватывающей весь контекст.
Функции, установленные через page.exposeBinding(), сохраняются при навигации.
Использование
Пример предоставления URL страницы всем фреймам на странице:
const { webkit } = require('playwright'); // Или 'chromium' или 'firefox'.
(async () => {
const browser = await webkit.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
await page.exposeBinding('pageURL', ({ page }) => page.url());
await page.setContent(`
<script>
async function onClick() {
document.querySelector('div').textContent = await window.pageURL();
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
`);
await page.click('button');
})();
Аргументы
-
Имя функции в объекте window.
-
Функция обратного вызова, которая будет вызвана в контексте Playwright.
-
options
Object (опционально)
Возвращает
exposeFunction
Добавлено до версии v1.9Метод добавляет функцию с именем name в объект window
каждого фрейма на странице. При вызове функция выполняет callback и возвращает Promise, который разрешается в возвращаемое значение callback.
Если callback возвращает Promise, он будет ожидаться.
Смотрите browserContext.exposeFunction() для функции, охватывающей весь контекст.
Функции, установленные через page.exposeFunction(), сохраняются при навигации.
Использование
Пример добавления функции sha256
на страницу:
const { webkit } = require('playwright'); // Или 'chromium' или 'firefox'.
const crypto = require('crypto');
(async () => {
const browser = await webkit.launch({ headless: false });
const page = await browser.newPage();
await page.exposeFunction('sha256', text =>
crypto.createHash('sha256').update(text).digest('hex'),
);
await page.setContent(`
<script>
async function onClick() {
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
`);
await page.click('button');
})();
Аргументы
-
Имя функции в объекте window.
-
Функция обратного вызова, которая будет вызвана в контексте Playwright.
Возвращает
frame
Добавлено до версии v1.9Возвращает фрейм, соответствующий указанным критериям. Должно быть указано либо name
, либо url
.
Использование
const frame = page.frame('frame-name');
const frame = page.frame({ url: /.*domain.*/ });
Аргументы
Возвращает
frameLocator
Добавлено в: v1.17При работе с iframes, вы можете создать локатор фрейма, который войдет в iframe и позволит выбирать элементы в этом iframe.
Использование
Следующий пример находит элемент с текстом "Submit" в iframe с id my-frame
, например <iframe id="my-frame">
:
const locator = page.frameLocator('#my-iframe').getByText('Submit');
await locator.click();
Аргументы
Возвращает
frames
Добавлено до v1.9Массив всех фреймов, прикрепленных к странице.
Использование
page.frames();
Возвращает
getByAltText
Добавлено в: v1.27Позволяет находить элементы по их alt тексту.
Использование
Например, этот метод найдет изображение по alt тексту "Playwright logo":
<img alt='Playwright logo'>
await page.getByAltText('Playwright logo').click();
Аргументы
-
Текст для поиска элемента.
-
options
Object (опционально)
Возвращает
getByLabel
Добавлено в: v1.27Позволяет находить элементы ввода по тексту связанного элемента <label>
или aria-labelledby
, или по атрибуту aria-label
.
Использование
Например, этот метод найдет элементы ввода по меткам "Username" и "Password" в следующем DOM:
<input aria-label="Username">
<label for="password-input">Password:</label>
<input id="password-input">
await page.getByLabel('Username').fill('john');
await page.getByLabel('Password').fill('secret');
Аргументы
-
Текст для поиска элемента.
-
options
Object (опционально)
Возвращает
getByPlaceholder
Добавлено в: v1.27Позволяет находить элементы ввода по тексту placeholder.
Использование
Например, рассмотрим следующую структуру DOM.
<input type="email" placeholder="name@example.com" />
Вы можете заполнить элемент ввода, найдя его по тексту placeholder:
await page
.getByPlaceholder('name@example.com')
.fill('playwright@microsoft.com');
Аргументы
-
Текст для поиска элемента.
-
options
Object (опционально)
Возвращает
getByRole
Added in: v1.27Позволяет находить элементы по их ARIA роли, ARIA атрибутам и доступному имени.
Использование
Рассмотрим следующую структуру DOM.
<h3>Sign up</h3>
<label>
<input type="checkbox" /> Subscribe
</label>
<br/>
<button>Submit</button>
Вы можете найти каждый элемент по его неявной роли:
await expect(page.getByRole('heading', { name: 'Sign up' })).toBeVisible();
await page.getByRole('checkbox', { name: 'Subscribe' }).check();
await page.getByRole('button', { name: /submit/i }).click();
Аргументы
-
role
"alert" | "alertdialog" | "application" | "article" | "banner" | "blockquote" | "button" | "caption" | "cell" | "checkbox" | "code" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "deletion" | "dialog" | "directory" | "document" | "emphasis" | "feed" | "figure" | "form" | "generic" | "grid" | "gridcell" | "group" | "heading" | "img" | "insertion" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "meter" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "navigation" | "none" | "note" | "option" | "paragraph" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "strong" | "subscript" | "superscript" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "time" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem"#Требуемая ARIA роль.
-
options
Object (опционально)-
checked
boolean (опционально)#Атрибут, который обычно устанавливается с помощью
aria-checked
или нативных<input type=checkbox>
контролов.Узнайте больше о
aria-checked
. -
disabled
boolean (опционально)#Атрибут, который обычно устанавливается с помощью
aria-disabled
илиdisabled
.примечаниеВ отличие от большинства других атрибутов,
disabled
наследуется через иерархию DOM. Узнайте больше оaria-disabled
. -
exact
boolean (опционально) Добавлено в: v1.28#Указывает, должно ли name совпадать точно: с учетом регистра и всей строки. По умолчанию false. Игнорируется, когда name является регулярным выражением. Обратите внимание, что точное совпадение все равно обрезает пробелы.
-
expanded
boolean (опционально)#Атрибут, который обычно устанавливается с помощью
aria-expanded
.Узнайте больше о
aria-expanded
. -
includeHidden
boolean (опционально)#Опция, которая контролирует, будут ли скрытые элементы соответствовать. По умолчанию, только не скрытые элементы, как определено ARIA, соответствуют селектору роли.
Узнайте больше о
aria-hidden
. -
Числовой атрибут, который обычно присутствует для ролей
heading
,listitem
,row
,treeitem
, с значениями по умолчанию для элементов<h1>-<h6>
.Узнайте больше о
aria-level
. -
name
string | RegExp (опционально)#Опция для соответствия доступному имени. По умолчанию, соответствие не учитывает регистр и ищет подстроку, используйте exact для управления этим поведением.
Узнайте больше о доступном имени.
-
pressed
boolean (опционально)#Атрибут, который обычно устанавливается с помощью
aria-pressed
.Узнайте больше о
aria-pressed
. -
selected
boolean (опционально)#Атрибут, который обычно устанавливается с помощью
aria-selected
.Узнайте больше о
aria-selected
.
-
Возвращает
Детали
Селектор роли не заменяет аудиты доступности и тесты на соответствие, но дает раннюю обратную связь о руководствах ARIA.
Многие HTML элементы имеют неявно определенную роль, которая распознается селектором роли. Вы можете найти все поддерживаемые роли здесь. Руководства ARIA не рекомендуют дублировать неявные роли и атрибуты, устанавливая role
и/или aria-*
атрибуты на значения по умолчанию.
getByTestId
Added in: v1.27Находит элемент по тестовому идентификатору.
Использование
Рассмотрим следующую структуру DOM.
<button data-testid="directions">Itinéraire</button>
Вы можете найти элемент по его тестовому идентификатору:
await page.getByTestId('directions').click();
Аргументы
Возвращает
Детали
По умолчанию, атрибут data-testid
используется как тестовый идентификатор. Используйте selectors.setTestIdAttribute() для настройки другого атрибута тестового идентификатора, если это необходимо.
// Установите пользовательский атрибут тестового идентификатора из конфигурации @playwright/test:
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
testIdAttribute: 'data-pw'
},
});
getByText
Added in: v1.27Позволяет находить элементы, содержащие заданный текст.
См. также locator.filter(), который позволяет сопоставлять по другим критериям, таким как доступная роль, а затем фильтровать по содержимому текста.
Использование
Рассмотрим следующую структуру DOM:
<div>Hello <span>world</span></div>
<div>Hello</div>
Вы можете находить элементы по подстроке текста, точной строке или регулярному выражению:
// Соответствует <span>
page.getByText('world');
// Соответствует первому <div>
page.getByText('Hello world');
// Соответствует второму <div>
page.getByText('Hello', { exact: true });
// Соответствует обоим <div>
page.getByText(/Hello/);
// Соответствует второму <div>
page.getByText(/^hello$/i);
Аргументы
-
Текст для поиска элемента.
-
options
Object (опционально)
Возвращает
Детали
Сопоставление по тексту всегда нормализует пробелы, даже при точном совпадении. Например, оно превращает несколько пробелов в один, заменяет разрывы строк на пробелы и игнорирует начальные и конечные пробелы.
Элементы ввода типа button
и submit
сопоставляются по их value
, а не по содержимому текста. Например, поиск по тексту "Log in"
соответствует <input type=button value="Log in">
.
getByTitle
Added in: v1.27Позволяет находить элементы по их атрибуту title.
Использование
Рассмотрим следующую структуру DOM.
<span title='Issues count'>25 issues</span>
Вы можете проверить количество проблем, найдя его по тексту заголовка:
await expect(page.getByTitle('Issues count')).toHaveText('25 issues');
Аргументы
-
Текст для поиска элемента.
-
options
Object (опционально)
Возвращает
goBack
Added before v1.9Возвращает основной ответ ресурса. В случае нескольких перенаправлений навигация будет разрешена с ответом последнего перенаправления. Если невозможно вернуться назад, возвращает null
.
Переход на предыдущую страницу в истории.
Использование
await page.goBack();
await page.goBack(options);
Аргументы
options
Object (опционально)-
Максимальное время операции в миллисекундах. По умолчанию
0
- без тайм-аута. Значение по умолчанию можно изменить с помощью опцииnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout(). -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (опционально)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда получен сетевой ответ и документ начал загружаться.
-
Возвращает
goForward
Added before v1.9Возвращает ответ основного ресурса. В случае нескольких перенаправлений навигация завершится с ответом последнего перенаправления. Если невозможно перейти вперед, возвращает null
.
Переход на следующую страницу в истории.
Использование
await page.goForward();
await page.goForward(options);
Аргументы
options
Object (optional)-
Максимальное время операции в миллисекундах. По умолчанию
0
- без тайм-аута. Значение по умолчанию можно изменить с помощью опцииnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout(). -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (optional)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда получен сетевой ответ и документ начал загружаться.
-
Возвращает
goto
Added before v1.9Возвращает ответ основного ресурса. В случае нескольких перенаправлений навигация завершится с первым не перенаправленным ответом.
Метод вызовет ошибку, если:
- произошла ошибка SSL (например, в случае самоподписанных сертификатов).
- целевой URL недействителен.
- превышено timeout во время навигации.
- удаленный сервер не отвечает или недоступен.
- основной ресурс не удалось загрузить.
Метод не вызовет ошибку, если удаленный сервер вернет любой действительный HTTP-код состояния, включая 404 "Not Found" и 500 "Internal Server Error". Код состояния для таких ответов можно получить, вызвав response.status().
Метод либо вызывает ошибку, либо возвращает ответ основного ресурса. Единственные исключения - это навигация на about:blank
или навигация на тот же URL с другим хэшем, которые будут успешными и вернут null
.
Режим без головы не поддерживает навигацию к PDF-документу. См. проблему в upstream.
Использование
await page.goto(url);
await page.goto(url, options);
Аргументы
-
URL для перехода на страницу. URL должен включать схему, например,
https://
. Когда через параметры контекста был предоставлен baseURL и переданный URL является путем, он объединяется с помощью конструктораnew URL()
. -
options
Object (optional)-
Значение заголовка Referer. Если предоставлено, оно будет иметь приоритет над значением заголовка referer, установленным с помощью page.setExtraHTTPHeaders().
-
Максимальное время операции в миллисекундах. По умолчанию
0
- без тайм-аута. Значение по умолчанию можно изменить с помощью опцииnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout(). -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (optional)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда получен сетевой ответ и документ начал загружаться.
-
Возвращает
isClosed
Added before v1.9Указывает, что страница была закрыта.
Использование
page.isClosed();
Возвращает
locator
Added in: v1.14Метод возвращает локатор элемента, который можно использовать для выполнения действий на этой странице/фрейме. Локатор разрешается в элемент непосредственно перед выполнением действия, поэтому серия действий на одном и том же локаторе может фактически выполняться на разных элементах DOM. Это произойдет, если структура DOM между этими действиями изменилась.
Использование
page.locator(selector);
page.locator(selector, options);
Аргументы
-
Селектор для использования при разрешении DOM элемента.
-
options
Object (optional)-
Сужает результаты метода до тех, которые содержат элементы, соответствующие этому относительному локатору. Например,
article
, который имеетtext=Playwright
, соответствует<article><div>Playwright</div></article>
.Внутренний локатор должен быть относительным к внешнему локатору и запрашивается начиная с совпадения внешнего локатора, а не с корня документа. Например, вы можете найти
content
, который имеетdiv
в<article><content><div>Playwright</div></content></article>
. Однако поискcontent
, который имеетarticle div
, не удастся, потому что внутренний локатор должен быть относительным и не должен использовать элементы за пределамиcontent
.Обратите внимание, что внешние и внутренние локаторы должны принадлежать одному и тому же фрейму. Внутренний локатор не должен содержать FrameLocators.
-
hasNot
Locator (optional) Added in: v1.33#Соответствует элементам, которые не содержат элемент, соответствующий внутреннему локатору. Внутренний локатор запрашивается относительно внешнего. Например,
article
, который не имеетdiv
, соответствует<article><span>Playwright</span></article>
.Обратите внимание, что внешние и внутренние локаторы должны принадлежать одному и тому же фрейму. Внутренний локатор не должен содержать FrameLocators.
-
hasNotText
string | RegExp (optional) Added in: v1.33#Соответствует элементам, которые не содержат указанный текст где-либо внутри, возможно, в дочернем или потомственном элементе. При передаче string сопоставление нечувствительно к регистру и ищет подстроку.
-
hasText
string | RegExp (optional)#Соответствует элементам, содержащим указанный текст где-либо внутри, возможно, в дочернем или потомственном элементе. При передаче string сопоставление нечувствительно к регистру и ищет подстроку. Например,
"Playwright"
соответствует<article><div>Playwright</div></article>
.
-
Возвращает
mainFrame
Добавлено до v1.9Основной фрейм страницы. Гарантируется, что у страницы всегда есть основной фрейм, который сохраняется при навигации.
Использование
page.mainFrame();
Возвращает
opener
Добавлено до v1.9Возвращает родительскую страницу для всплывающих окон или null
для остальных случаев. Если родительская страница уже закрыта, также возвращается null
.
Использование
await page.opener();
Возвращает
pause
Добавлено в: v1.9Приостанавливает выполнение скрипта. Playwright остановит выполнение и будет ждать, пока пользователь нажмёт кнопку "Resume" в оверлее страницы или вызовет playwright.resume()
в консоли DevTools.
Во время паузы можно исследовать селекторы или выполнять ручные действия. После возобновления выполнение продолжится с того места, где было приостановлено.
Этот метод требует запуска Playwright в оконном режиме, с отключённой опцией headless.
Использование
await page.pause();
Возвращает
pdf
Добавлено до v1.9Возвращает буфер PDF.
page.pdf()
создаёт PDF-версию страницы с CSS-медиа-типом print
. Чтобы сгенерировать PDF с медиатипом screen
, вызовите page.emulateMedia() перед page.pdf()
:
По умолчанию page.pdf()
изменяет цвета для печати. Чтобы принудительно использовать точные цвета, применяйте свойство -webkit-print-color-adjust
.
Использование
// Генерирует PDF с медиатипом 'screen'.
await page.emulateMedia({ media: 'screen' });
await page.pdf({ path: 'page.pdf' });
Опции width, height и margin поддерживают значения с единицами измерения. Если единицы не указаны, значение трактуется как пиксели.
Примеры:
page.pdf({width: 100})
— ширина 100 пикселейpage.pdf({width: '100px'})
— ширина 100 пикселейpage.pdf({width: '10cm'})
— ширина 10 сантиметров
Поддерживаемые единицы измерения:
px
— пиксельin
— дюймcm
— сантиметрmm
— миллиметр
Опции format:
Letter
: 8.5in x 11inLegal
: 8.5in x 14inTabloid
: 11in x 17inLedger
: 17in x 11inA0
: 33.1in x 46.8inA1
: 23.4in x 33.1inA2
: 16.54in x 23.4inA3
: 11.7in x 16.54inA4
: 8.27in x 11.7inA5
: 5.83in x 8.27inA6
: 4.13in x 5.83in
Разметка headerTemplate и footerTemplate имеет ограничения:
- Теги
<script>
внутри шаблонов не выполняются. - Стили страницы не применяются внутри шаблонов.
Аргументы
options
Object (необязательно)displayHeaderFooter
boolean (необязательно) Отображать верхний и нижний колонтитулы. По умолчаниюfalse
.footerTemplate
string (необязательно) HTML-шаблон для нижнего колонтитула. Формат должен совпадать с headerTemplate.format
string (необязательно) Формат бумаги. Если указан, имеет приоритет над параметрами width и height. По умолчанию'Letter'
.headerTemplate
string (необязательно) HTML-шаблон для верхнего колонтитула. В шаблоне можно использовать классы:
'date'
— дата печати'title'
— заголовок документа'url'
— URL документа'pageNumber'
— текущий номер страницы'totalPages'
— общее количество страниц
height
string | number (необязательно) Высота бумаги, поддерживает единицы измерения.landscape
boolean (необязательно) Ориентация бумаги. По умолчаниюfalse
(портретная).margin
Object (необязательно)top
string | number (необязательно) Верхнее поле. По умолчанию0
.right
string | number (необязательно) Правое поле. По умолчанию0
.bottom
string | number (необязательно) Нижнее поле. По умолчанию0
.left
string | number (необязательно) Левое поле. По умолчанию0
.outline
boolean (необязательно) Добавлено в: v1.42 Включить оглавление в PDF. По умолчаниюfalse
.pageRanges
string (необязательно) Диапазоны страниц для печати, например'1-5, 8, 11-13'
. По умолчанию печатаются все страницы.path
string (необязательно) Путь для сохранения PDF. Если не указан, PDF не сохраняется на диск.preferCSSPageSize
boolean (необязательно) Приоритет размеров из CSS@page
надwidth
,height
илиformat
. По умолчаниюfalse
.printBackground
boolean (необязательно) Печатать фоновые изображения. По умолчаниюfalse
.scale
number (необязательно) Масштабирование рендеринга страницы. По умолчанию1
.tagged
boolean (необязательно) Добавлено в: v1.42 Генерировать доступный (tagged) PDF. По умолчаниюfalse
.width
string | number (необязательно) Ширина бумаги, поддерживает единицы измерения.
Возвращает
reload
Добавлено до v1.9Этот метод перезагружает текущую страницу так же, как если бы пользователь инициировал обновление браузера. Возвращает ответ основного ресурса. В случае нескольких перенаправлений навигация будет разрешена с ответом последнего перенаправления.
Использование
await page.reload();
await page.reload(options);
Аргументы
options
Object (optional)-
Максимальное время операции в миллисекундах. По умолчанию
0
- без тайм-аута. Значение по умолчанию можно изменить с помощью опцииnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout(). -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (optional)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда получен сетевой ответ и документ начал загружаться.
-
Возвращает
removeAllListeners
Добавлено в: v1.47Удаляет всех слушателей данного типа (или всех зарегистрированных слушателей, если тип не указан). Позволяет дождаться завершения асинхронных слушателей или игнорировать последующие ошибки от этих слушателей.
Использование
page.on('request', async request => {
const response = await request.response();
const body = await response.body();
console.log(body.byteLength);
});
await page.goto('https://playwright.dev', { waitUntil: 'domcontentloaded' });
// Ожидает завершения всех зарегистрированных событий 'request'.
await page.removeAllListeners('request', { behavior: 'wait' });
Аргументы
type
string (optional)#options
Object (optional)-
behavior
"wait" | "ignoreErrors" | "default" (optional)#Указывает, ждать ли уже выполняющихся слушателей и что делать, если они вызывают ошибки:
'default'
- не ждать завершения текущих вызовов слушателей (если есть), если слушатель вызывает ошибку, это может привести к необработанной ошибке'wait'
- ждать завершения текущих вызовов слушателей (если есть)'ignoreErrors'
- не ждать завершения текущих вызовов слушателей (если есть), все ошибки, вызванные слушателями после удаления, будут тихо пойманы
-
Возвращает
removeLocatorHandler
Added in: v1.44Удаляет все обработчики локаторов, добавленные с помощью page.addLocatorHandler() для конкретного локатора.
Использование
await page.removeLocatorHandler(locator);
Аргументы
-
Локатор, переданный в page.addLocatorHandler().
Возвращает
requestGC
Added in: v1.48Запрашивает у страницы выполнение сборки мусора. Обратите внимание, что нет гарантии, что все недостижимые объекты будут собраны.
Это полезно для обнаружения утечек памяти. Например, если на вашей странице есть большой объект 'suspect'
, который может утекать, вы можете проверить, что он не утек, используя WeakRef
.
// 1. На вашей странице сохраните WeakRef для "suspect".
await page.evaluate(() => globalThis.suspectWeakRef = new WeakRef(suspect));
// 2. Запросите сборку мусора.
await page.requestGC();
// 3. Убедитесь, что weak ref не ссылается на оригинальный объект.
expect(await page.evaluate(() => !globalThis.suspectWeakRef.deref())).toBe(true);
Использование
await page.requestGC();
Возвращает
route
Added before v1.9Маршрутизация предоставляет возможность изменять сетевые запросы, которые выполняются страницей.
После включения маршрутизации каждый запрос, соответствующий шаблону URL, будет приостановлен, если он не будет продолжен, выполнен или прерван.
Обработчик будет вызван только для первого URL, если ответ является перенаправлением.
page.route() не будет перехватывать запросы, перехваченные Service Worker. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив serviceWorkers в 'block'
.
page.route() не будет перехватывать первый запрос всплывающей страницы. Используйте browserContext.route() вместо этого.
Использование
Пример простого обработчика, который прерывает все запросы изображений:
const page = await browser.newPage();
await page.route('**/*.{png,jpg,jpeg}', route => route.abort());
await page.goto('https://example.com');
await browser.close();
или тот же фрагмент, используя шаблон регулярного выражения:
const page = await browser.newPage();
await page.route(/(\.png$)|(\.jpg$)/, route => route.abort());
await page.goto('https://example.com');
await browser.close();
Можно исследовать запрос, чтобы решить, какое действие предпринять. Например, имитировать все запросы, содержащие некоторые данные POST, и оставлять все остальные запросы как есть:
await page.route('/api/**', async route => {
if (route.request().postData().includes('my-string'))
await route.fulfill({ body: 'mocked-data' });
else
await route.continue();
});
Маршруты страницы имеют приоритет над маршрутами контекста браузера (настроенными с помощью browserContext.route()), когда запрос соответствует обоим обработчикам.
Чтобы удалить маршрут с его обработчиком, вы можете использовать page.unroute().
Включение маршрутизации отключает HTTP-кэш.
Аргументы
-
url
string | RegExp | function(URL):boolean#Глобальный шаблон, шаблон регулярного выражения или предикат, получающий URL для сопоставления при маршрутизации. Когда baseURL через параметры контекста был предоставлен и переданный URL является путем, он объединяется через конструктор
new URL()
. -
handler
function(Route, Request):Promise<Object> | Object#функция-обработчик для маршрутизации запроса.
-
options
Object (optional)
Возвращает
routeFromHAR
Added in: v1.23Если указано, сетевые запросы, сделанные на странице, будут обслуживаться из HAR-файла. Подробнее читайте в разделе Воспроизведение из HAR.
Playwright не будет обслуживать запросы, перехваченные Service Worker, из HAR-файла. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив serviceWorkers в 'block'
.
Использование
await page.routeFromHAR(har);
await page.routeFromHAR(har, options);
Аргументы
-
Путь к HAR файлу с предварительно записанными сетевыми данными. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории. -
options
Object (опционально)-
notFound
"abort" | "fallback" (опционально)#- Если установлено значение 'abort', любой запрос, не найденный в HAR-файле, будет прерван.
- Если установлено значение 'fallback', отсутствующие запросы будут отправлены в сеть.
По умолчанию abort.
-
Если указано, обновляет данный HAR с фактической сетевой информацией вместо обслуживания из файла. Файл записывается на диск при вызове browserContext.close().
-
updateContent
"embed" | "attach" (опционально) Added in: v1.32#Опциональная настройка для управления содержимым ресурсов. Если указано
attach
, ресурсы сохраняются как отдельные файлы или записи в ZIP-архиве. Если указаноembed
, содержимое сохраняется встраиваемым в HAR-файл. -
updateMode
"full" | "minimal" (опционально) Added in: v1.32#Когда установлено значение
minimal
, записывается только информация, необходимая для маршрутизации из HAR. Это исключает размеры, время, страницу, куки, безопасность и другие типы информации HAR, которые не используются при воспроизведении из HAR. По умолчаниюminimal
. -
url
string | RegExp (опционально)#Глобальный шаблон, регулярное выражение или предикат для сопоставления URL запроса. Только запросы с URL, соответствующим шаблону, будут обслуживаться из HAR-файла. Если не указано, все запросы обслуживаются из HAR-файла.
-
Возвращает
routeWebSocket
Added in: v1.48Этот метод позволяет изменять WebSocket-соединения, которые создаются страницей.
Обратите внимание, что только WebSocket
, созданные после вызова этого метода, будут маршрутизироваться. Рекомендуется вызывать этот метод перед навигацией по странице.
Использование
Ниже приведен пример простого мока, который отвечает на одно сообщение. Подробнее и примеры смотрите в WebSocketRoute.
await page.routeWebSocket('/ws', ws => {
ws.onMessage(message => {
if (message === 'request')
ws.send('response');
});
});
Аргументы
-
url
string | RegExp | function(URL):boolean#Только WebSocket с URL, соответствующим этому шаблону, будут маршрутизироваться. Строковый шаблон может быть относительным к baseURL контекстной опции.
-
handler
function(WebSocketRoute):Promise<Object> | Object#Функция-обработчик для маршрутизации WebSocket.
Возвращает
screenshot
Added before v1.9Возвращает буфер с захваченным скриншотом.
Использование
await page.screenshot();
await page.screenshot(options);
Аргументы
options
Object (опционально)-
animations
"disabled" | "allow" (опционально)#При установке в
"disabled"
, останавливает CSS-анимации, CSS-переходы и веб-анимации. Анимации получают разное обращение в зависимости от их продолжительности:- конечные анимации быстро перематываются до завершения, чтобы они вызвали событие
transitionend
. - бесконечные анимации отменяются до начального состояния, а затем воспроизводятся после скриншота.
По умолчанию
"allow"
, что оставляет анимации нетронутыми. - конечные анимации быстро перематываются до завершения, чтобы они вызвали событие
-
caret
"hide" | "initial" (опционально)#При установке в
"hide"
, скриншот скроет текстовый курсор. При установке в"initial"
, поведение текстового курсора не будет изменено. По умолчанию"hide"
. -
-
x
numberx-координата верхнего левого угла области обрезки
-
y
numbery-координата верхнего левого угла области обрезки
-
width
numberширина области обрезки
-
height
numberвысота области обрезки
Объект, который указывает обрезку результирующего изображения.
-
-
fullPage
boolean (опционально)#Если true, делает скриншот всей прокручиваемой страницы, вместо текущей видимой области. По умолчанию
false
. -
mask
Array<Locator> (опционально)#Укажите локаторы, которые должны быть замаскированы при создании скриншота. Замаскированные элементы будут покрыты розовым прямоугольником
#FF00FF
(настраивается с помощью maskColor), который полностью покрывает их ограничивающий прямоугольник. Маска также применяется к невидимым элементам, см. Сопоставление только видимых элементов, чтобы отключить это. -
maskColor
string (опционально) Added in: v1.35#Укажите цвет наложения для замаскированных элементов в CSS формате цвета. Цвет по умолчанию - розовый
#FF00FF
. -
omitBackground
boolean (опционально)#Скрывает белый фон по умолчанию и позволяет делать скриншоты с прозрачностью. Не применимо к изображениям
jpeg
. По умолчаниюfalse
. -
Путь к файлу для сохранения изображения. Тип скриншота будет определен по расширению файла. Если path является относительным путем, то он разрешается относительно текущей рабочей директории. Если путь не указан, изображение не будет сохранено на диск.
-
Качество изображения, от 0 до 100. Не применимо к изображениям
png
. -
scale
"css" | "device" (опционально)#При установке в
"css"
, скриншот будет иметь один пиксель на каждый css пиксель на странице. Для устройств с высоким разрешением это позволит уменьшить размер скриншотов. Использование опции"device"
создаст один пиксель на каждый пиксель устройства, так что скриншоты устройств с высоким разрешением будут в два раза больше или даже больше.По умолчанию
"device"
. -
style
string (опционально) Added in: v1.41#Текст таблицы стилей для применения при создании скриншота. Здесь вы можете скрыть динамические элементы, сделать элементы невидимыми или изменить их свойства, чтобы помочь вам создавать повторяемые скриншоты. Эта таблица стилей проникает в Shadow DOM и применяется к внутренним фреймам.
-
Максимальное время в миллисекундах. По умолчанию
0
- без тайм-аута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
type
"png" | "jpeg" (опционально)#Укажите тип скриншота, по умолчанию
png
.
-
Возвращает
setContent
Добавлено до версии v1.9Этот метод внутренне вызывает document.write(), наследуя все его специфические характеристики и поведение.
Использование
await page.setContent(html);
await page.setContent(html, options);
Аргументы
-
HTML разметка, которую нужно назначить странице.
-
options
Object (опционально)-
Максимальное время операции в миллисекундах. По умолчанию
0
- без тайм-аута. Значение по умолчанию можно изменить с помощью опцииnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout(). -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (опционально)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда сетевой ответ получен и документ начал загружаться.
-
Возвращает
setDefaultNavigationTimeout
Добавлено до версии v1.9Эта настройка изменит максимальное время навигации по умолчанию для следующих методов и связанных с ними ярлыков:
- page.goBack()
- page.goForward()
- page.goto()
- page.reload()
- page.setContent()
- page.waitForNavigation()
- page.waitForURL()
Использование
page.setDefaultNavigationTimeout(timeout);
Аргументы
setDefaultTimeout
Добавлено до версии v1.9Эта настройка изменит максимальное время по умолчанию для всех методов, принимающих опцию timeout.
page.setDefaultNavigationTimeout() имеет приоритет над page.setDefaultTimeout().
Использование
page.setDefaultTimeout(timeout);
Аргументы
setExtraHTTPHeaders
Добавлено до версии v1.9Дополнительные HTTP-заголовки будут отправляться с каждым запросом, инициированным страницей.
page.setExtraHTTPHeaders() не гарантирует порядок заголовков в исходящих запросах.
Использование
await page.setExtraHTTPHeaders(headers);
Аргументы
-
headers
Object<string, string>#Объект, содержащий дополнительные HTTP-заголовки, которые будут отправляться с каждым запросом. Все значения заголовков должны быть строками.
Возвращает
setViewportSize
Добавлено до версии v1.9В случае нескольких страниц в одном браузере каждая страница может иметь свой собственный размер области просмотра. Однако browser.newContext() позволяет установить размер области просмотра (и многое другое) для всех страниц в контексте сразу.
page.setViewportSize() изменит размер страницы. Многие веб-сайты не ожидают, что телефоны будут менять размер, поэтому вы должны установить размер области просмотра перед переходом на страницу. page.setViewportSize() также сбросит размер screen
, используйте browser.newContext() с параметрами screen
и viewport
, если вам нужен лучший контроль над этими свойствами.
Использование
const page = await browser.newPage();
await page.setViewportSize({
width: 640,
height: 480,
});
await page.goto('https://example.com');
Аргументы
Возвращает
title
Добавлено до версии v1.9Возвращает заголовок страницы.
Использование
await page.title();
Возвращает
unroute
Добавлено до версии v1.9Удаляет маршрут, созданный с помощью page.route(). Когда handler не указан, удаляет все маршруты для url.
Использование
await page.unroute(url);
await page.unroute(url, handler);
Аргументы
-
url
string | RegExp | function(URL):boolean#Глобальный шаблон, регулярное выражение или предикат, получающий URL для сопоставления при маршрутизации.
-
handler
function(Route, Request):Promise<Object> | Object (опционально)#Необязательная функция-обработчик для маршрутизации запроса.
Возвращает
unrouteAll
Добавлено в версии: v1.41Удаляет все маршруты, созданные с помощью page.route() и page.routeFromHAR().
Использование
await page.unrouteAll();
await page.unrouteAll(options);
Аргументы
options
Object (опционально)-
behavior
"wait" | "ignoreErrors" | "default" (опционально)#Указывает, следует ли ждать уже выполняющихся обработчиков и что делать, если они выбрасывают ошибки:
'default'
- не ждать завершения текущих вызовов обработчиков (если есть), если обработчик выбрасывает ошибку, это может привести к необработанной ошибке'wait'
- ждать завершения текущих вызовов обработчиков (если есть)'ignoreErrors'
- не ждать завершения текущих вызовов обработчиков (если есть), все ошибки, выброшенные обработчиками после удаления маршрута, будут тихо пойманы
-
Возвращает
url
Добавлено до версии v1.9Использование
page.url();
Возвращает
video
Добавлено до версии v1.9Объект видео, связанный с этой страницей.
Использование
page.video();
Возвращает
viewportSize
Добавлено до версии v1.9Использование
page.viewportSize();
Возвращает
waitForEvent
Added before v1.9Ожидает, когда событие будет вызвано, и передает его значение в функцию-предикат. Возвращает, когда предикат возвращает истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие будет вызвано. Возвращает значение данных события.
Использование
// Начинаем ожидание загрузки перед кликом. Обратите внимание, что нет await.
const downloadPromise = page.waitForEvent('download');
await page.getByText('Download file').click();
const download = await downloadPromise;
Аргументы
-
Имя события, обычно передаваемое в
*.on(event)
. -
optionsOrPredicate
function | Object (optional)#-
predicate
functionПолучает данные события и разрешается в истинное значение, когда ожидание должно завершиться.
-
timeout
number (optional)Максимальное время ожидания в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
Либо предикат, который получает событие, либо объект с опциями. Необязательно.
-
-
options
Object (optional)
Возвращает
waitForFunction
Added before v1.9Возвращает, когда pageFunction возвращает истинное значение. Разрешается в JSHandle истинного значения.
Использование
page.waitForFunction() может быть использован для наблюдения за изменением размера области просмотра:
const { webkit } = require('playwright'); // Или 'chromium' или 'firefox'.
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
const watchDog = page.waitForFunction(() => window.innerWidth < 100);
await page.setViewportSize({ width: 50, height: 50 });
await watchDog;
await browser.close();
})();
Чтобы передать аргумент в предикат функции page.waitForFunction():
const selector = '.foo';
await page.waitForFunction(selector => !!document.querySelector(selector), selector);
Аргументы
-
pageFunction
function | string#Функция, которая будет выполнена в контексте страницы.
-
arg
EvaluationArgument (optional)#Необязательный аргумент для передачи в pageFunction.
-
options
Object (optional)-
polling
number | "raf" (optional)#Если polling равно
'raf'
, то pageFunction постоянно выполняется вrequestAnimationFrame
callback. Если polling является числом, то оно рассматривается как интервал в миллисекундах, с которым функция будет выполняться. По умолчаниюraf
. -
Максимальное время ожидания в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
waitForLoadState
Added before v1.9Возвращает, когда достигнуто требуемое состояние загрузки.
Это разрешается, когда страница достигает требуемого состояния загрузки, по умолчанию load
. Навигация должна быть завершена, когда вызывается этот метод. Если текущий документ уже достиг требуемого состояния, разрешается немедленно.
В большинстве случаев этот метод не нужен, потому что Playwright автоматически ожидает перед каждым действием.
Использование
await page.getByRole('button').click(); // Клик вызывает навигацию.
await page.waitForLoadState(); // Обещание разрешается после события 'load'.
const popupPromise = page.waitForEvent('popup');
await page.getByRole('button').click(); // Клик вызывает всплывающее окно.
const popup = await popupPromise;
await popup.waitForLoadState('domcontentloaded'); // Ожидание события 'DOMContentLoaded'.
console.log(await popup.title()); // Всплывающее окно готово к использованию.
Аргументы
-
state
"load" | "domcontentloaded" | "networkidle" (optional)#Необязательное состояние загрузки для ожидания, по умолчанию
load
. Если состояние уже достигнуто при загрузке текущего документа, метод разрешается немедленно. Может быть одним из:'load'
- ожидание, когда событиеload
будет вызвано.'domcontentloaded'
- ожидание, когда событиеDOMContentLoaded
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ ожидание, пока не будет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.
-
options
Object (optional)-
Максимальное время операции в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout().
-
Возвращает
waitForRequest
Added before v1.9Ожидает соответствующий запрос и возвращает его. Подробнее о событиях см. в разделе ожидание события.
Использование
// Начинаем ожидание запроса перед кликом. Обратите внимание, что await отсутствует.
const requestPromise = page.waitForRequest('https://example.com/resource');
await page.getByText('trigger request').click();
const request = await requestPromise;
// Альтернативный способ с предикатом. Обратите внимание, что await отсутствует.
const requestPromise = page.waitForRequest(request =>
request.url() === 'https://example.com' && request.method() === 'GET',
);
await page.getByText('trigger request').click();
const request = await requestPromise;
Аргументы
-
urlOrPredicate
string | RegExp | function(Request):boolean | Promise<boolean>#Строка URL запроса, регулярное выражение или предикат, получающий объект Request.
-
options
Object (опционально)-
Максимальное время ожидания в миллисекундах, по умолчанию 30 секунд, передайте
0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить с помощью метода page.setDefaultTimeout().
-
Возвращает
waitForResponse
Added before v1.9Возвращает соответствующий ответ. Подробнее о событиях см. в разделе ожидание события.
Использование
// Начинаем ожидание ответа перед кликом. Обратите внимание, что await отсутствует.
const responsePromise = page.waitForResponse('https://example.com/resource');
await page.getByText('trigger response').click();
const response = await responsePromise;
// Альтернативный способ с предикатом. Обратите внимание, что await отсутствует.
const responsePromise = page.waitForResponse(response =>
response.url() === 'https://example.com' && response.status() === 200
&& response.request().method() === 'GET'
);
await page.getByText('trigger response').click();
const response = await responsePromise;
Аргументы
-
urlOrPredicate
string | RegExp | function(Response):boolean | Promise<boolean>#Строка URL запроса, регулярное выражение или предикат, получающий объект Response. Когда baseURL предоставлен через параметры контекста и переданный URL является путем, он объединяется с помощью конструктора
new URL()
. -
options
Object (опционально)-
Максимальное время ожидания в миллисекундах, по умолчанию 30 секунд, передайте
0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
waitForURL
Added in: v1.11Ожидает, пока основной фрейм перейдет на указанный URL.
Использование
await page.click('a.delayed-navigation'); // Клик по ссылке косвенно вызовет навигацию
await page.waitForURL('**/target.html');
Аргументы
-
url
string | RegExp | function(URL):boolean#Глобальный шаблон, регулярное выражение или предикат, получающий URL для сопоставления во время ожидания навигации. Обратите внимание, что если параметр является строкой без символов подстановки, метод будет ожидать навигации к URL, который точно равен строке.
-
options
Object (опционально)-
Максимальное время операции в миллисекундах. По умолчанию
0
- без тайм-аута. Значение по умолчанию можно изменить через опциюnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout(). -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (опционально)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда сетевой ответ получен и документ начал загружаться.
-
Возвращает
workers
Added before v1.9Этот метод возвращает все выделенные WebWorkers, связанные со страницей.
Это не включает ServiceWorkers
Использование
page.workers();
Возвращает
Свойства
clock
Добавлено в: v1.45Playwright имеет возможность имитировать работу часов и течение времени.
Использование
page.clock
Тип
coverage
Добавлено до v1.9На данный момент доступно только для Chromium.
Реализация покрытия, специфичная для браузера. Подробнее см. Coverage.
Использование
page.coverage
Тип
keyboard
Добавлено до v1.9Использование
page.keyboard
Тип
mouse
Добавлено до v1.9Использование
page.mouse
Тип
request
Добавлено в: v1.16Помощник для тестирования API, связанный с этой страницей. Этот метод возвращает тот же экземпляр, что и browserContext.request в контексте страницы. Подробнее см. browserContext.request.
Использование
page.request
Тип
touchscreen
Добавлено до v1.9Использование
page.touchscreen
Тип
События
on('close')
Добавлено до v1.9Вызывается, когда страница закрывается.
Использование
page.on('close', data => {});
Данные события
on('console')
Добавлено до v1.9Вызывается, когда JavaScript на странице вызывает один из методов консольного API, например, console.log
или console.dir
.
Аргументы, переданные в console.log
, доступны в аргументе обработчика события ConsoleMessage.
Использование
page.on('console', async msg => {
const values = [];
for (const arg of msg.args())
values.push(await arg.jsonValue());
console.log(...values);
});
await page.evaluate(() => console.log('hello', 5, { foo: 'bar' }));
Данные события
on('crash')
Добавлено до v1.9Вызывается, когда страница падает. Страницы браузера могут падать, если они пытаются выделить слишком много памяти. Когда страница падает, текущие и последующие операции будут вызывать исключения.
Наиболее распространенный способ справиться с падениями - поймать исключение:
try {
// Падение может произойти во время клика.
await page.click('button');
// Или во время ожидания события.
await page.waitForEvent('popup');
} catch (e) {
// Когда страница падает, сообщение об исключении содержит 'crash'.
}
Использование
page.on('crash', data => {});
Данные события
on('dialog')
Добавлено до v1.9Вызывается, когда появляется JavaScript-диалог, такой как alert
, prompt
, confirm
или beforeunload
. Слушатель должен либо dialog.accept(), либо dialog.dismiss() диалог - в противном случае страница заморозится, ожидая диалога, и действия, такие как клик, никогда не завершатся.
Использование
page.on('dialog', dialog => dialog.accept());
Когда нет слушателей page.on('dialog') или browserContext.on('dialog'), все диалоги автоматически отклоняются.
Данные события
on('domcontentloaded')
Добавлено в: v1.9Вызывается, когда JavaScript-событие DOMContentLoaded
отправляется.
Использование
page.on('domcontentloaded', data => {});
Данные события
on('download')
Добавлено до v1.9Вызывается, когда начинается загрузка вложения. Пользователь может получить доступ к основным операциям с файлами на загруженном контенте через переданный экземпляр Download.
Использование
page.on('download', data => {});
Данные события
on('filechooser')
Добавлено в: v1.9Вызывается, когда предполагается появление выбора файла, например, после нажатия на <input type=file>
. Playwright может ответить на это, установив файлы ввода с помощью fileChooser.setFiles(), которые могут быть загружены после этого.
page.on('filechooser', async fileChooser => {
await fileChooser.setFiles(path.join(__dirname, '/tmp/myfile.pdf'));
});
Использование
page.on('filechooser', data => {});
Данные события
on('frameattached')
Добавлено в: v1.9Вызывается, когда фрейм присоединяется.
Использование
page.on('frameattached', data => {});
Данные события
on('framedetached')
Добавлено в: v1.9Вызывается, когда фрейм отсоединяется.
Использование
page.on('framedetached', data => {});
Данные события
on('framenavigated')
Добавлено в: v1.9Вызывается, когда фрейм переходит на новый URL.
Использование
page.on('framenavigated', data => {});
Данные события
on('load')
Добавлено до v1.9Вызывается, когда JavaScript событие load
отправляется.
Использование
page.on('load', data => {});
Данные события
on('pageerror')
Добавлено в: v1.9Вызывается, когда на странице происходит необработанное исключение.
// Логировать все необработанные ошибки в терминал
page.on('pageerror', exception => {
console.log(`Необработанное исключение: "${exception}"`);
});
// Перейти на страницу с исключением.
await page.goto('data:text/html,<script>throw new Error("Test")</script>');
Использование
page.on('pageerror', data => {});
Данные события
on('popup')
Добавлено до v1.9Вызывается, когда страница открывает новую вкладку или окно. Это событие вызывается в дополнение к browserContext.on('page'), но только для всплывающих окон, относящихся к этой странице.
Самый ранний момент, когда страница доступна, это когда она перешла на начальный URL. Например, при открытии всплывающего окна с помощью window.open('http://example.com')
, это событие сработает, когда сетевой запрос к "http://example.com" будет выполнен и его ответ начнет загружаться во всплывающем окне. Если вы хотите маршрутизировать/слушать этот сетевой запрос, используйте browserContext.route() и browserContext.on('request') соответственно, вместо аналогичных методов на Page.
// Начать ожидание всплывающего окна перед кликом. Обратите внимание, что нет await.
const popupPromise = page.waitForEvent('popup');
await page.getByText('open the popup').click();
const popup = await popupPromise;
console.log(await popup.evaluate('location.href'));
Используйте page.waitForLoadState(), чтобы дождаться, пока страница достигнет определенного состояния (в большинстве случаев это не потребуется).
Использование
page.on('popup', data => {});
Данные события
on('request')
Добавлено до версии v1.9Вызывается, когда страница отправляет запрос. Объект request является доступным только для чтения. Чтобы перехватывать и изменять запросы, см. page.route() или browserContext.route().
Использование
page.on('request', data => {});
Данные события
on('requestfailed')
Добавлено в версии: v1.9Вызывается, когда запрос не удается выполнить, например, из-за истечения времени ожидания.
page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});
Ответы с ошибками HTTP, такие как 404 или 503, все равно считаются успешными с точки зрения HTTP, поэтому запрос завершится событием page.on('requestfinished'), а не page.on('requestfailed'). Запрос будет считаться неудачным только в том случае, если клиент не может получить HTTP-ответ от сервера, например, из-за сетевой ошибки net::ERR_FAILED.
Использование
page.on('requestfailed', data => {});
Данные события
on('requestfinished')
Добавлено в версии: v1.9Вызывается, когда запрос успешно завершается после загрузки тела ответа. Для успешного ответа последовательность событий: request
, response
и requestfinished
.
Использование
page.on('requestfinished', data => {});
Данные события
on('response')
Добавлено до версии v1.9Вызывается, когда статус и заголовки response получены для запроса. Для успешного ответа последовательность событий: request
, response
и requestfinished
.
Использование
page.on('response', data => {});
Данные события
on('websocket')
Добавлено в версии: v1.9Вызывается, когда отправляется запрос WebSocket.
Использование
page.on('websocket', data => {});
Данные события
on('worker')
Добавлено до версии v1.9Вызывается, когда страница порождает выделенный WebWorker.
Использование
page.on('worker', data => {});
Данные события
Устарело
$
Добавлено в версии: v1.9Используйте основанный на локаторах page.locator() вместо этого. Подробнее о локаторах.
Метод находит элемент, соответствующий указанному селектору на странице. Если ни один элемент не соответствует селектору, возвращаемое значение разрешается в null
. Чтобы дождаться появления элемента на странице, используйте locator.waitFor().
Использование
await page.$(selector);
await page.$(selector, options);
Аргументы
-
Селектор для поиска.
-
options
Object (опционально)
Возвращает
$$
Added in: v1.9Use locator-based page.locator() instead. Read more about locators.
Метод находит все элементы, соответствующие указанному селектору на странице. Если ни один элемент не соответствует селектору, возвращаемое значение будет равно []
.
Использование
await page.$$(selector);
Аргументы
Возвращает
$eval
Added in: v1.9This method does not wait for the element to pass actionability checks and therefore can lead to the flaky tests. Use locator.evaluate(), other Locator helper methods or web-first assertions instead.
Метод находит элемент, соответствующий указанному селектору на странице, и передает его в качестве первого аргумента в pageFunction. Если ни один элемент не соответствует селектору, метод выбрасывает ошибку. Возвращает значение pageFunction.
Если pageFunction возвращает Promise, то page.$eval() будет ожидать разрешения промиса и вернет его значение.
Использование
const searchValue = await page.$eval('#search', el => el.value);
const preloadHref = await page.$eval('link[rel=preload]', el => el.href);
const html = await page.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
// В TypeScript, этот пример требует явной аннотации типа (HTMLLinkElement) на el:
const preloadHrefTS = await page.$eval('link[rel=preload]', (el: HTMLLinkElement) => el.href);
Аргументы
-
Селектор для выполнения запроса.
-
pageFunction
function(Element) | string#Функция для выполнения в контексте страницы.
-
arg
EvaluationArgument (optional)#Необязательный аргумент для передачи в pageFunction.
-
options
Object (optional)
Возвращает
$$eval
Added in: v1.9In most cases, locator.evaluateAll(), other Locator helper methods and web-first assertions do a better job.
Метод находит все элементы, соответствующие указанному селектору на странице, и передает массив найденных элементов в качестве первого аргумента в pageFunction. Возвращает результат вызова pageFunction.
Если pageFunction возвращает Promise, то page.$$eval() будет ожидать разрешения промиса и вернет его значение.
Использование
const divCounts = await page.$$eval('div', (divs, min) => divs.length >= min, 10);
Аргументы
-
Селектор для выполнения запроса.
-
pageFunction
function(Array<Element>) | string#Функция для выполнения в контексте страницы.
-
arg
EvaluationArgument (optional)#Необязательный аргумент для передачи в pageFunction.
Возвращает
accessibility
Added before v1.9Использование
page.accessibility
Тип
check
Добавлено до v1.9Используйте основанный на локаторах locator.check() вместо этого. Подробнее о локаторах.
Этот метод отмечает элемент, соответствующий selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Убедитесь, что найденный элемент является флажком или радиокнопкой. Если нет, этот метод выбрасывает исключение. Если элемент уже отмечен, этот метод возвращается немедленно.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse, чтобы кликнуть в центр элемента.
- Убедитесь, что элемент теперь отмечен. Если нет, этот метод выбрасывает исключение.
Когда все шаги в совокупности не завершены в течение указанного timeout, этот метод выбрасывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
await page.check(selector);
await page.check(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
Следует ли обходить проверки actionability. По умолчанию
false
. -
noWaitAfter
boolean (опционально)#УстарелоЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
position
Object (опционально) Добавлено в: v1.11#Точка, используемая относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
trial
boolean (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения.
-
Возвращает
click
Добавлено до v1.9Используйте основанный на локаторах locator.click() вместо этого. Подробнее о локаторах.
Этот метод кликает по элементу, соответствующему selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse, чтобы кликнуть в центр элемента или в указанную position.
- Подождите, пока инициированные навигации не завершатся успешно или не завершатся с ошибкой, если только не установлена опция noWaitAfter.
Когда все шаги в совокупности не завершены в течение указанного timeout, этот метод выбрасывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
await page.click(selector);
await page.click(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
button
"left" | "right" | "middle" (опционально)#По умолчанию
left
. -
clickCount
number (опционально)#По умолчанию 1. См. UIEvent.detail.
-
Время ожидания между
mousedown
иmouseup
в миллисекундах. По умолчанию 0. -
Следует ли обходить проверки actionability. По умолчанию
false
. -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (опционально)#Модификаторные клавиши для нажатия. Гарантирует, что только эти модификаторы будут нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается в "Control" на Windows и Linux и в "Meta" на macOS.
-
noWaitAfter
boolean (опционально)#УстарелоВ будущем эта опция будет по умолчанию
true
.Действия, инициирующие навигации, ожидают, пока эти навигации не произойдут и страницы не начнут загружаться. Вы можете отказаться от ожидания, установив этот флаг. Вам понадобится эта опция только в исключительных случаях, таких как навигация на недоступные страницы. По умолчанию
false
. -
position
Object (опционально)#Точка, используемая относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
trial
boolean (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiers
будут нажаты независимо отtrial
, чтобы позволить тестировать элементы, которые видны только при нажатии этих клавиш.
-
Возвращает
dblclick
Добавлено до версии v1.9Используйте основанный на локаторах locator.dblclick() вместо этого. Подробнее о локаторах.
Этот метод выполняет двойной клик по элементу, соответствующему selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если такого элемента нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse для двойного клика в центре элемента или в указанной position.
Если все шаги не завершены в течение указанного timeout, этот метод выбрасывает TimeoutError. Установка нулевого таймаута отключает это.
page.dblclick()
генерирует два события click
и одно событие dblclick
.
Использование
await page.dblclick(selector);
await page.dblclick(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
button
"left" | "right" | "middle" (опционально)#По умолчанию
left
. -
Время ожидания между
mousedown
иmouseup
в миллисекундах. По умолчанию 0. -
Пропускать ли проверки actionability. По умолчанию
false
. -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (опционально)#Модификаторные клавиши для нажатия. Гарантирует, что только эти модификаторы будут нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается как "Control" на Windows и Linux и как "Meta" на macOS.
-
noWaitAfter
boolean (опционально)#УстарелоЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
position
Object (опционально)#Точка, используемая относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
trial
boolean (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiers
будут нажаты независимо отtrial
, чтобы позволить тестировать элементы, которые видны только при нажатии этих клавиш.
-
Возвращает
dispatchEvent
Добавлено до версии v1.9Используйте основанный на локаторах locator.dispatchEvent() вместо этого. Подробнее о локаторах.
Пример ниже генерирует событие click
на элементе. Независимо от состояния видимости элемента, click
генерируется. Это эквивалентно вызову element.click().
Использование
await page.dispatchEvent('button#submit', 'click');
Внутри создается экземпляр события на основе указанного type, инициализируется с помощью свойств eventInit и генерируется на элементе. События по умолчанию composed
, cancelable
и всплывают.
Поскольку eventInit специфичен для события, пожалуйста, обратитесь к документации по событиям для списков начальных свойств:
- DeviceMotionEvent
- DeviceOrientationEvent
- DragEvent
- Event
- FocusEvent
- KeyboardEvent
- MouseEvent
- PointerEvent
- TouchEvent
- WheelEvent
Вы также можете указать JSHandle
в качестве значения свойства, если хотите, чтобы живые объекты передавались в событие:
// Обратите внимание, что вы можете создать DataTransfer только в Chromium и Firefox
const dataTransfer = await page.evaluateHandle(() => new DataTransfer());
await page.dispatchEvent('#source', 'dragstart', { dataTransfer });
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Тип DOM события:
"click"
,"dragstart"
, и т.д. -
eventInit
EvaluationArgument (опционально)#Опциональные специфичные для события свойства инициализации.
-
options
Object (опционально)-
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
fill
Added before v1.9Use locator-based locator.fill() instead. Read more about locators.
Этот метод ожидает элемент, соответствующий selector, ожидает проверки actionability, фокусирует элемент, заполняет его и вызывает событие input
после заполнения. Обратите внимание, что вы можете передать пустую строку, чтобы очистить поле ввода.
Если целевой элемент не является элементом <input>
, <textarea>
или [contenteditable]
, этот метод вызывает ошибку. Однако, если элемент находится внутри элемента <label>
, который имеет связанный control, будет заполнен именно этот контрол.
Чтобы отправить более детализированные события клавиатуры, используйте locator.pressSequentially().
Использование
await page.fill(selector, value);
await page.fill(selector, value, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Значение для заполнения элемента
<input>
,<textarea>
или[contenteditable]
. -
options
Object (optional)-
force
boolean (optional) Added in: v1.13#Нужно ли обходить проверки actionability. По умолчанию
false
. -
noWaitAfter
boolean (optional)#DeprecatedЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью параметраactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
focus
Added before v1.9Use locator-based locator.focus() instead. Read more about locators.
Этот метод получает элемент с selector и фокусирует его. Если нет элемента, соответствующего selector, метод ждет, пока соответствующий элемент не появится в DOM.
Использование
await page.focus(selector);
await page.focus(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью параметраactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
getAttribute
Added before v1.9Use locator-based locator.getAttribute() instead. Read more about locators.
Возвращает значение атрибута элемента.
Использование
await page.getAttribute(selector, name);
await page.getAttribute(selector, name, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Имя атрибута, чтобы получить его значение.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью параметраactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
hover
Added before v1.9Use locator-based locator.hover() instead. Read more about locators.
Этот метод наводит курсор на элемент, соответствующий selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в поле зрения, если это необходимо.
- Используйте page.mouse, чтобы навести курсор на центр элемента или указанную position.
Если все шаги в совокупности не завершились в течение указанного timeout, этот метод вызывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
await page.hover(selector);
await page.hover(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
Следует ли обходить проверки actionability. По умолчанию
false
. -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (optional)#Модификаторные клавиши для нажатия. Гарантирует, что только эти модификаторы будут нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается как "Control" на Windows и Linux и как "Meta" на macOS.
-
noWaitAfter
boolean (optional) Added in: v1.28#DeprecatedЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
Точка, используемая относительно верхнего левого угла рамки отступов элемента. Если не указано, используется видимая точка элемента.
-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
trial
boolean (optional) Added in: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiers
будут нажаты независимо отtrial
, чтобы позволить тестировать элементы, которые видны только при нажатии этих клавиш.
-
Возвращает
innerHTML
Added before v1.9Use locator-based locator.innerHTML() instead. Read more about locators.
Возвращает element.innerHTML
.
Использование
await page.innerHTML(selector);
await page.innerHTML(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
innerText
Added before v1.9Use locator-based locator.innerText() instead. Read more about locators.
Возвращает element.innerText
.
Использование
await page.innerText(selector);
await page.innerText(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
inputValue
Added in: v1.13Use locator-based locator.inputValue() instead. Read more about locators.
Возвращает input.value
для выбранного элемента <input>
, <textarea>
или <select>
.
Вызывает ошибку для элементов, не являющихся вводом. Однако, если элемент находится внутри элемента <label>
, который имеет ассоциированный control, возвращает значение этого контрола.
Использование
await page.inputValue(selector);
await page.inputValue(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
strict
boolean (опционально) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить через опциюactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
isChecked
Added before v1.9Use locator-based locator.isChecked() instead. Read more about locators.
Возвращает, отмечен ли элемент. Вызывает ошибку, если элемент не является флажком или радиокнопкой.
Использование
await page.isChecked(selector);
await page.isChecked(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
strict
boolean (опционально) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить через опциюactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
isDisabled
Added before v1.9Use locator-based locator.isDisabled() instead. Read more about locators.
Возвращает, отключен ли элемент, противоположность enabled.
Использование
await page.isDisabled(selector);
await page.isDisabled(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
strict
boolean (опционально) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить через опциюactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
isEditable
Added before v1.9Use locator-based locator.isEditable() instead. Read more about locators.
Возвращает, является ли элемент редактируемым.
Использование
await page.isEditable(selector);
await page.isEditable(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (опционально)-
strict
boolean (опционально) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить через опциюactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
isEnabled
Added before v1.9Use locator-based locator.isEnabled() instead. Read more about locators.
Возвращает, является ли элемент enabled.
Использование
await page.isEnabled(selector);
await page.isEnabled(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить через опциюactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
isHidden
Added before v1.9Use locator-based locator.isHidden() instead. Read more about locators.
Возвращает, является ли элемент скрытым, противоположность visible. selector, который не соответствует ни одному элементу, считается скрытым.
Использование
await page.isHidden(selector);
await page.isHidden(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Deprecated
Эта опция игнорируется. page.isHidden() не ждет, пока элемент станет скрытым, и возвращается немедленно.
-
Возвращает
isVisible
Added before v1.9Use locator-based locator.isVisible() instead. Read more about locators.
Возвращает, является ли элемент visible. selector, который не соответствует ни одному элементу, считается невидимым.
Использование
await page.isVisible(selector);
await page.isVisible(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Deprecated
Эта опция игнорируется. page.isVisible() не ждет, пока элемент станет видимым, и возвращается немедленно.
-
Возвращает
press
Added before v1.9Use locator-based locator.press() instead. Read more about locators.
Фокусирует элемент, а затем использует keyboard.down() и keyboard.up().
key может указывать предполагаемое значение keyboardEvent.key или один символ для генерации текста. Надмножество значений key можно найти здесь. Примеры клавиш:
F1
- F12
, Digit0
- Digit9
, KeyA
- KeyZ
, Backquote
, Minus
, Equal
, Backslash
, Backspace
, Tab
, Delete
, Escape
, ArrowDown
, End
, Enter
, Home
, Insert
, PageDown
, PageUp
, ArrowRight
, ArrowUp
и т.д.
Также поддерживаются следующие модификационные сочетания: Shift
, Control
, Alt
, Meta
, ShiftLeft
, ControlOrMeta
. ControlOrMeta
разрешается как Control
на Windows и Linux и как Meta
на macOS.
Удержание Shift
напечатает текст, соответствующий key в верхнем регистре.
Если key является одним символом, он чувствителен к регистру, поэтому значения a
и A
будут генерировать разные тексты.
Также поддерживаются сочетания клавиш, такие как key: "Control+o"
, key: "Control++
или key: "Control+Shift+T"
. При указании с модификатором, модификатор нажимается и удерживается, пока не будет нажата последующая клавиша.
Использование
const page = await browser.newPage();
await page.goto('https://keycode.info');
await page.press('body', 'A');
await page.screenshot({ path: 'A.png' });
await page.press('body', 'ArrowLeft');
await page.screenshot({ path: 'ArrowLeft.png' });
await page.press('body', 'Shift+O');
await page.screenshot({ path: 'O.png' });
await browser.close();
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Имя клавиши для нажатия или символ для генерации, например,
ArrowLeft
илиa
. -
options
Object (опционально)-
Время ожидания между
keydown
иkeyup
в миллисекундах. По умолчанию 0. -
noWaitAfter
boolean (опционально)#УстарелоЭта опция по умолчанию будет
true
в будущем.Действия, инициирующие навигации, ожидают, пока эти навигации произойдут и страницы начнут загружаться. Вы можете отказаться от ожидания, установив этот флаг. Эта опция нужна только в исключительных случаях, таких как навигация на недоступные страницы. По умолчанию
false
. -
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
selectOption
Добавлено до v1.9Используйте основанный на локаторах locator.selectOption() вместо этого. Подробнее о локаторах.
Этот метод ожидает элемент, соответствующий selector, ожидает проверки actionability, ждет, пока все указанные опции будут присутствовать в элементе <select>
, и выбирает эти опции.
Если целевой элемент не является элементом <select>
, этот метод выбрасывает ошибку. Однако, если элемент находится внутри элемента <label>
, который имеет ассоциированный control, будет использован этот control.
Возвращает массив значений опций, которые были успешно выбраны.
Вызывает событие change
и input
, как только все предоставленные опции были выбраны.
Использование
// Одиночный выбор, соответствующий значению или метке
page.selectOption('select#colors', 'blue');
// одиночный выбор, соответствующий метке
page.selectOption('select#colors', { label: 'Blue' });
// множественный выбор
page.selectOption('select#colors', ['red', 'green', 'blue']);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
values
null | string | ElementHandle | Array<string> | Object | Array<ElementHandle> | Array<Object>#-
value
string (опционально)Соответствует
option.value
. Опционально. -
label
string (опционально)Соответствует
option.label
. Опционально. -
index
number (опционально)Соответствует индексу. Опционально.
Опции для выбора. Если у
<select>
есть атрибутmultiple
, все соответствующие опции выбираются, в противном случае выбирается только первая опция, соответствующая одной из переданных опций. Строковые значения соответствуют как значениям, так и меткам. Опция считается соответствующей, если все указанные свойства совпадают. -
-
options
Object (опционально)-
force
boolean (опционально) Добавлено в: v1.13#Следует ли обходить проверки actionability. По умолчанию
false
. -
noWaitAfter
boolean (опционально)#УстарелоЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
setChecked
Added in: v1.15Use locator-based locator.setChecked() instead. Read more about locators.
Этот метод устанавливает или снимает флажок элемента, соответствующего selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Убедитесь, что найденный элемент является флажком или радиокнопкой. Если нет, этот метод вызывает ошибку.
- Если элемент уже имеет правильное состояние флажка, этот метод немедленно возвращает управление.
- Подождите, пока не будут выполнены проверки actionability для найденного элемента, если не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в поле видимости, если это необходимо.
- Используйте page.mouse для нажатия в центре элемента.
- Убедитесь, что элемент теперь отмечен или не отмечен. Если нет, этот метод вызывает ошибку.
Если все шаги не завершены в течение указанного timeout, этот метод вызывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
await page.setChecked(selector, checked);
await page.setChecked(selector, checked, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Указывает, следует ли установить или снять флажок.
-
options
Object (optional)-
Указывает, следует ли обходить проверки actionability. По умолчанию
false
. -
noWaitAfter
boolean (optional)#DeprecatedЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
Точка, используемая относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию, без его выполнения.
-
Возвращает
setInputFiles
Added before v1.9Use locator-based locator.setInputFiles() instead. Read more about locators.
Устанавливает значение элемента ввода файла в указанные пути к файлам или файлы. Если некоторые из filePaths
являются относительными путями, они разрешаются относительно текущего рабочего каталога. Для пустого массива очищает выбранные файлы. Для входных данных с атрибутом [webkitdirectory]
поддерживается только один путь к каталогу.
Этот метод ожидает, что selector указывает на input element. Однако, если элемент находится внутри элемента <label>
, который имеет связанную control, он нацелен на контроль вместо этого.
Использование
await page.setInputFiles(selector, files);
await page.setInputFiles(selector, files, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
noWaitAfter
boolean (optional)#DeprecatedЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
tap
Added before v1.9Use locator-based locator.tap() instead. Read more about locators.
Этот метод выполняет нажатие на элемент, соответствующий selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если такого элемента нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.touchscreen для нажатия на центр элемента или указанную position.
Если все шаги в совокупности не завершились в течение указанного timeout, этот метод выбрасывает TimeoutError. Передача нулевого таймаута отключает это.
Метод page.tap() выбросит ошибку, если опция hasTouch контекста браузера равна false.
Использование
await page.tap(selector);
await page.tap(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
Следует ли обходить проверки actionability. По умолчанию
false
. -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (optional)#Модификаторные клавиши для нажатия. Гарантирует, что только эти модификаторы будут нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается в "Control" на Windows и Linux и в "Meta" на macOS.
-
noWaitAfter
boolean (optional)#DeprecatedЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
Точка для использования относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
trial
boolean (optional) Added in: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiers
будут нажаты независимо отtrial
, чтобы позволить тестировать элементы, которые видны только при нажатии этих клавиш.
-
Возвращает
textContent
Added before v1.9Use locator-based locator.textContent() instead. Read more about locators.
Возвращает element.textContent
.
Использование
await page.textContent(selector);
await page.textContent(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
type
Added before v1.9In most cases, you should use locator.fill() instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use locator.pressSequentially().
Отправляет событие keydown
, keypress
/input
и keyup
для каждого символа в тексте. page.type
может использоваться для отправки детализированных событий клавиатуры. Для заполнения значений в полях формы используйте page.fill().
Чтобы нажать специальную клавишу, такую как Control
или ArrowDown
, используйте keyboard.press().
Использование
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Текст для ввода в фокусированный элемент.
-
options
Object (optional)-
Время ожидания между нажатиями клавиш в миллисекундах. По умолчанию 0.
-
noWaitAfter
boolean (optional)#DeprecatedЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
uncheck
Added before v1.9Use locator-based locator.uncheck() instead. Read more about locators.
Этот метод снимает отметку с элемента, соответствующего selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Убедитесь, что найденный элемент является флажком или радиокнопкой. Если нет, этот метод вызывает ошибку. Если элемент уже снят с отметки, этот метод сразу возвращает управление.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в поле зрения, если это необходимо.
- Используйте page.mouse для нажатия в центре элемента.
- Убедитесь, что элемент теперь снят с отметки. Если нет, этот метод вызывает ошибку.
Когда все шаги в совокупности не завершены в течение указанного timeout, этот метод вызывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
await page.uncheck(selector);
await page.uncheck(selector, options);
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
options
Object (optional)-
Следует ли обходить проверки actionability. По умолчанию
false
. -
noWaitAfter
boolean (optional)#DeprecatedЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
position
Object (optional) Added in: v1.11#Точка, используемая относительно верхнего левого угла рамки отступов элемента. Если не указано, используется видимая точка элемента.
-
strict
boolean (optional) Added in: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов вызывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout(). -
trial
boolean (optional) Added in: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения.
-
Возвращает
waitForNavigation
Added before v1.9This method is inherently racy, please use page.waitForURL() instead.
Ожидает навигации основного фрейма и возвращает ответ основного ресурса. В случае нескольких перенаправлений навигация будет разрешена с ответом последнего перенаправления. В случае навигации к другому якорю или навигации из-за использования History API, навигация будет разрешена с null
.
Использование
Это разрешается, когда страница переходит на новый URL или перезагружается. Это полезно, когда вы выполняете код, который косвенно вызывает навигацию страницы. Например, цель клика имеет обработчик onclick
, который вызывает навигацию из setTimeout
. Рассмотрим этот пример:
// Начните ожидание навигации перед кликом. Обратите внимание, что нет await.
const navigationPromise = page.waitForNavigation();
await page.getByText('Navigate after timeout').click();
await navigationPromise;
Использование History API для изменения URL считается навигацией.
Аргументы
options
Object (optional)-
Максимальное время операции в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить с помощью опцииnavigationTimeout
в конфигурации или с помощью методов browserContext.setDefaultNavigationTimeout(), browserContext.setDefaultTimeout(), page.setDefaultNavigationTimeout() или page.setDefaultTimeout(). -
url
string | RegExp | function(URL):boolean (optional)#Глобальный шаблон, регулярное выражение или предикат, получающий URL для совпадения при ожидании навигации. Обратите внимание, что если параметр является строкой без символов подстановки, метод будет ожидать навигации к URL, который точно равен строке.
-
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (optional)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда сетевой ответ получен и документ начал загружаться.
-
Возвращает
waitForSelector
Added before v1.9Use web assertions that assert visibility or a locator-based locator.waitFor() instead. Read more about locators.
Возвращает, когда элемент, указанный селектором, удовлетворяет опции state. Возвращает null
, если ожидание для hidden
или detached
.
Playwright автоматически ожидает, когда элемент будет готов перед выполнением действия. Использование объектов Locator и веб-утверждений в первую очередь делает код свободным от ожидания селектора.
Ожидает, когда selector удовлетворит опции state (либо появится/исчезнет из DOM, либо станет видимым/скрытым). Если в момент вызова метода selector уже удовлетворяет условие, метод вернется немедленно. Если селектор не удовлетворяет условие в течение timeout миллисекунд, функция выбросит исключение.
Использование
Этот метод работает через навигации:
const { chromium } = require('playwright'); // Или 'firefox' или 'webkit'.
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
for (const currentURL of ['https://google.com', 'https://bbc.com']) {
await page.goto(currentURL);
const element = await page.waitForSelector('img');
console.log('Загружено изображение: ' + await element.getAttribute('src'));
}
await browser.close();
})();
Аргументы
-
Селектор для запроса.
-
options
Object (опционально)-
state
"attached" | "detached" | "visible" | "hidden" (опционально)#По умолчанию
'visible'
. Может быть:'attached'
- ожидание, когда элемент будет присутствовать в DOM.'detached'
- ожидание, когда элемент не будет присутствовать в DOM.'visible'
- ожидание, когда элемент будет иметь непустую ограничивающую рамку и не будетvisibility:hidden
. Обратите внимание, что элемент без какого-либо содержимого или сdisplay:none
имеет пустую ограничивающую рамку и не считается видимым.'hidden'
- ожидание, когда элемент будет либо отсоединен от DOM, либо иметь пустую ограничивающую рамку илиvisibility:hidden
. Это противоположно опции'visible'
.
-
strict
boolean (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
0
- без таймаута. Значение по умолчанию можно изменить через опциюactionTimeout
в конфигурации или с помощью методов browserContext.setDefaultTimeout() или page.setDefaultTimeout().
-
Возвращает
waitForTimeout
Добавлено до v1.9Никогда не ждите таймаута в производственной среде. Тесты, которые ждут времени, по своей природе ненадежны. Используйте действия Locator и веб-утверждения, которые ожидают автоматически.
Ожидает заданный timeout в миллисекундах.
Обратите внимание, что page.waitForTimeout()
следует использовать только для отладки. Тесты, использующие таймер в производственной среде, будут ненадежными. Вместо этого используйте сигналы, такие как сетевые события, селекторы, становящиеся видимыми, и другие.
Использование
// ожидание 1 секунду
await page.waitForTimeout(1000);
Аргументы
Возвращает