element not interactable exception in selenium web automation element not interactable exception in selenium web automation selenium selenium

element not interactable exception in selenium web automation


Try setting an implicit wait of maybe 10 seconds.

gmail.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Or set an explicit wait. An explicit waits is code you define to wait for a certain condition to occur before proceeding further in the code. In your case, it is the visibility of the password input field. (Thanks to ainlolcat's comment)

WebDriver gmail= new ChromeDriver();gmail.get("https://www.gmail.co.in"); gmail.findElement(By.id("Email")).sendKeys("abcd");gmail.findElement(By.id("next")).click();WebDriverWait wait = new WebDriverWait(gmail, 10);WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));gmail.findElement(By.id("Passwd")).sendKeys("xyz");

Explanation: The reason selenium can't find the element is because the id of the password input field is initially Passwd-hidden. After you click on the "Next" button, Google first verifies the email address entered and then shows the password input field (by changing the id from Passwd-hidden to Passwd). So, when the password field is still hidden (i.e. Google is still verifying the email id), your webdriver starts searching for the password input field with id Passwd which is still hidden. And hence, an exception is thrown.


"element not interactable" error can mean two things :

a. Element has not properly rendered:

Solution for this is just to use implicit /explicit wait

  • Implicit wait :

    driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

  • Explicit wait :

    WebDriverWait wait=new WebDriverWait(driver, 20);element1 = wait.until(ExpectedConditions.elementToBeClickable(By.className("fa-stack-1x")));

b. Element has rendered but it is not in the visible part of the screen:

Solution is just to scroll till the element. Based on the version of Selenium it can be handled in different ways but I will provide a solution that works in all versions :

    JavascriptExecutor executor = (JavascriptExecutor) driver;    executor.executeScript("arguments[0].scrollIntoView(true);", element1);
  1. Suppose all this fails then another way is to again make use of Javascript executor as following :

    executor.executeScript("arguments[0].click();", element1);

  2. If you still can't click , then it could again mean two things :

1. Iframe

Check the DOM to see if the element you are inspecting lives in any frame. If that is true then you would need to switch to this frame before attempting any operation.

    driver.switchTo().frame("a077aa5e"); //switching the frame by ID    System.out.println("********We are switching to the iframe*******");    driver.findElement(By.xpath("html/body/a/img")).click();

2. New tab

If a new tab has opened up and the element exists on it then you again need to code something like below to switch to it before attempting operation.

String parent = driver.getWindowHandle();driver.findElement(By.partialLinkText("Continue")).click();Set<String> s = driver.getWindowHandles();// Now iterate using IteratorIterator<String> I1 = s.iterator();while (I1.hasNext()) {String child_window = I1.next();if (!parent.equals(child_window)) {    driver.switchTo().window(child_window);    element1.click() }


you may also try full xpath, I had a similar issue where I had to click on an element which has a property javascript onclick function. the full xpath method worked and no interactable exception was thrown.