478 Stimmen

Fehlersuche bei "Element ist an Punkt nicht klickbar"

Ich sehe dies nur in Chrome.

Die vollständige Fehlermeldung lautet:

"org.openqa.selenium.WebDriverException: Element ist an Punkt (411, 675) nicht anklickbar. Ein anderes Element würde den Klick erhalten: ..."

Das Element, das "angeklickt" werden würde, befindet sich neben dem fraglichen Element, nicht darüber und nicht überlappend, und es bewegt sich nicht auf der Seite.

Ich habe versucht, einen Versatz hinzuzufügen, aber auch das funktioniert nicht. Das Element befindet sich im angezeigten Fenster, ohne dass ein Bildlauf erforderlich ist.

390voto

Dies wird durch die folgenden 3 Arten verursacht:

1. das Element ist nicht sichtbar, um es anzuklicken.

使用する Aktionen o JavascriptExecutor dafür, dass Sie es zum Klicken gebracht haben.

Durch Aktionen:

WebElement element = driver.findElement(By("element_path"));

Actions actions = new Actions(driver);

actions.moveToElement(element).click().perform();

Durch JavascriptExecutor:

JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("scroll(250, 0)"); // if the element is on top.

jse.executeScript("scroll(0, 250)"); // if the element is on bottom.

o

JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("arguments[0].scrollIntoView()", Webelement); 

Klicken Sie dann auf das Element.

2. die Seite wird aktualisiert, bevor das Element angeklickt wird.

Lassen Sie dazu die Seite einige Sekunden warten.

3. Das Element ist anklickbar, aber es befindet sich ein Spinner/Overlay darüber

Der folgende Code wartet, bis das Overlay verschwindet

By loadingImage = By.id("loading image ID");

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);

wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage));

Klicken Sie dann auf das Element.

91voto

Bart Wojtala Punkte 1250

Sie können auch JavaScript-Klick verwenden und das Scrollen wäre dann nicht erforderlich.

IJavaScriptExecutor ex = (IJavaScriptExecutor)Driver;
ex.ExecuteScript("arguments[0].click();", elementToClick);

50voto

Tony Lâmpada Punkte 5181

Es scheint dafür einen Fehler in Chromedriver zu geben (das Problem ist, dass er als nicht behebbar markiert ist) --> GitHub-Link

(setzen Sie ein Kopfgeld auf FreiheitSponsoren vielleicht?)

In Kommentar #27 wird ein Workaround vorgeschlagen. Vielleicht klappt es bei dir.

40voto

XGillerX Punkte 491

Ich hatte das gleiche Problem und habe alle angebotenen Lösungen ausprobiert, aber sie haben bei mir nicht funktioniert. Schließlich habe ich dies verwendet:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("var evt = document.createEvent('MouseEvents');" + "evt.initMouseEvent('click',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);" + "arguments[0].dispatchEvent(evt);", findElement(element));

Ich hoffe, das hilft

24voto

Xwris Stoixeia Punkte 1801

Wow, hier gibt es viele Antworten, und viele davon sind gut.

Ich hoffe, dass ich etwas aus meiner Erfahrung dazu beitragen kann.

In meinem Fall war das Element gelegentlich durch ein Cookie-Overlay verdeckt. Scrollen zum Element funktioniert auch; aber meiner bescheidenen Meinung nach (für meinen Fall, nicht ein Allheilmittel für alle) die einfachste Lösung ist einfach zu gehen Vollbild (ich war meine Skripte auf einem 3/4 des Bildschirms Fenster laufen)! Also, los geht's:

driver.manage().window().maximize();

Ich hoffe, das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X