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 waitals definiert haben, WebDriverWait wait = new WebDriverWait(driver, 10);aber die click()Methode für das Element aufrufen, bevor das ExplicitWaitwie 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, ActionsKlasse 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 ExpectedConditionsset to, elementToBeClickabledamit 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 ExplicitWaitmit ExpectedConditionsset to, invisibilityOfElementLocateddass 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 JavascriptExecutordiese 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);