Search code examples
javaseleniumscroll

How to click on element which is not available on DOM when we land on the page. JAVA + Selenium Automation


How to click on element which is not available on DOM when we land on the page But it gets available as soon as we scroll down.How to handle such element and to click it.

I am using following code which gives me error that element not found.

private static By getAskForHelpButtonForOrder(String orderId) {
    return By.cssSelector(
      String.format("[data-qa='orders-orderitem-%s-buttons-manager-get-help']", orderId)
    );
  }

final By askForHelpButton = getAskForHelpButtonForOrder(orderId);
WebElement element = driver.findElement(askForHelpButton);
    JavascriptExecutor je = (JavascriptExecutor) driver;
    je.executeScript("arguments[0].scrollIntoView(true);",element);
    element.click();

Error:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"[data-qa='orders-orderitem-530638-buttons-manager-get-help']"}


Solution

  • Do Not scroll on the element which is not yet visible. Scroll the page itself first, later find and click on the element:

    JavascriptExecutor js = (JavascriptExecutor) driver; 
    js.executeScript("window.scrollBy(0,350)", "");
    WebElement element = driver.findElement(askForHelpButton);
    element.click();
    

    If you get an error try doing this in a loop, using a try / catch block