Selenium Web Driver & Java. Element is not clickable at point (x, y). Other element would receive the...












37















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);
}









share|improve this question

























  • Are you using Chrome version 61+?

    – demouser123
    Jul 4 '17 at 18:28











  • @demouser123 i am using Firefox 47.0.1 and seleniumWebDriver 2.51.0

    – Maria
    Jul 4 '17 at 18:32











  • @Maria On which line are you getting the error? Thanks

    – DebanjanB
    Jul 4 '17 at 19:02











  • @DebanjanB In line: driver.findElement(By.id("navigationPageButton")).click();

    – Maria
    Jul 4 '17 at 19:08











  • That error means, there's another element overlaying the target element (fixed/absolute positioned overlay) or the z-index is too low. This might be caused by hover effects using transitions (slower than the minimum timeout, in this case 393ms). you should wait for #navigationPageButton to become visible (or clickable using elementToBeClickable() for that element too) or check whether all preconditions are met so that the button is clickable.

    – try-catch-finally
    Jul 4 '17 at 20:09
















37















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);
}









share|improve this question

























  • Are you using Chrome version 61+?

    – demouser123
    Jul 4 '17 at 18:28











  • @demouser123 i am using Firefox 47.0.1 and seleniumWebDriver 2.51.0

    – Maria
    Jul 4 '17 at 18:32











  • @Maria On which line are you getting the error? Thanks

    – DebanjanB
    Jul 4 '17 at 19:02











  • @DebanjanB In line: driver.findElement(By.id("navigationPageButton")).click();

    – Maria
    Jul 4 '17 at 19:08











  • That error means, there's another element overlaying the target element (fixed/absolute positioned overlay) or the z-index is too low. This might be caused by hover effects using transitions (slower than the minimum timeout, in this case 393ms). you should wait for #navigationPageButton to become visible (or clickable using elementToBeClickable() for that element too) or check whether all preconditions are met so that the button is clickable.

    – try-catch-finally
    Jul 4 '17 at 20:09














37












37








37


21






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);
}









share|improve this question
















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);
}






java selenium selenium-webdriver webdriver






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 19 '18 at 7:37









Bruno Bieri

4,38253963




4,38253963










asked Jul 4 '17 at 18:26









MariaMaria

192127




192127













  • Are you using Chrome version 61+?

    – demouser123
    Jul 4 '17 at 18:28











  • @demouser123 i am using Firefox 47.0.1 and seleniumWebDriver 2.51.0

    – Maria
    Jul 4 '17 at 18:32











  • @Maria On which line are you getting the error? Thanks

    – DebanjanB
    Jul 4 '17 at 19:02











  • @DebanjanB In line: driver.findElement(By.id("navigationPageButton")).click();

    – Maria
    Jul 4 '17 at 19:08











  • That error means, there's another element overlaying the target element (fixed/absolute positioned overlay) or the z-index is too low. This might be caused by hover effects using transitions (slower than the minimum timeout, in this case 393ms). you should wait for #navigationPageButton to become visible (or clickable using elementToBeClickable() for that element too) or check whether all preconditions are met so that the button is clickable.

    – try-catch-finally
    Jul 4 '17 at 20:09



















  • Are you using Chrome version 61+?

    – demouser123
    Jul 4 '17 at 18:28











  • @demouser123 i am using Firefox 47.0.1 and seleniumWebDriver 2.51.0

    – Maria
    Jul 4 '17 at 18:32











  • @Maria On which line are you getting the error? Thanks

    – DebanjanB
    Jul 4 '17 at 19:02











  • @DebanjanB In line: driver.findElement(By.id("navigationPageButton")).click();

    – Maria
    Jul 4 '17 at 19:08











  • That error means, there's another element overlaying the target element (fixed/absolute positioned overlay) or the z-index is too low. This might be caused by hover effects using transitions (slower than the minimum timeout, in this case 393ms). you should wait for #navigationPageButton to become visible (or clickable using elementToBeClickable() for that element too) or check whether all preconditions are met so that the button is clickable.

    – try-catch-finally
    Jul 4 '17 at 20:09

















Are you using Chrome version 61+?

– demouser123
Jul 4 '17 at 18:28





Are you using Chrome version 61+?

