Element not visible error (not able to click an element) Element not visible error (not able to click an element) selenium selenium

Element not visible error (not able to click an element)


This is a rather common problem in test automation with selenium.

Here are the common solutions:

  • make sure the element you want to click is actually visible. Sometimes you need to make extra actions on a page to make the element visible. For example, open up a dropdown for an option to appear or open menu for submenu to appear
  • wait for the visibility of the element:

    var EC = protractor.ExpectedConditions;var mumbaiCity = element(by.id('mumbaiCity'));browser.wait(EC.visibilityOf(mumbaiCity), 5000);mumbaiCity.click();
  • there is an another element with the same id that is actually invisible. In this case, you need to improve your locator to match this specific element. For instance:

    element(by.css(".city-checkbox #mumbaiCity")).click();element(by.css(".city-checkbox input[ng-click*=Mumbai]")).click();
  • Or, if you got multiple elements matching the same locator - you can "filter" out a visible element:

    var mumbaiCity = element.all(by.id('mumbaiCity')).filter(function (elm) {    return elm.isDisplayed().then(function (isDisplayed) {        return isDisplayed;    });}).first();mumbaiCity.click();
  • move to element and then click via browser.actions():

    var mumbaiCity = element(by.id('mumbaiCity'));browser.actions().mouseMove(mumbaiCity).click().perform();
  • scroll into view of the element and then click:

    var mumbaiCity = element(by.id('mumbaiCity'));browser.executeScript("arguments[0].scrollIntoView();", mumbaiCity.getWebElement());mumbaiCity.click();
  • click via javascript (beware of the differences though):

    var mumbaiCity = element(by.id('mumbaiCity'));browser.executeScript("arguments[0].click();", mumbaiCity.getWebElement());
  • sometimes, you just need to maximize the browser window:

    browser.driver.manage().window().maximize();