title: Selenium web driver cannot click a button while element is visible and clickable, throws org.openqa.selenium.ElementNotInteractableException
body: <p>I have following menu bar which I try to test with selenium web driver:</p>
  
  <pre><code>&lt;div class="text-center"&gt;
    &lt;div class="btn-group pull-left"&gt;
      &lt;button type="button" class="btn btn-default" id="id-home_prevButton" style="min-height:10px;min-width:10px" hidden="false"&gt;&lt;span class="glyphicon glyphicon-arrow-left" aria-hidden="true"&gt;&lt;/span&gt;
      &lt;/button&gt;&lt;button type="button" class="btn btn-default" id="id-home_nextButton" style="min-height:10px;min-width:10px" hidden="false"&gt;&lt;span class="glyphicon glyphicon-arrow-right" aria-hidden="true"&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;/div&gt;
    &lt;span class="span-title" id="id-home_title"&gt;Home&lt;/span&gt;
    &lt;div class="btn-group pull-right"&gt;
      &lt;button type="button" class="btn btn-default" id="id-home_infoButton" hidden="false"&gt;&lt;span class="glyphicon glyphicon-info-sign" aria-hidden="true"&gt;&lt;/span&gt;&lt;/button&gt;
      &lt;div class="btn-group"&gt;
        &lt;button type="button" id="id-home_dropDownButton" class="btn btn-default dropdown-toggle" data-toggle="dropdown" hidden="false"&gt;
          &lt;i class="glyphicon glyphicon-align-justify"&gt;&lt;/i&gt;&lt;span class="caret"&gt;&lt;/span&gt;&lt;/button&gt;
        &lt;ul class="dropdown-menu dropdown-menu-right simple-title-dropdown" role="menu"&gt;
          &lt;li&gt;&lt;a href="#home" id="id-home_menu_homeLink"&gt;Home&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  </code></pre>
  
  <p>Button ids are unique.</p>
  
  <p>Selenium scala code clicking the button is:</p>
  
  <pre><code>def wEPrint(description: String, wE: WebElement): String = {
    s"$description = wE.getTagName: ${wE.getTagName}  wE.getText: ${wE.getText}  wE.getSize: ${wE.getSize}  wE.isDisplayed: ${wE.isDisplayed}  wE.isEnabled: ${wE.isEnabled}  wE.isSelected: ${wE.isSelected}"
  }
  
  ...
  
  
  log.debug("Find id-home_prevButton")
  
  import org.openqa.selenium.support.ui.WebDriverWait
  val waitPrevButton = new WebDriverWait(driver, 20)
  val prevButton = driver.findElement(By.id("id-home_prevButton"))
  log.debug(wEPrint("prevButton",prevButton))
  waitPrevButton.until(ExpectedConditions.visibilityOfElementLocated(By.id("id-home_prevButton")))
  log.debug("id-home_prevButton.click")
  prevButton.click()
  </code></pre>
  
  <p>sbt console output is:</p>
  
  <pre><code>22:49:11.378 [run-main-3] DEBUG com.example.selex.MWLExp$ - Find id-home_prevButton
  22:49:11.539 [run-main-3] DEBUG com.example.selex.MWLExp$ - prevButton = wE.getTagName: button  wE.getText:   wE.getSize: (40, 34)  wE.isDisplayed: true  wE.isEnabled: true  wE.isSelected: false
  22:49:11.588 [run-main-3] DEBUG com.example.selex.MWLExp$ - id-home_prevButton.click
  [error] (run-main-3) org.openqa.selenium.ElementNotInteractableException: 
  [error] Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
  [error] System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
  [error] Driver info: org.openqa.selenium.firefox.FirefoxDriver
  [error] Capabilities [{moz:profile=/tmp/rust_mozprofile.T6j4aNCkep6a, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=51151.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
  [error] Session ID: 1349d85f-d360-4725-963c-f6ec277e308c
  org.openqa.selenium.ElementNotInteractableException: 
  Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
  System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
  Driver info: org.openqa.selenium.firefox.FirefoxDriver
  Capabilities [{moz:profile=/tmp/rust_mozprofile.T6j4aNCkep6a, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=51151.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
  Session ID: 1349d85f-d360-4725-963c-f6ec277e308c
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
      at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:150)
      at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:115)
      at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:45)
      at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
      at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
      at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
      at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
      at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:82)
      at com.example.selex.MWLExp$.run01(MWLExp.scala:92)
      at simple.MainJVM$.main(DemoJVM.scala:44)
      at simple.MainJVM.main(DemoJVM.scala)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
  </code></pre>
  
  <p>Selenium test code can find the button, it is displayed and enabled, visibilityOfElementLocated succeeds but clicking throws ElementNotInteractableException.</p>
  
  <p>When I run the app without selenium, button is visible and I can click it and it works without any errors.</p>
  
  <p>In selenium IDE clicking the button works OK. Selenium IDE Java code for clicking the button is:</p>
  
  <pre><code>driver.findElement(By.id("id-home_prevButton")).click();
  </code></pre>
  
  <p>EDIT</p>
  
  <p>I modified the code slightly:</p>
  
  <pre><code>import org.openqa.selenium.support.ui.WebDriverWait
  val waitPrevButton = new WebDriverWait(driver, 20)
  val prevButton = driver.findElement(By.id("id-home_prevButton"))
  log.debug(wEPrint("prevButton",prevButton))
  waitPrevButton.until(ExpectedConditions.visibilityOfElementLocated(By.id("id-home_prevButton")))
  log.debug("id-home_prevButton.click")
  //prevButton.click()
  //prevButton.sendKeys(Keys.RETURN)
  prevButton.sendKeys(Keys.ENTER)
  </code></pre>
  
  <p>And now the exception message is:</p>
  
  <pre><code>23:30:56.497 [run-main-6] DEBUG com.example.selex.MWLExp$ - Find id-home_prevButton
  23:30:56.735 [run-main-6] DEBUG com.example.selex.MWLExp$ - prevButton = wE.getTagName: button  wE.getText:   wE.getSize: (40, 34)  wE.isDisplayed: true  wE.isEnabled: true  wE.isSelected: false
  23:30:56.798 [run-main-6] DEBUG com.example.selex.MWLExp$ - id-home_prevButton.click
  [error] (run-main-6) org.openqa.selenium.ElementNotInteractableException: Element is not visible
  [error] Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
  [error] System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
  [error] Driver info: org.openqa.selenium.firefox.FirefoxDriver
  [error] Capabilities [{moz:profile=/tmp/rust_mozprofile.gBopOPHPUrCL, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=54936.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
  [error] Session ID: eba7323c-6412-4ed7-a91f-3f897b3ec83f
  org.openqa.selenium.ElementNotInteractableException: Element is not visible
  Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
  System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
  Driver info: org.openqa.selenium.firefox.FirefoxDriver
  Capabilities [{moz:profile=/tmp/rust_mozprofile.gBopOPHPUrCL, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=54936.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
  Session ID: eba7323c-6412-4ed7-a91f-3f897b3ec83f
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
      at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:150)
      at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:115)
      at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:45)
      at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
      at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
      at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
      at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
      at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:96)
      at com.example.selex.MWLExp$.run01(MWLExp.scala:93)
      at simple.MainJVM$.main(DemoJVM.scala:44)
      at simple.MainJVM.main(DemoJVM.scala)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  </code></pre>
  
  <p>So now it says that element is not visible although visibilityOfElementLocated has succeeded and it is displayed and enabled.</p>
  
  <p>What's the reason for this exception and how to fix it?</p>
  
  <p>Thank you for your support.</p>