--- sidebar_label: ElementHandle.$eval --- # ElementHandle.$eval() method Runs the given function on the first element matching the given selector in the current element. If the given function returns a promise, then this method will wait till the promise resolves. #### Signature: ```typescript class ElementHandle { $eval< Selector extends string, Params extends unknown[], Func extends EvaluateFuncWith, Params> = EvaluateFuncWith< NodeFor, Params >, >( selector: Selector, pageFunction: Func | string, ...args: Params ): Promise>>; } ``` ## Parameters | Parameter | Type | Description | | ------------ | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | selector | Selector | The selector to query for. | | pageFunction | Func \| string | The function to be evaluated in this element's page's context. The first element matching the selector will be passed in as the first argument. | | args | Params | Additional arguments to pass to pageFunction. | **Returns:** Promise<Awaited<ReturnType<Func>>> A promise to the result of the function. ## Example ```ts const tweetHandle = await page.$('.tweet'); expect(await tweetHandle.$eval('.like', node => node.innerText)).toBe('100'); expect(await tweetHandle.$eval('.retweets', node => node.innerText)).toBe('10'); ```