0 votes
1 view
in Devops and Agile by (19.8k points)

I used explicit waits and I have the warning:

org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: ... Command duration or timeout: 393 milliseconds

If I use  Thread.sleep(2000)  I don't receive any warnings.

@Test(dataProvider = "menuData")

public void Main(String btnMenu, String TitleResultPage, String Text) throws InterruptedException {

    WebDriverWait wait = new WebDriverWait(driver, 10);

    driver.findElement(By.id("navigationPageButton")).click();

    try {

       wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(btnMenu)));

    } catch (Exception e) {

        System.out.println("Oh");

    }

    driver.findElement(By.cssSelector(btnMenu)).click();

    Assert.assertEquals(driver.findElement(By.cssSelector(TitleResultPage)).getText(), Text);

}

1 Answer

0 votes
by (63.4k points)

WebDriverException: Element is not clickable at point (x, y)

This is a typical org.openqa.selenium.WebDriverException which extends java.lang.RuntimeException.

The fields of this exception are :

  • BASE_SUPPORT_URL: protected static final java.lang.String BASE_SUPPORT_URL

  • DRIVER_INFO: public static final java.lang.String DRIVER_INFO

  • SESSION_ID: public static final java.lang.String SESSION_ID

About your individual use case, the error tells it all :

WebDriverException: Element is not clickable at point (x, y). Another element would receive the click 

As in your code, you have defined the wait as WebDriverWait wait = new WebDriverWait(driver, 10); but you are calling the click() method on the element before the  ExplicitWait comes into play as in until(ExpectedConditions.elementToBeClickable).

Solution

The error Element is not clickable at point (x, y) can arise due to various reasons. You can address them by either of the following procedures:

1. Element not getting clicked due to JavaScript or AJAX calls present

Try to use Actions Class:

WebElement element_1 = driver.findElement(By.id("navigati new Actions(driver);

actions_1k.moveToElement(element_1).click().build().perform();

2. Element not getting clicked as it is not within Viewport

You can try to use JavascriptExecutor to bring the element within the Viewport:

WebElement myelement = driver.findElement(By.id("navigati (JavascriptExecutor)driver;

jse_2.executeScript("arguments[0].scrollIntoView()", myelement); 

3. The page is getting refreshed before the element gets clickable.

In this case, induce ExplicitWait i.e. WebDriverWait as stated in the following point 4.

4. Element is present in the DOM but not clickable.

In this case, induce ExplicitWait with  ExpectedConditions set to elementToBeClickable for the element to be clickable:

WebDriverWait wait_2= new WebDriverWait(driver, 10);

wait_2.until(ExpectedConditions.elementToBeClickable(By.id("navigati new WebDriverWait(driver, 10);

wait_3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));

6. Element is present but having permanent Overlay.

Use JavascriptExecutor which will allow you to send the click directly on the element.

WebElement element = driver.findElement(By.xpath("element_xpath"));

JavascriptExecutor executor = (JavascriptExecutor)driver;

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

I hope, this will resolve your error.

For more solutions to other queries, you may visit the Selenium interview question page or you can pursue Selenium training for more knowledge.

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...