This is the error:
Exception in thread "main" org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element ... is not clickable at point (44, 230). Other element would receive the click: ...
I got these 2 buttons (CATALOG and PRODUCTS):
CATALOG has this:
<a href="#" onclick="return false;" ><span>Catalog</span></a>
XPATH:
//*[@id="menu-catalog-catalog"]/a
PRODUCTS button has this:
<a href="https://testing.testing/backend/catalog/product/index/key/c3b3205a4808f24f54ac05c10ee0035f5497b72e83f5a6617efe18bbdb9353be/" ><span>Products</span></a>
and this XPATH:
//*[@id="menu-catalog-catalog"]/div/ul/li/div/ul/li[1]/a
I did this in both cases:
driver.findElement(By.xpath("//*[@id=\"menu-catalog-catalog\"]/a")).click();
driver.findElement(By.xpath("//*[@id=\"menu-catalog-catalog\"]/div/ul/li/div/ul/li[1]/a")).click();
The problem is that sometimes it clicks on the buttons and sometimes don't so i dont know what's going on.
A new button:
<button type="button" data-bind="click: apply.bind($data, false)">
<span data-bind="i18n: 'Search'">Search</span>
</button>
It's XPATH:
//*[@id="container"]/div/div[2]/div[1]/div[5]/button
Take a look at this:
The SEARCH ICON has this:
<button type="button" data-bind="click: apply.bind($data, false)">
<span data-bind="i18n: 'Search'">Search</span>
</button>
XPATH:
//*[@id="container"]/div/div[2]/div[1]/div[5]/button
And then, i click on the grid and it has this:
<td data-bind="css: getFieldClass($row()), click: getFieldHandler($row()), template: getBody()">
<div data-bind="html: $col.getLabel($row())">HISENSE 32"</div>
</td>
And XPATH:
//*[@id="container"]/div/div[4]/table/tbody/tr/td[4]
I did this:
driver.findElement(By.xpath("//*[@id=\"container\"]/div/div[2]/div[1]/div[5]/button")).click();
driver.findElement(By.xpath("//*[@id=\"container\"]/div/div[4]/table/tbody/tr/td[7]")).click();
CodePudding user response:
Use webdriverwait() and wait for element to be clickable.
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
WebElement elementCat = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[.//span[text()='Catalog']]")));
elementCat.click();
WebElement elementProd = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[.//span[text()='Products']]")));
elementProd.click();
If you are still getting similar error you might need to use action class
or inject javascripts
executor.
CodePudding user response:
In case even after using WebDriverWait
ExpectedConditions.elementToBeClickable
you getting Element ... is not clickable at point
error I'd suggest clicking that element with JavaScript.
Normally this approach is not recommended, but if no better way this powerful tool can be used.
Trying to improve Kunduk's answer.
So, please try this:
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
JavascriptExecutor executor = (JavascriptExecutor)driver;
WebElement elementCat = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[.//span[text()='Catalog']]")));
executor.executeScript("arguments[0].click();", elementCat);
WebElement elementProd = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[.//span[text()='Products']]")));
executor.executeScript("arguments[0].click();", elementProd);