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 waitsebagai WebDriverWait wait = new WebDriverWait(driver, 10);tetapi Anda memanggil click()metode pada elemen sebelum ExplicitWaitmasuk 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 ActionsKelas:
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 JavascriptExecutoruntuk 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 ExpectedConditionsset ke elementToBeClickableagar 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 ExplicitWaitdengan ExpectedConditionsset ke invisibilityOfElementLocatedagar 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 JavascriptExecutoruntuk mengirim klik langsung ke elemen.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);