Ответ 1
WebDriverException: элемент не кликается в точке (x, y)
Это типичное org.openqa.selenium.WebDriverException
которое расширяет java.lang.RuntimeException
.
Поля этого исключения:
-
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
О вашей индивидуальной usecase, ошибка говорит все:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
Из вашего кодового блока видно, что вы определили wait
как WebDriverWait wait = new WebDriverWait(driver, 10);
но вы вызываете метод click()
для элемента до того, как ExplicitWait
играть так же, как until(ExpectedConditions.elementToBeClickable)
.
Решение
Element is not clickable at point (x, y)
error Element is not clickable at point (x, y)
может возникать из разных факторов. Вы можете обратиться к ним с помощью одной из следующих процедур:
1. Элемент не получает клика из-за вызовов JavaScript или AJAX
Попробуйте использовать класс Actions
:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. Элемент не получает щелчок, поскольку он отсутствует в Viewport
Попробуйте использовать JavascriptExecutor
для добавления элемента в Viewport:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. Страница обновляется до того, как элемент станет доступен для клика.
В этом случае вызывают ExplicitWait
т.е. WebDriverWait
как указано в пункте 4.
4. Элемент присутствует в DOM, но не доступен для кликов.
В этом случае вызывать ExplicitWait
с ExpectedConditions
установленным на elementToBeClickable
для элемента, который можно щелкнуть:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. Элемент присутствует, но имеет временное наложение.
В этом случае вызывать ExplicitWait
с ExpectedConditions
установленным для invisibilityOfElementLocated
чтобы Overlay был невидимым.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. Элемент присутствует, но имеет постоянное наложение.
Используйте JavascriptExecutor
для отправки клика непосредственно на элемент.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);