Clicking an Invisible Element Using JavascriptExecutor
When an element is not visible or interactable via normal click(), use JavascriptExecutor to click it directly via JavaScript.
Basic approach:
Java
WebElement element = driver.findElement(By.id("gbqfd"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
Full example:
Java
@Test
public void clickHiddenElement() {
driver.get("https://example.com");
// Find the element (even if hidden)
WebElement hiddenBtn = driver.findElement(By.id("hiddenButton"));
// Click via JavaScript
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", hiddenBtn);
// Verify action was taken
Assert.assertEquals(driver.getTitle(), "Result Page");
}
Make element visible first, then click:
Java
WebElement element = driver.findElement(By.id("hiddenElement"));
JavascriptExecutor js = (JavascriptExecutor) driver;
// Make visible via JS
js.executeScript("arguments[0].style.display='block';", element);
js.executeScript("arguments[0].style.visibility='visible';", element);
js.executeScript("arguments[0].removeAttribute('hidden');", element);
// Now click normally or via JS
element.click();
Scroll into view then click:
Java
WebElement element = driver.findElement(By.id("offScreenElement"));
JavascriptExecutor js = (JavascriptExecutor) driver;
// Scroll element into viewport
js.executeScript("arguments[0].scrollIntoView(true);", element);
// Wait for it to be clickable
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
wait.until(ExpectedConditions.elementToBeClickable(element));
element.click();
When to use JS click:
- ✓Element is
display:noneorvisibility:hidden - ✓Element is behind an overlay/modal
- ✓Element is outside the viewport
- ✓Element returns
ElementNotInteractableException - ✓Fixed banners/headers covering the element
JS click vs normal click:
| Aspect | Normal click() | JS click |
|---|---|---|
| Visibility required | Yes | No |
| Events fired | mousedown, mouseup, click | click only |
| Best for | Visible elements | Hidden/overlapping elements |
| Reliability | Higher | Use when normal click fails |
