'Getting custom element using puppeteer and then do click action

I've created a custom attribute called data-testId and I am trying to reach to using puppeteer and then do a click action, but for some reason, I'm unable to get this element and facing with errors. I've tried these 2 options:

const element = await page.$('[data-testId="testid-button-refresh"]');
await page.click(element, { clickCount: 1 });

and this:

const refreshButton = await page.evaluateHandle(() => {
return document.querySelector('[data-testId=testid-button-refresh]').value;
});
await page.click(element, { clickCount: 1 });

On them both I am getting this error:

JSHandles can be evaluated only in the context they were created!

What I am doing wrong? and what does it means this error?



Solution 1:[1]

With element you've created an ElementHandle which can be clicked with elementHandle.click and not with page.click.

This should work:

const element = await page.$('[data-testId="testid-button-refresh"]') // this is an ElementHandle
await element.click({ clickCount: 1 })

Or you can still use page.click, but to keep the click in the same context you should use the selector, and not the ElementHandle as the first argument:

await page.click('[data-testId="testid-button-refresh"]', { clickCount: 1 })

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1