docs(core-concepts): follow up on object handles
This commit is contained in:
parent
39b37be788
commit
6231d50ba5
|
|
@ -14,7 +14,7 @@ the following primitives.
|
||||||
- [Pages and frames](#pages-and-frames)
|
- [Pages and frames](#pages-and-frames)
|
||||||
- [Selectors](#selectors)
|
- [Selectors](#selectors)
|
||||||
- [Auto-waiting](#auto-waiting)
|
- [Auto-waiting](#auto-waiting)
|
||||||
- [Execution contexts](#execution-contexts)
|
- [Node.js and browser execution contexts](#node-js-and-browser-execution-contexts)
|
||||||
- [Object & element handles](#object--element-handles)
|
- [Object & element handles](#object--element-handles)
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
@ -199,8 +199,8 @@ You can pass primitive types, JSON-alike objects and remote object handles recei
|
||||||
|
|
||||||
## Object & element handles
|
## Object & element handles
|
||||||
|
|
||||||
Playwright has an API to create **node.js references** to DOM elements or objects inside the page. These
|
Playwright has an API to create Node-side handles to the page DOM elements or any other objects inside the page.
|
||||||
references are called "handles" and live in node.js process, whereas the actual objects reside in browser.
|
These handles live in the Node.js process, whereas the actual objects reside in browser.
|
||||||
|
|
||||||
IMAGE PLACEHOLDER
|
IMAGE PLACEHOLDER
|
||||||
|
|
||||||
|
|
@ -213,33 +213,34 @@ Playwright's [`ElementHandle`](./api.md#class-elementhandle) extends
|
||||||
[`JSHandle`](./api.md#class-jshandle).
|
[`JSHandle`](./api.md#class-jshandle).
|
||||||
|
|
||||||
Handles Lifetime:
|
Handles Lifetime:
|
||||||
- Handles can we aquired using page methods [`page.evaluteHandle`](./api.md#pageevaluatehandlepagefunction-arg), [`page.$`](./api.md#pageselector) or [`page.$$`](./api.md#pageselector-1) or
|
- Handles can we be acquired using the page methods [`page.evaluteHandle`](./api.md#pageevaluatehandlepagefunction-arg), [`page.$`](./api.md#pageselector) or [`page.$$`](./api.md#pageselector-1) or
|
||||||
their frame counterparts [`frame.evaluateHandle`](./api.md#frameevaluatehandlepagefunction-arg), [`frame.$`](./api.md#frameselector) or [`frame.$$`](./api.md#frameselector-1).
|
their frame counterparts [`frame.evaluateHandle`](./api.md#frameevaluatehandlepagefunction-arg), [`frame.$`](./api.md#frameselector) or [`frame.$$`](./api.md#frameselector-1).
|
||||||
- Once created, handles will retain object from [grabage collection](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management)
|
- Once created, handles will retain object from [grabage collection](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management)
|
||||||
- Handles will be **automatically disposed** once the page or frame they belong to navigates or closes.
|
- Handles will be **automatically disposed** once the page or frame they belong to navigates or closes.
|
||||||
- Handles can be **manually disposed** using [`jsHandle.dispose`](./api.md#jshandledispose) method.
|
- Handles can be **manually disposed** using [`jsHandle.dispose`](./api.md#jshandledispose) method.
|
||||||
|
|
||||||
Handles dereferencing can be done with [`jsHandle.evaluate`](./api.md#jshandleevaluatepagefunction-arg) method:
|
Here is how you can use these handles:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const handle = await page.$('ul');
|
// The first parameter of the elementHandle.evaluate callback is the element handle points to.
|
||||||
await handle.evaluate(element => getComputedStyle(element).getPropertyValue('display'));
|
const ulElementHandle = await page.$('ul');
|
||||||
|
await ulElementHandle.evaluate(ulElement => getComputedStyle(ulElement).getPropertyValue('display'));
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, handles can be passed as arguments to [`page.evaluate`](./api.md#pageevaluatepagefunction-arg) function:
|
Alternatively, handles can be passed as arguments to [`page.evaluate`](./api.md#pageevaluatepagefunction-arg) function:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const handle = await page.$('ul');
|
// In the page API, you can pass handle as a parameter.
|
||||||
await page.evaluate(element => getComputedStyle(element).getPropertyValue('display'), handle);
|
const ulElementHandle = await page.$('ul');
|
||||||
|
await page.evaluate(uiElement => getComputedStyle(uiElement).getPropertyValue('display'), uiElement);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
#### API reference
|
#### API reference
|
||||||
- [`JSHandle`](./api.md#class-jshandle)
|
- [class `JSHandle`](./api.md#class-jshandle)
|
||||||
- [`ElementHandle`](./api.md#class-elementhandle)
|
- [class `ElementHandle`](./api.md#class-elementhandle)
|
||||||
- [`page.evaluteHandle`](./api.md#pageevaluatehandlepagefunction-arg)
|
- [`page.evaluteHandle`](./api.md#pageevaluatehandlepagefunction-arg)
|
||||||
- [`page.$`](./api.md#pageselector)
|
- [`page.$`](./api.md#pageselector)
|
||||||
- [`page.$$`](./api.md#pageselector-1)
|
- [`page.$$`](./api.md#pageselector-1)
|
||||||
- [`jsHandle.evaluate`](./api.md#jshandleevaluatepagefunction-arg)
|
- [`jsHandle.evaluate`](./api.md#jshandleevaluatepagefunction-arg)
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue