The error message looks like this:
System.InvalidOperationException : unknown error: Element <... (html) ...> is not clickable at point (x, y). Other element would receive the click: <...(html)...> Stack trace at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.Remote.RemoteWebElement.Click()
Solution:
The clickable element is not ready, it might not be visible or clickable.
Sometimes the element is covered by another html element. (hide the covering element first).
Steps:
1. Wait for element to be visible
2. Wait for element to be clickable
3. Click with javascript
If this still this doesn’t work insert an implicit wait between step 1 and 2. (Thread.Sleep() in c#)
C# driver code to solve problems:
Wait for element to be visible and clickable (ElementToBeClickable = element is visible AND enabled.)
public IWebElement WaitUntilElementIsClickable(By findElementsBy) { var wait = new WebDriverWait(driver, timeoutForElementShouldBeVisibleInSeconds); try { var element = wait.Until(ExpectedConditions.ElementToBeClickable(findElementsBy)); return element; } catch (Exception exception) { string message = exception.Message + " at findElementsBy " + findElementsBy.ToString(); Exception customException = new Exception(message, exception); throw customException; } } public IWebElement WaitUntilElementIsClickable(By findElementsBy) { var wait = new WebDriverWait(driver, timeoutForElementShouldBeVisibleInSeconds); try { var element = wait.Until(ExpectedConditions.ElementToBeClickable(findElementsBy)); return element; } catch (Exception exception) { string message = exception.Message + " at findElementsBy " + findElementsBy.ToString(); Exception customException = new Exception(message, exception); throw customException; } }
Click with javascript:
public void ClickOnElement(string cssElementSelector) { string js = $"document.querySelector(\"{cssElementSelector}\").click()"; ExecuteJavascript(js); } public string ExecuteJavascript(string script) { return ExecuteJavascript<string>(script); } /// <summary> /// Executes JavaScript in the context of the currently selected frame or window. /// </summary> /// <typeparam name="T">The converted return type</typeparam> /// <param name="script">The JavaScript code to execute.</param> /// <param name="args">The arguments to the script.</param> /// <returns></returns> public T ExecuteJavascript<T>(string script, object[] args = null) { IJavaScriptExecutor javaScriptExecutor = uiTests.Driver as IJavaScriptExecutor; object result = null; var wait = new WebDriverWait(uiTests.Driver, timeout: TimeSpan.FromMinutes(3)); wait.Until(ExpectedConditions.ElementIsVisible(By.TagName("body"))); result = javaScriptExecutor.ExecuteScript(script, args); T typedResult = (T) result; return typedResult; }