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.

20voto

Shubham Jain Punkte 14526

Sie müssen den Fokus oder den Bildlauf auf dieses Element anwenden. Möglicherweise müssen Sie auch explizite Wartezeit verwenden.

WebElement firstbutton= driver.findElement(By.xpath("Your Element"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();

OR

Das Element ist nicht anklickbar, da es von einem Spinner/Overlay überlagert wird:

By loadingImage = By.id("loading image ID");
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage));

OR

Point p= element.getLocation();
Actions actions = new Actions(driver);
actions.moveToElement(element).movebyoffset(p.x,p.y).click().perform();

OR

Wenn es immer noch nicht funktioniert, verwenden Sie JavascriptExecutor

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", firstbutton);

15voto

opichals Punkte 313

Ich habe dies in der Situation gesehen, wenn das seleniumgesteuerte Chrome-Fenster zu klein geöffnet wurde. Das Element, das angeklickt werden sollte, lag außerhalb des Viewports und schlug daher fehl.

Das klingt logisch... ein echter Benutzer müsste entweder die Größe des Fensters ändern oder einen Bildlauf durchführen, um das Element zu sehen und es tatsächlich anzuklicken.

Nachdem ich den Selenium-Treiber angewiesen hatte, die Fenstergröße entsprechend einzustellen, war das Problem für mich gelöst. Die Webdriver-API ist wie folgt beschrieben aquí .

13voto

u-phoria Punkte 354

Ich erhielt diesen Fehler, wenn ich Tests ohne Kopf mit xvfb-run durchführte. Lokal funktionierten sie einwandfrei. Mit Chrome, Versionen von Webdriver / chromedriver / Chrome / Java usw. alle identisch.

Der 'nicht zu behebende' Fehler in Chromedriver - GitHub-Link Tony Lâmpada hat darauf hingewiesen, dass dies damit zusammenhängen könnte, was auf dem Bildschirm zu sehen ist bzw. nicht zu sehen ist.

Die Hilfemeldung für xvfb-run zeigt folgendes an:

-s ARGS   --server-args=ARGS    arguments (other than server number and
                                "-nolisten tcp") to pass to the Xvfb server
                                (default: "-screen 0 640x480x8")

Durch Ändern der Auflösung für xvfb wurde der Fehler behoben:

xvfb-run -s "-screen 0 1280x1024x16" ...

13voto

kolibri Punkte 121

Auch ich habe mit diesem Problem gerungen. Der Code funktioniert gut in FF, schlägt aber in Chrome fehl. Was ich versuchte zu tun war, um ein Kontrollkästchen klicken - wenn es nicht in der Ansicht war, würde ich scrollen, um zu sehen und dann klicken. Sogar Scrollen in Ansicht funktioniert in Chrome, nur die unteren paar Pixel der Tickbox war nicht sichtbar, so Webdriver weigerte sich, darauf zu klicken.

Meine Abhilfe ist folgende:

WebElement element = _sectorPopup.findElement(...);

((Locatable) element).getCoordinates().inViewPort();
try {
    element.click();
} catch (Exception e) {
    new Actions(getWebDriver()).sendKeys(Keys.PAGE_DOWN).perform();
    element.click();
}

Chrome hat auch Probleme mit sendKeys, die Verwendung von Actions ist manchmal notwendig. Natürlich müssen Sie wissen, welche Richtung und wie viel Sie gehen müssen, so dass Ihre Laufleistung variieren kann. Aber ich ziehe das dem Javascript-Hack vor, also poste ich es hier, falls jemand anderes es nützlich findet.

12voto

Annet Punkte 663

Ruby/watir-web-treiber/chrome

Ich verwende den folgenden Trick und es scheint zu funktionieren:

#scroll to myelement
@browser.execute_script "window.scrollTo(#{myelement.element.wd.location[0]},#{myelement.element.wd.location[1]})"

# click myelement
myelement.when_present.fire_event("click")

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