WebDriverException: Das Element kann an Punkt (x, y) nicht angeklickt werden.
Dies ist eine typische org.openqa.selenium.WebDriverException, die die java.lang.RuntimeException erweitert .
Die Felder dieser Ausnahme sind:
- 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
Über Ihren individuellen Anwendungsfall sagt der Fehler alles:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
Aus Ihrem Codeblock geht hervor, dass Sie das wait
als definiert haben, WebDriverWait wait = new WebDriverWait(driver, 10);
aber die click()
Methode für das Element aufrufen, bevor das ExplicitWait
wie in ins Spiel kommt until(ExpectedConditions.elementToBeClickable)
.
Lösung
Der Fehler Element is not clickable at point (x, y)
kann aus verschiedenen Faktoren resultieren. Sie können sie mit einem der folgenden Verfahren beheben:
1. Element, das aufgrund vorhandener JavaScript- oder AJAX-Aufrufe nicht angeklickt wird
Versuchen Sie, Actions
Klasse zu verwenden :
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. Das Element wird nicht angeklickt, da es sich nicht im Ansichtsfenster befindet
Versuchen Sie JavascriptExecutor
, das Element in das Ansichtsfenster zu bringen:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. Die Seite wird aktualisiert, bevor das Element angeklickt werden kann.
In diesem Fall induzieren Sie ExplicitWait, dh WebDriverWait, wie in Punkt 4 erwähnt.
4. Das Element ist im DOM vorhanden, aber nicht anklickbar.
In diesem Fall induzieren Sie ExplicitWait mit ExpectedConditions
set to, elementToBeClickable
damit das Element anklickbar ist:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. Element ist vorhanden, hat jedoch eine temporäre Überlagerung.
In diesem Fall induzieren Sie ExplicitWait
mit ExpectedConditions
set to, invisibilityOfElementLocated
dass die Überlagerung unsichtbar ist.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. Element ist vorhanden, hat aber eine permanente Überlagerung.
Verwenden Sie JavascriptExecutor
diese Option , um den Klick direkt auf das Element zu senden.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);