– demouser123
Jul 4 '17 at 18:28













@demouser123 i am using Firefox 47.0.1 and seleniumWebDriver 2.51.0

– Maria
Jul 4 '17 at 18:32





@demouser123 i am using Firefox 47.0.1 and seleniumWebDriver 2.51.0

– Maria
Jul 4 '17 at 18:32













@Maria On which line are you getting the error? Thanks

– DebanjanB
Jul 4 '17 at 19:02





@Maria On which line are you getting the error? Thanks

– DebanjanB
Jul 4 '17 at 19:02













@DebanjanB In line: driver.findElement(By.id("navigationPageButton")).click();

– Maria
Jul 4 '17 at 19:08





@DebanjanB In line: driver.findElement(By.id("navigationPageButton")).click();

– Maria
Jul 4 '17 at 19:08













That error means, there's another element overlaying the target element (fixed/absolute positioned overlay) or the z-index is too low. This might be caused by hover effects using transitions (slower than the minimum timeout, in this case 393ms). you should wait for #navigationPageButton to become visible (or clickable using elementToBeClickable() for that element too) or check whether all preconditions are met so that the button is clickable.

– try-catch-finally
Jul 4 '17 at 20:09





That error means, there's another element overlaying the target element (fixed/absolute positioned overlay) or the z-index is too low. This might be caused by hover effects using transitions (slower than the minimum timeout, in this case 393ms). you should wait for #navigationPageButton to become visible (or clickable using elementToBeClickable() for that element too) or check whether all preconditions are met so that the button is clickable.

– try-catch-finally
Jul 4 '17 at 20:09












5 Answers
5






active

oldest

votes


















93














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 usecase, the error tells it all :



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


It is clear from your code block that 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 from different factors. 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 = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();


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



Try to use JavascriptExecutor to bring the element within the Viewport:



WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.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 mentioned in 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 wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));


5. Element is present but having temporary Overlay.



In this case induce ExplicitWait with ExpectedConditions set to invisibilityOfElementLocated for the Overlay to be invisible.



WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));


6. Element is present but having permanent Overlay.



Use JavascriptExecutor to send the click directly on the element.



WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);





share|improve this answer





















  • 1





    To #6/#2 above: The .ExecuteScript method is now accessible from the web driver itself rather than the JavascriptExecutor. Thanks for the well written answer!

    – TaylorTheDeveloper
    May 15 '18 at 20:25








  • 3





    You have covered many possibilities in which only 5 and 6 are correct way to handle the mentioned error. The first four throws different error for which the solution you gave won't work. For an example point number 3 is actually a stale element problem that wouldn't work even though how long you wait with elementToBeClickble method. That has to be handled differently.

    – Rajagopalan
    Aug 7 '18 at 7:59





















9














In case you need to use it with Javascript



We can use arguments[0].click() to simulate click operation.



var element = element(by.linkText('webdriverjs'));
browser.executeScript("arguments[0].click()",element);





share|improve this answer


























  • Works! I cannot imagine way it works, but otherwise it clicks on overlay layer (waiting of overlay closing by 'invisibilityOfElementLocated' takes about 30sec.).

    – Fisk
    Jun 1 '18 at 10:48













  • thanks man, you saved my time.

    – Chaudhry Waqas
    Oct 22 '18 at 19:36



















2














You can try



WebElement navigationPageButton = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton")));
navigationPageButton.click();





share|improve this answer
























  • It is not help me.

    – Maria
    Jul 4 '17 at 18:53











  • Are you getting same error?

    – fg78nc
    Jul 4 '17 at 18:55











  • Yes: org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: <div tabindex="0" class="waiter-ui-lock"></div> Command duration or timeout: 70 milliseconds

    – Maria
    Jul 4 '17 at 18:57








  • 1





    try the following WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();

    – fg78nc
    Jul 4 '17 at 18:59






  • 1





    If i using Thread.Sleep then all work. But i using Wait all fail.

    – Maria
    Jul 4 '17 at 19:24



















2














Scrolling the page to the near by point mentioned in the exception did the trick for me. Below is code snippet:



