How can I solve the exception - Selenium element not interactable?
driver.FindElement(By.Id("UserName")).SendKeys("test");
driver.FindElement(By.Id("Password")).SendKeys("test123");
driver.FindElement(By.XPath("//*[@id="btnSubmit"]")).Click();
Also I'm using ImplicitWait command, thread and still facing the issue
ElementNotInteractableException: Selenium Element not interactable by keyboard
Element is not reachable by keyboard in plain words means that the element can’t be reached using the keyboard, which means you won't physically interact with it even. Reason There can be multiple reasons behind the error Element is not reachable by keyboard which can be either of the following:
The element is hidden as modern JavaScript-centric UI styles always keep the ugly raw HTML input field hidden. The hidden attribute could have been implemented through either of the following ways: A temporary overlay of some other element over the desired element. A permanent overlay of some other element over the desired element. Presence of attributes e.g. class="ng-hide", style="display: none", etc As per best practices while sending character sequence, you must not attempt to invoke click() or sendKeys() on any
or tag, instead invoke click() on the desired tag following the Official locator strategies for the webdriver. Solution There are different approaches to address this issue. Incase of temporary overlay use WebDriverWait in conjunction with ExpectedConditions for the desired element to be visible/clickable as follows:
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.XPath("//*[@id="btnSubmit"]"))).click();
In case of permanent overlay use executeScript() method from JavascriptExecutor interface as follows:
import org.openqa.selenium.JavascriptExecutor;
WebElement myElement = driver.findElement(By.XPath("//*[@id="btnSubmit"]"));
String js = "arguments[0].setAttribute('value','"+inputText+"')"
((JavascriptExecutor) driver).executeScript(js, myElement);