In case you were using Puppeteer and rand into this error

Node is either not visible or not an HTMLelement

This blog post might be able to help you fix it.

It basically means the element is already available on the page but is not visible yet or in CSS, the display property is set as none or visibility is hidden. Now, while writing our tests, we assume that as soon as the element is available, do an action on it like clicking or typing. But as this element is not yet visible, Puppeteer fails to perform that action.

It is important to check the visibility of an element in Puppeteer before performing any action on it else you will run into a similar error.

How to check if the element is ready for an action or not?

With some degree of trial and error, this is the function to check whether the element is ready for an action or not. It checks for the visibility of the element by checking the style of the element for display, opacity, and visibility. If this is true, we also check for boxModel of the element. The BoxModel contains:

  • Content
  • Padding
  • Border
  • Margin
  • Width
  • Height

The purpose of checking BoxModel is that even if the element is present and visible, then also it might not be in the viewport. By ensuring the BoxModel of the element, we know the height, width, coordinates etc which reaffirms that the element is now completely ready for any action.

async function isLocatorReady(element, page) {
  const isVisibleHandle = await page.evaluateHandle((e) => 
{
    const style = window.getComputedStyle(e);
    return (style && style.display !== 'none' && 
    style.visibility !== 'hidden' && style.opacity !== '0');
 }, element);
  var visible = await isVisibleHandle.jsonValue();
  const box = await element.boxModel();
  if (visible && box) {
    return true;
  }
  return false;
}

If you would like to know when your users face bugs or errors, please check out [Browsee](https://browsee.io). It is user analytics platform where you can see how users actually used your site and learn from it.