Home >Java >javaTutorial >How to Click Elements Hidden by Overlays in Selenium?

How to Click Elements Hidden by Overlays in Selenium?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-29 14:27:10208browse

How to Click Elements Hidden by Overlays in Selenium?

Clicking Elements Hidden by Overlays in Selenium

In Selenium-based automation, clicking on elements that are obscured by overlays can be a common challenge. The error message "Element MyElement is not clickable at point (x, y)... Other element would receive the click" indicates this situation.

Addressing the Issue

To resolve this issue, consider the following approaches:

  • JavaScript or AJAX Calls:
    If JavaScript or AJAX calls are causing the click failure, try using the Actions class:
WebElement element = driver.findElement(By.id("id1"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
  • Element Not in Viewport:
    If the element is not visible within the viewport, use JavaScriptExecutor to bring it into view:
JavascriptExecutor jse1 = (JavascriptExecutor)driver;
jse1.executeScript("scroll(250, 0)"); // if the element is on top.
jse1.executeScript("scroll(0, 250)"); // if the element is at bottom.
  • Page Refresh:
    If the page refreshes before the element becomes clickable, induce a wait:

    Thread.sleep(500); // replace 500 with an appropriate timeout in milliseconds
  • Element Not Clickable in DOM:
    If the element exists in the DOM but is not clickable, use an ExplicitWait with an elementToBeClickable ExpectedCondition:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("id1")));
  • Temporary Overlay:
    If the element has a temporary overlay, use an ExplicitWait with an invisibilityOfElementLocated ExpectedCondition for the overlay to become invisible:
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
  • Permanent Overlay:
    If the element has a permanent overlay, send the click directly to the element using JavaScriptExecutor:
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);

The above is the detailed content of How to Click Elements Hidden by Overlays in Selenium?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn