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()วิธีการในองค์ประกอบก่อนที่จะเข้ามาเล่นในขณะที่ExplicitWaituntil(ExpectedConditions.elementToBeClickable)
วิธีการแก้
ข้อผิดพลาดElement is not clickable at point (x, y)อาจเกิดขึ้นจากปัจจัยต่างๆ คุณสามารถจัดการได้โดยทำตามขั้นตอนต่อไปนี้:
1. องค์ประกอบไม่ได้รับการคลิกเนื่องจากมีการเรียก JavaScript หรือ AJAX
ลองใช้ActionsClass:
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);