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.

2voto

radeklos Punkte 1938

Vielleicht ist es keine wirklich saubere Lösung, aber sie funktioniert:

try:
    el.click()
except WebDriverException as e:
    if 'Element is not clickable at point' in e.msg:
        self.browser.execute_script(
            '$("{sel}").click()'.format(sel=el_selector)
        )
    else:
        raise

2voto

CargoMeister Punkte 4117

Es ist komisch, die ganze Zeit, die ich damit verbracht habe, mir die verschiedenen Antworten anzusehen, hat niemand das Offensichtliche ausprobiert, was ich natürlich auch nicht getan habe. Wenn auf Ihrer Seite dieselbe ID mehrfach verwendet wird, wie es bei mir der Fall war ("newButton"), und die gewünschte ID nicht die erste ist, die gefunden wird, dann werden Sie höchstwahrscheinlich diesen Fehler erhalten. Die einfachste Sache zu tun (C#):

var testIt = driver.FindElements(By.Id("newButton"));

Beachten Sie, dass es FindElements heißt, nicht FindElement.

Testen Sie dann, wie viele Ergebnisse bei der Abfrage zurückkamen. Wenn es das zweite ist, können Sie dann verwenden:

testit[1].Click();

Oder derjenige, der die IDs wiederverwendet hat, soll sie korrigieren.

2voto

Super Mario Punkte 838

Ich mache eine Art rohe Gewalt von Klicks und es funktioniert für mich.

try:
    elem.click()
except:
    print "failed to click"
    size = elem.size
    mid_of_y = int(size["height"])/2
    stepts_to_do_to_left = int(size["width"])
    while stepts_to_do_to_left > 0:
        try:
            print stepts_to_do_to_left, mid_of_y
            action = webdriver.common.action_chains.ActionChains(driver)
            action.move_to_element_with_offset(elem, mid_of_y, stepts_to_do_to_left)
            action.click()
            action.perform()
            print "DONE CLICK"
            break
        except:
            pass

2voto

Bruno Lee Punkte 1491

Nachdem ich alle genannten Vorschläge ausprobiert hatte, funktionierte nichts. Ich habe diesen Code erstellt. Es funktioniert, ist aber nicht schön

public void click(WebElement element) {
    //https://code.google.com/p/selenium/issues/detail?id=2766 (fix)
    while(true){
        try{
            element.click();
            break;
        }catch (Throwable e){
            try {
                Thread.sleep(200);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
    }
}

public void click(String css) {
    //https://code.google.com/p/selenium/issues/detail?id=2766 (fix)
    while(true){
        try{
            driver.findElement(By.cssSelector(css)).click();
            break;
        }catch (Throwable e){
            try {
                Thread.sleep(200);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
    }
}

2voto

Jaime Agudo Punkte 7649

Ich hatte das gleiche Problem mit clj-webdriver (Clojure-Portierung von Selenium). Ich habe die vorherige Lösung der Einfachheit halber einfach in Clojure übersetzt. Sie können diese Funktion aufrufen, bevor Sie klicken oder was auch immer, um dieses Problem zu vermeiden.

(defn scrollTo
  "Scrolls to the position of the given css selector if found"
  [q]
  (if (exists? q) 
    (let [ loc (location-once-visible q) jscript (str "window.scrollTo(" (:x loc) "," (:y loc) ")") ] 
      (execute-script jscript))))

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