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
Class:
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);