WebDriverException: Elemen tidak dapat diklik pada titik (x, y)
Ini adalah org.openqa.selenium.WebDriverException khas yang memperluas java.lang.RuntimeException .
Bidang pengecualian ini adalah:
- 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
Tentang kasus penggunaan individu Anda, kesalahan memberitahu semuanya:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
Jelas dari blok kode Anda bahwa Anda telah mendefinisikan wait
sebagai WebDriverWait wait = new WebDriverWait(driver, 10);
tetapi Anda memanggil click()
metode pada elemen sebelum ExplicitWait
masuk ke dalam permainan seperti di until(ExpectedConditions.elementToBeClickable)
.
Larutan
Kesalahan Element is not clickable at point (x, y)
dapat muncul dari berbagai faktor. Anda dapat mengatasinya dengan salah satu prosedur berikut:
1. Elemen tidak diklik karena adanya JavaScript atau panggilan AJAX
Coba gunakan Actions
Kelas:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. Elemen tidak diklik karena tidak berada dalam Viewport
Coba gunakan JavascriptExecutor
untuk membawa elemen dalam Viewport:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. Halaman diperbarui sebelum elemen dapat diklik.
Dalam hal ini induksi ExplicitWait yaitu WebDriverWait seperti yang disebutkan di poin 4.
4. Elemen ada di DOM tapi tidak bisa diklik.
Dalam kasus ini, induksi ExplicitWait dengan ExpectedConditions
set ke elementToBeClickable
agar elemen dapat diklik:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. Elemen ada tetapi memiliki Overlay sementara.
Dalam kasus ini, induksi ExplicitWait
dengan ExpectedConditions
set ke invisibilityOfElementLocated
agar Overlay tidak terlihat.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. Elemen ada tetapi memiliki Overlay permanen.
Gunakan JavascriptExecutor
untuk mengirim klik langsung ke elemen.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);