$wd_host = 'http://localhost:4444/wd/hub';
$capabilities =
[
WebDriverCapabilityType::BROWSER_NAME => 'chrome',
WebDriverCapabilityType::PROXY => [
'proxyType' => 'manual',
'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
'noProxy' => PROXY_EXCEPTION // to run locally
],
];
$webDriver = RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000);
...........
...........
// Wait for 3 seconds
$webDriver->wait(3);
// Scrolls the page vertically by 70 pixels
$webDriver->executeScript("window.scrollTo(0, 70);");


NOTE: I use Facebook php webdriver






share|improve this answer































    2














    I ran into this error while trying to click some element (or its overlay, I didn't care), and the other answers didn't work for me. I fixed it by using the elementFromPoint DOM API to find the element that Selenium wanted me to click on instead:



    element_i_care_about = something()
    loc = element_i_care_about.location
    element_to_click = driver.execute_script(
    "return document.elementFromPoint(arguments[0], arguments[1]);",
    loc['x'],
    loc['y'])
    element_to_click.click()


    I've also had situations where an element was moving, for example because an element above it on the page was doing an animated expand or collapse. In that case, this Expected Condition class helped. You give it the elements that are animated, not the ones you want to click. This version only works for jQuery animations.



    class elements_not_to_be_animated(object):
    def __init__(self, locator):
    self.locator = locator

    def __call__(self, driver):
    try:
    elements = EC._find_elements(driver, self.locator)
    # :animated is an artificial jQuery selector for things that are
    # currently animated by jQuery.
    return driver.execute_script(
    'return !jQuery(arguments[0]).filter(":animated").length;',
    elements)
    except StaleElementReferenceException:
    return False





    share|improve this answer

































      5 Answers
      5






      active

      oldest

      votes








      5 Answers
      5






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      93














      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 usecase, the error tells it all :



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


      It is clear from your code block that 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 from different factors. 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 = driver.findElement(By.id("navigationPageButton"));
      Actions actions = new Actions(driver);
      actions.moveToElement(element).click().build().perform();


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



      Try to use JavascriptExecutor to bring the element within the Viewport:



      WebElement myelement = driver.findElement(By.id("navigationPageButton"));
      JavascriptExecutor jse2 = (JavascriptExecutor)driver;
      jse2.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 mentioned in 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 wait2 = new WebDriverWait(driver, 10);
      wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));


      5. Element is present but having temporary Overlay.



      In this case induce ExplicitWait with ExpectedConditions set to invisibilityOfElementLocated for the Overlay to be invisible.



      WebDriverWait wait3 = new WebDriverWait(driver, 10);
      wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));


      6. Element is present but having permanent Overlay.



      Use JavascriptExecutor to send the click directly on the element.



      WebElement ele = driver.findElement(By.xpath("element_xpath"));
      JavascriptExecutor executor = (JavascriptExecutor)driver;
      executor.executeScript("arguments[0].click();", ele);





      share|improve this answer





















      • 1





        To #6/#2 above: The .ExecuteScript method is now accessible from the web driver itself rather than the JavascriptExecutor. Thanks for the well written answer!

        – TaylorTheDeveloper
        May 15 '18 at 20:25








      • 3





        You have covered many possibilities in which only 5 and 6 are correct way to handle the mentioned error. The first four throws different error for which the solution you gave won't work. For an example point number 3 is actually a stale element problem that wouldn't work even though how long you wait with elementToBeClickble method. That has to be handled differently.

        – Rajagopalan
        Aug 7 '18 at 7:59


















      93














      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 usecase, the error tells it all :



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


      It is clear from your code block that 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 from different factors. 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 = driver.findElement(By.id("navigationPageButton"));
      Actions actions = new Actions(driver);
      actions.moveToElement(element).click().build().perform();


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



      Try to use JavascriptExecutor to bring the element within the Viewport:



      WebElement myelement = driver.findElement(By.id("navigationPageButton"));
      JavascriptExecutor jse2 = (JavascriptExecutor)driver;
      jse2.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 mentioned in 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 wait2 = new WebDriverWait(driver, 10);
      wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));


      5. Element is present but having temporary Overlay.



      In this case induce ExplicitWait with ExpectedConditions set to invisibilityOfElementLocated for the Overlay to be invisible.



      WebDriverWait wait3 = new WebDriverWait(driver, 10);
      wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));


      6. Element is present but having permanent Overlay.



      Use JavascriptExecutor to send the click directly on the element.



      WebElement ele = driver.findElement(By.xpath("element_xpath"));
      JavascriptExecutor executor = (JavascriptExecutor)driver;
      executor.executeScript("arguments[0].click();", ele);





      share|improve this answer





















      • 1





        To #6/#2 above: The .ExecuteScript method is now accessible from the web driver itself rather than the JavascriptExecutor. Thanks for the well written answer!

        – TaylorTheDeveloper
        May 15 '18 at 20:25








      • 3





        You have covered many possibilities in which only 5 and 6 are correct way to handle the mentioned error. The first four throws different error for which the solution you gave won't work. For an example point number 3 is actually a stale element problem that wouldn't work even though how long you wait with elementToBeClickble method. That has to be handled differently.

        – Rajagopalan
        Aug 7 '18 at 7:59
















      93












      93








      93







      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 usecase, the error tells it all :



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


      It is clear from your code block that 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 from different factors. 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 = driver.findElement(By.id("navigationPageButton"));
      Actions actions = new Actions(driver);
      actions.moveToElement(element).click().build().perform();


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



      Try to use JavascriptExecutor to bring the element within the Viewport:



      WebElement myelement = driver.findElement(By.id("navigationPageButton"));
      JavascriptExecutor jse2 = (JavascriptExecutor)driver;
      jse2.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 mentioned in 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 wait2 = new WebDriverWait(driver, 10);
      wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));


      5. Element is present but having temporary Overlay.



      In this case induce ExplicitWait with ExpectedConditions set to invisibilityOfElementLocated for the Overlay to be invisible.



      WebDriverWait wait3 = new WebDriverWait(driver, 10);
      wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));


      6. Element is present but having permanent Overlay.



      Use JavascriptExecutor to send the click directly on the element.



      WebElement ele = driver.findElement(By.xpath("element_xpath"));
      JavascriptExecutor executor = (JavascriptExecutor)driver;
      executor.executeScript("arguments[0].click();", ele);





      share|improve this answer















      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 usecase, the error tells it all :



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


      It is clear from your code block that 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 from different factors. 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 = driver.findElement(By.id("navigationPageButton"));
      Actions actions = new Actions(driver);
      actions.moveToElement(element).click().build().perform();


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



      Try to use JavascriptExecutor to bring the element within the Viewport:



      WebElement myelement = driver.findElement(By.id("navigationPageButton"));
      JavascriptExecutor jse2 = (JavascriptExecutor)driver;
      jse2.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 mentioned in 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 wait2 = new WebDriverWait(driver, 10);
      wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));


      5. Element is present but having temporary Overlay.



      In this case induce ExplicitWait with ExpectedConditions set to invisibilityOfElementLocated for the Overlay to be invisible.



      WebDriverWait wait3 = new WebDriverWait(driver, 10);
      wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));


      6. Element is present but having permanent Overlay.



      Use JavascriptExecutor to send the click directly on the element.



      WebElement ele = driver.findElement(By.xpath("element_xpath"));
      JavascriptExecutor executor = (JavascriptExecutor)driver;
      executor.executeScript("arguments[0].click();", ele);






      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Jan 14 at 4:24

























      answered Jul 5 '17 at 3:16









      DebanjanBDebanjanB

      41k73878




      41k73878








      • 1





        To #6/#2 above: The .ExecuteScript method is now accessible from the web driver itself rather than the JavascriptExecutor. Thanks for the well written answer!

        – TaylorTheDeveloper
        May 15 '18 at 20:25








      • 3





        You have covered many possibilities in which only 5 and 6 are correct way to handle the mentioned error. The first four throws different error for which the solution you gave won't work. For an example point number 3 is actually a stale element problem that wouldn't work even though how long you wait with elementToBeClickble method. That has to be handled differently.

        – Rajagopalan
        Aug 7 '18 at 7:59
















      • 1





        To #6/#2 above: The .ExecuteScript method is now accessible from the web driver itself rather than the JavascriptExecutor. Thanks for the well written answer!

        – TaylorTheDeveloper
        May 15 '18 at 20:25








      • 3





        You have covered many possibilities in which only 5 and 6 are correct way to handle the mentioned error. The first four throws different error for which the solution you gave won't work. For an example point number 3 is actually a stale element problem that wouldn't work even though how long you wait with elementToBeClickble method. That has to be handled differently.

        – Rajagopalan
        Aug 7 '18 at 7:59










      1




      1





      To #6/#2 above: The .ExecuteScript method is now accessible from the web driver itself rather than the JavascriptExecutor. Thanks for the well written answer!

      – TaylorTheDeveloper
      May 15 '18 at 20:25







      To #6/#2 above: The .ExecuteScript method is now accessible from the web driver itself rather than the JavascriptExecutor. Thanks for the well written answer!

      – TaylorTheDeveloper
      May 15 '18 at 20:25






      3




      3





      You have covered many possibilities in which only 5 and 6 are correct way to handle the mentioned error. The first four throws different error for which the solution you gave won't work. For an example point number 3 is actually a stale element problem that wouldn't work even though how long you wait with elementToBeClickble method. That has to be handled differently.

      – Rajagopalan
      Aug 7 '18 at 7:59







      You have covered many possibilities in which only 5 and 6 are correct way to handle the mentioned error. The first four throws different error for which the solution you gave won't work. For an example point number 3 is actually a stale element problem that wouldn't work even though how long you wait with elementToBeClickble method. That has to be handled differently.

      – Rajagopalan
      Aug 7 '18 at 7:59















      9














      In case you need to use it with Javascript



      We can use arguments[0].click() to simulate click operation.



      var element = element(by.linkText('webdriverjs'));
      browser.executeScript("arguments[0].click()",element);





      share|improve this answer


























      • Works! I cannot imagine way it works, but otherwise it clicks on overlay layer (waiting of overlay closing by 'invisibilityOfElementLocated' takes about 30sec.).

        – Fisk
        Jun 1 '18 at 10:48













      • thanks man, you saved my time.

        – Chaudhry Waqas
        Oct 22 '18 at 19:36
















      9














      In case you need to use it with Javascript



      We can use arguments[0].click() to simulate click operation.



      var element = element(by.linkText('webdriverjs'));
      browser.executeScript("arguments[0].click()",element);





      share|improve this answer


























      • Works! I cannot imagine way it works, but otherwise it clicks on overlay layer (waiting of overlay closing by 'invisibilityOfElementLocated' takes about 30sec.).

        – Fisk
        Jun 1 '18 at 10:48













      • thanks man, you saved my time.

        – Chaudhry Waqas
        Oct 22 '18 at 19:36














      9












      9








      9







      In case you need to use it with Javascript



      We can use arguments[0].click() to simulate click operation.



      var element = element(by.linkText('webdriverjs'));
      browser.executeScript("arguments[0].click()",element);





      share|improve this answer















      In case you need to use it with Javascript



      We can use arguments[0].click() to simulate click operation.



      var element = element(by.linkText('webdriverjs'));
      browser.executeScript("arguments[0].click()",element);






      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Apr 13 '18 at 10:20









      SirPeople

      2,094723




      2,094723










      answered Apr 13 '18 at 9:25









      Rester TestRester Test

      9116




      9116













      • Works! I cannot imagine way it works, but otherwise it clicks on overlay layer (waiting of overlay closing by 'invisibilityOfElementLocated' takes about 30sec.).

        – Fisk
        Jun 1 '18 at 10:48













      • thanks man, you saved my time.

        – Chaudhry Waqas
        Oct 22 '18 at 19:36



















      • Works! I cannot imagine way it works, but otherwise it clicks on overlay layer (waiting of overlay closing by 'invisibilityOfElementLocated' takes about 30sec.).

        – Fisk
        Jun 1 '18 at 10:48













      • thanks man, you saved my time.

        – Chaudhry Waqas
        Oct 22 '18 at 19:36

















      Works! I cannot imagine way it works, but otherwise it clicks on overlay layer (waiting of overlay closing by 'invisibilityOfElementLocated' takes about 30sec.).

      – Fisk
      Jun 1 '18 at 10:48







      Works! I cannot imagine way it works, but otherwise it clicks on overlay layer (waiting of overlay closing by 'invisibilityOfElementLocated' takes about 30sec.).

      – Fisk
      Jun 1 '18 at 10:48















      thanks man, you saved my time.

      – Chaudhry Waqas
      Oct 22 '18 at 19:36





      thanks man, you saved my time.

      – Chaudhry Waqas
      Oct 22 '18 at 19:36











      2














      You can try



      WebElement navigationPageButton = (new WebDriverWait(driver, 10))
      .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton")));
      navigationPageButton.click();





      share|improve this answer
























      • It is not help me.

        – Maria
        Jul 4 '17 at 18:53











      • Are you getting same error?

        – fg78nc
        Jul 4 '17 at 18:55











      • Yes: org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: <div tabindex="0" class="waiter-ui-lock"></div> Command duration or timeout: 70 milliseconds

        – Maria
        Jul 4 '17 at 18:57








      • 1





        try the following WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();

        – fg78nc
        Jul 4 '17 at 18:59






      • 1





        If i using Thread.Sleep then all work. But i using Wait all fail.

        – Maria
        Jul 4 '17 at 19:24
















      2














      You can try



      WebElement navigationPageButton = (new WebDriverWait(driver, 10))
      .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton")));
      navigationPageButton.click();





      share|improve this answer
























      • It is not help me.

        – Maria
        Jul 4 '17 at 18:53











      • Are you getting same error?

        – fg78nc
        Jul 4 '17 at 18:55











      • Yes: org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: <div tabindex="0" class="waiter-ui-lock"></div> Command duration or timeout: 70 milliseconds

        – Maria
        Jul 4 '17 at 18:57








      • 1





        try the following WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();

        – fg78nc
        Jul 4 '17 at 18:59






      • 1





        If i using Thread.Sleep then all work. But i using Wait all fail.

        – Maria
        Jul 4 '17 at 19:24














      2












      2








      2







      You can try



      WebElement navigationPageButton = (new WebDriverWait(driver, 10))
      .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton")));
      navigationPageButton.click();





      share|improve this answer













      You can try



      WebElement navigationPageButton = (new WebDriverWait(driver, 10))
      .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton")));
      navigationPageButton.click();






      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered Jul 4 '17 at 18:39









      fg78ncfg78nc

      2,2771517




      2,2771517













      • It is not help me.

        – Maria
        Jul 4 '17 at 18:53











      • Are you getting same error?

        – fg78nc
        Jul 4 '17 at 18:55











      • Yes: org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: <div tabindex="0" class="waiter-ui-lock"></div> Command duration or timeout: 70 milliseconds

        – Maria
        Jul 4 '17 at 18:57








      • 1





        try the following WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();

        – fg78nc
        Jul 4 '17 at 18:59






      • 1





        If i using Thread.Sleep then all work. But i using Wait all fail.

        – Maria
        Jul 4 '17 at 19:24



















      • It is not help me.

        – Maria
        Jul 4 '17 at 18:53











      • Are you getting same error?

        – fg78nc
        Jul 4 '17 at 18:55











      • Yes: org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: <div tabindex="0" class="waiter-ui-lock"></div> Command duration or timeout: 70 milliseconds

        – Maria
        Jul 4 '17 at 18:57








      • 1





        try the following WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();

        – fg78nc
        Jul 4 '17 at 18:59






      • 1





        If i using Thread.Sleep then all work. But i using Wait all fail.

        – Maria
        Jul 4 '17 at 19:24

















      It is not help me.

      – Maria
      Jul 4 '17 at 18:53





      It is not help me.

      – Maria
      Jul 4 '17 at 18:53













      Are you getting same error?

      – fg78nc
      Jul 4 '17 at 18:55





      Are you getting same error?

      – fg78nc
      Jul 4 '17 at 18:55













      Yes: org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: <div tabindex="0" class="waiter-ui-lock"></div> Command duration or timeout: 70 milliseconds

      – Maria
      Jul 4 '17 at 18:57







      Yes: org.openqa.selenium.WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click: <div tabindex="0" class="waiter-ui-lock"></div> Command duration or timeout: 70 milliseconds

      – Maria
      Jul 4 '17 at 18:57






      1




      1





      try the following WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();

      – fg78nc
      Jul 4 '17 at 18:59





      try the following WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();

      – fg78nc
      Jul 4 '17 at 18:59




      1




      1





      If i using Thread.Sleep then all work. But i using Wait all fail.

      – Maria
      Jul 4 '17 at 19:24





      If i using Thread.Sleep then all work. But i using Wait all fail.

      – Maria
      Jul 4 '17 at 19:24











      2














      Scrolling the page to the near by point mentioned in the exception did the trick for me. Below is code snippet:



      $wd_host = 'http://localhost:4444/wd/hub';
      $capabilities =
      [
      WebDriverCapabilityType::BROWSER_NAME => 'chrome',
      WebDriverCapabilityType::PROXY => [
      'proxyType' => 'manual',
      'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
      'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
      'noProxy' => PROXY_EXCEPTION // to run locally
      ],
      ];
      $webDriver = RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000);
      ...........
      ...........
      // Wait for 3 seconds
      $webDriver->wait(3);
      // Scrolls the page vertically by 70 pixels
      $webDriver->executeScript("window.scrollTo(0, 70);");


      NOTE: I use Facebook php webdriver






      share|improve this answer




























        2














        Scrolling the page to the near by point mentioned in the exception did the trick for me. Below is code snippet:



        $wd_host = 'http://localhost:4444/wd/hub';
        $capabilities =
        [
        WebDriverCapabilityType::BROWSER_NAME => 'chrome',
        WebDriverCapabilityType::PROXY => [
        'proxyType' => 'manual',
        'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
        'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
        'noProxy' => PROXY_EXCEPTION // to run locally
        ],
        ];
        $webDriver = RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000);
        ...........
        ...........
        // Wait for 3 seconds
        $webDriver->wait(3);
        // Scrolls the page vertically by 70 pixels
        $webDriver->executeScript("window.scrollTo(0, 70);");


        NOTE: I use Facebook php webdriver






        share|improve this answer


























          2












          2








          2







          Scrolling the page to the near by point mentioned in the exception did the trick for me. Below is code snippet:



          $wd_host = 'http://localhost:4444/wd/hub';
          $capabilities =
          [
          WebDriverCapabilityType::BROWSER_NAME => 'chrome',
          WebDriverCapabilityType::PROXY => [
          'proxyType' => 'manual',
          'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
          'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
          'noProxy' => PROXY_EXCEPTION // to run locally
          ],
          ];
          $webDriver = RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000);
          ...........
          ...........
          // Wait for 3 seconds
          $webDriver->wait(3);
          // Scrolls the page vertically by 70 pixels
          $webDriver->executeScript("window.scrollTo(0, 70);");


          NOTE: I use Facebook php webdriver






          share|improve this answer













          Scrolling the page to the near by point mentioned in the exception did the trick for me. Below is code snippet:



          $wd_host = 'http://localhost:4444/wd/hub';
          $capabilities =
          [
          WebDriverCapabilityType::BROWSER_NAME => 'chrome',
          WebDriverCapabilityType::PROXY => [
          'proxyType' => 'manual',
          'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
          'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
          'noProxy' => PROXY_EXCEPTION // to run locally
          ],
          ];
          $webDriver = RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000);
          ...........
          ...........
          // Wait for 3 seconds
          $webDriver->wait(3);
          // Scrolls the page vertically by 70 pixels
          $webDriver->executeScript("window.scrollTo(0, 70);");


          NOTE: I use Facebook php webdriver







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Aug 1 '18 at 5:01









          Sudheesh.M.SSudheesh.M.S

          309310




          309310























              2














              I ran into this error while trying to click some element (or its overlay, I didn't care), and the other answers didn't work for me. I fixed it by using the elementFromPoint DOM API to find the element that Selenium wanted me to click on instead:



              element_i_care_about = something()
              loc = element_i_care_about.location
              element_to_click = driver.execute_script(
              "return document.elementFromPoint(arguments[0], arguments[1]);",
              loc['x'],
              loc['y'])
              element_to_click.click()


              I've also had situations where an element was moving, for example because an element above it on the page was doing an animated expand or collapse. In that case, this Expected Condition class helped. You give it the elements that are animated, not the ones you want to click. This version only works for jQuery animations.



              class elements_not_to_be_animated(object):
              def __init__(self, locator):
              self.locator = locator

              def __call__(self, driver):
              try:
              elements = EC._find_elements(driver, self.locator)
              # :animated is an artificial jQuery selector for things that are
              # currently animated by jQuery.
              return driver.execute_script(
              'return !jQuery(arguments[0]).filter(":animated").length;',
              elements)
              except StaleElementReferenceException:
              return False





              share|improve this answer






























                2














                I ran into this error while trying to click some element (or its overlay, I didn't care), and the other answers didn't work for me. I fixed it by using the elementFromPoint DOM API to find the element that Selenium wanted me to click on instead:



                element_i_care_about = something()
                loc = element_i_care_about.location
                element_to_click = driver.execute_script(
                "return document.elementFromPoint(arguments[0], arguments[1]);",
                loc['x'],
                loc['y'])
                element_to_click.click()


                I've also had situations where an element was moving, for example because an element above it on the page was doing an animated expand or collapse. In that case, this Expected Condition class helped. You give it the elements that are animated, not the ones you want to click. This version only works for jQuery animations.



                class elements_not_to_be_animated(object):
                def __init__(self, locator):
                self.locator = locator

                def __call__(self, driver):
                try:
                elements = EC._find_elements(driver, self.locator)
                # :animated is an artificial jQuery selector for things that are
                # currently animated by jQuery.
                return driver.execute_script(
                'return !jQuery(arguments[0]).filter(":animated").length;',
                elements)
                except StaleElementReferenceException:
                return False





                share|improve this answer




























                  2












                  2








                  2







                  I ran into this error while trying to click some element (or its overlay, I didn't care), and the other answers didn't work for me. I fixed it by using the elementFromPoint DOM API to find the element that Selenium wanted me to click on instead:



                  element_i_care_about = something()
                  loc = element_i_care_about.location
                  element_to_click = driver.execute_script(
                  "return document.elementFromPoint(arguments[0], arguments[1]);",
                  loc['x'],
                  loc['y'])
                  element_to_click.click()


                  I've also had situations where an element was moving, for example because an element above it on the page was doing an animated expand or collapse. In that case, this Expected Condition class helped. You give it the elements that are animated, not the ones you want to click. This version only works for jQuery animations.



                  class elements_not_to_be_animated(object):
                  def __init__(self, locator):
                  self.locator = locator

                  def __call__(self, driver):
                  try:
                  elements = EC._find_elements(driver, self.locator)
                  # :animated is an artificial jQuery selector for things that are
                  # currently animated by jQuery.
                  return driver.execute_script(
                  'return !jQuery(arguments[0]).filter(":animated").length;',
                  elements)
                  except StaleElementReferenceException:
                  return False





                  share|improve this answer















                  I ran into this error while trying to click some element (or its overlay, I didn't care), and the other answers didn't work for me. I fixed it by using the elementFromPoint DOM API to find the element that Selenium wanted me to click on instead:



                  element_i_care_about = something()
                  loc = element_i_care_about.location
                  element_to_click = driver.execute_script(
                  "return document.elementFromPoint(arguments[0], arguments[1]);",
                  loc['x'],
                  loc['y'])
                  element_to_click.click()


                  I've also had situations where an element was moving, for example because an element above it on the page was doing an animated expand or collapse. In that case, this Expected Condition class helped. You give it the elements that are animated, not the ones you want to click. This version only works for jQuery animations.



                  class elements_not_to_be_animated(object):
                  def __init__(self, locator):
                  self.locator = locator

                  def __call__(self, driver):
                  try:
                  elements = EC._find_elements(driver, self.locator)
                  # :animated is an artificial jQuery selector for things that are
                  # currently animated by jQuery.
                  return driver.execute_script(
                  'return !jQuery(arguments[0]).filter(":animated").length;',
                  elements)
                  except StaleElementReferenceException:
                  return False






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Sep 7 '18 at 13:44

























                  answered Jul 3 '18 at 22:09









                  rescdskrescdsk

                  7,03332728




                  7,03332728















                      Popular posts from this blog

                      Guess what letter conforming each word

                      Port of Spain

                      Run scheduled task as local user group (not BUILTIN)