WebDriverException: Phần tử không thể nhấp được tại điểm (x, y)
Đây là một org.openqa.selenium.WebDriverException điển hình mở rộng java.lang.RuntimeException .
Các trường của ngoại lệ này là:
- 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
Về usecase cá nhân của bạn, lỗi nói lên tất cả:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
Rõ ràng từ khối mã của bạn rằng bạn đã xác định wait
as WebDriverWait wait = new WebDriverWait(driver, 10);
nhưng bạn đang gọi click()
phương thức trên phần tử trước khi nó hoạt động ExplicitWait
như trong until(ExpectedConditions.elementToBeClickable)
.
Giải pháp
Lỗi Element is not clickable at point (x, y)
có thể phát sinh từ các yếu tố khác nhau. Bạn có thể giải quyết chúng bằng một trong các quy trình sau:
1. Phần tử không được nhấp do có các lệnh gọi JavaScript hoặc AJAX
Cố gắng sử dụng Actions
Class:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. Phần tử không được nhấp vì nó không nằm trong Viewport
Cố gắng sử dụng JavascriptExecutor
để đưa phần tử vào trong Viewport:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. Trang đang được làm mới trước khi phần tử có thể nhấp được.
Trong trường hợp này, tạo ra ExplicitWait tức là WebDriverWait như đã đề cập ở điểm 4.
4. Phần tử hiện diện trong DOM nhưng không thể nhấp được.
Trong trường hợp này gây ExplicitWait với ExpectedConditions
các thiết lập để elementToBeClickable
cho các phần tử được nhấp:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. Phần tử hiện diện nhưng có Lớp phủ tạm thời.
Trong trường hợp này, kích hoạt ExplicitWait
với ExpectedConditions
thiết lập để invisibilityOfElementLocated
Lớp phủ ẩn.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. Phần tử hiện diện nhưng có Lớp phủ vĩnh viễn.
Sử dụng JavascriptExecutor
để gửi nhấp chuột trực tiếp vào phần tử.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);