async isVisible(retryInterval, retryTimeout) {
    const elem = await firstElement.apply(this, [retryInterval, retryTimeout]);

    async function isVisible() {
      const visibilityRatio = await new Promise((resolve) => {
        const elem = this;
        const observer = new IntersectionObserver((entries) => {
          resolve(entries[0].intersectionRatio);
          observer.disconnect();
        });
        observer.observe(elem);
      });
      return visibilityRatio === 1;
    }
    const objectId = elem.get();
    const { result } = await runtimeHandler.runtimeCallFunctionOn(
      isVisible,
      null,
      {
        objectId: objectId,
        awaitPromise: true,
      },
    );
    if (result.value) {
      descEvent.emit("success", "Element is Visible");
      return true;
    }
    descEvent.emit("success", "Element is not Visible");
    return false;
  }
@description Checks if element is visually visible. `isVisible()` is false when the element is overshadowed by another element,
or if the element is outside the viewport.
@param {number} retryInterval Retry Interval in milliseconds (defaults to global settings).
@param {number} retryTimeout Retry Timeout in milliseconds (defaults to global settings).
@returns {boolean} true if visible, else false.