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
Про ваш індивідуальний випадок помилка говорить все:
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)
може виникати внаслідок різних факторів. Ви можете звернутися до них за допомогою будь-якої з наступних процедур:
1. Елемент не натискається через наявні виклики JavaScript або AJAX
Спробуйте скористатися Actions
класом:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. Елемент не натискається, оскільки він не знаходиться у вікні перегляду
Спробуйте використати JavascriptExecutor
для введення елемента в область перегляду:
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
для накладення , щоб бути невидимим.
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);