JSHandle
JSHandle представляет собой объект JavaScript на странице. JSHandles могут быть созданы с помощью метода page.evaluateHandle().
const windowHandle = await page.evaluateHandle(() => window);
// ...
JSHandle предотвращает сборку мусора для ссылочного объекта JavaScript, если только ссылка не будет удалена с помощью jsHandle.dispose(). JSHandles автоматически удаляются, когда их исходный фрейм переходит на другую страницу или родительский контекст уничтожается.
Экземпляры JSHandle могут использоваться в качестве аргумента в методах page.$eval(), page.evaluate() и page.evaluateHandle().
Методы
asElement
Добавлено до версии v1.9Возвращает либо null
, либо сам объект, если объект является экземпляром [ElementHandle].
Использование
jsHandle.asElement();
Возвращает
- [null] | [ElementHandle]#
dispose
Добавлено до версии v1.9Метод jsHandle.dispose
прекращает ссылку на элемент.
Использование
await jsHandle.dispose();
Возвращает
- [Promise]<[void]>#
evaluate
Добавлено до версии v1.9Возвращает значение, возвращаемое pageFunction.
Этот метод передает этот объект в качестве первого аргумента в pageFunction.
Если pageFunction возвращает [Promise], то handle.evaluate
будет ожидать разрешения промиса и вернет его значение.
Использование
const tweetHandle = await page.$('.tweet .retweets');
expect(await tweetHandle.evaluate(node => node.innerText)).toBe('10 retweets');
Аргументы
-
pageFunction
[function] | [string]#Функция, которая будет выполнена в контексте страницы.
-
arg
[EvaluationArgument] (опционально)#Опциональный аргумент для передачи в pageFunction.
Возвращает
- [Promise]<[Serializable]>#
evaluateHandle
Добавлено до версии v1.9Возвращает значение, возвращаемое pageFunction в виде [JSHandle].
Этот метод передает этот объект в качестве первого аргумента в pageFunction.
Единственное отличие между jsHandle.evaluate
и jsHandle.evaluateHandle
заключается в том, что jsHandle.evaluateHandle
возвращает [JSHandle].
Если функция, переданная в jsHandle.evaluateHandle
, возвращает [Promise], то jsHandle.evaluateHandle
будет ожидать разрешения промиса и вернет его значение.
Смотрите page.evaluateHandle() для получения более подробной информации.
Использование
await jsHandle.evaluateHandle(pageFunction);
await jsHandle.evaluateHandle(pageFunction, arg);
Аргументы
-
pageFunction
[function] | [string]#Функция, которая будет выполнена в контексте страницы.
-
arg
[EvaluationArgument] (опционально)#Опциональный аргумент для передачи в pageFunction.
Возвращает
- [Promise]<[JSHandle]>#
getProperties
Добавлено до версии v1.9Метод возвращает карту с именами собственных свойств в качестве ключей и экземплярами JSHandle для значений свойств.
Использование
const handle = await page.evaluateHandle(() => ({ window, document }));
const properties = await handle.getProperties();
const windowHandle = properties.get('window');
const documentHandle = properties.get('document');
await handle.dispose();
Возвращает
- [Promise]<[Map]<[string], [JSHandle]>>#
getProperty
Добавлено до версии v1.9Извлекает одно свойство из ссылочного объекта.
Использование
await jsHandle.getProperty(propertyName);
Аргументы
-
propertyName
[string]#свойство для получения
Возвращает
- [Promise]<[JSHandle]>#
jsonValue
Добавлено до версии v1.9Возвращает JSON-представление объекта. Если у объекта есть функция toJSON
, она не будет вызвана.
Метод вернет пустой JSON-объект, если ссылочный объект не может быть преобразован в строку. Он вызовет ошибку, если объект имеет циклические ссылки.
Использование
await jsHandle.jsonValue();
Возвращает
- [Promise]<[Serializable]>#