it-swarm.com.de

Fehler beim Debuggen "Element ist an der Stelle nicht anklickbar"

Ich sehe das nur in Chrome.

Die vollständige Fehlermeldung lautet:

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

Das Element, das den Klick erhalten würde, befindet sich auf der Seite des betreffenden Elements, nicht auf dem Element und überlappt es nicht, es bewegt sich nicht auf der Seite.

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

310
user1591169

Dies wird durch folgende 3 Typen verursacht:

1.Das Element ist zum Klicken nicht sichtbar.

Verwenden Sie Actions oder JavascriptExecutor , um das Klicken zu aktivieren.

Durch Aktionen:

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

Actions actions = new Actions(driver);

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

Mit 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.

oder

JavascriptExecutor jse = (JavascriptExecutor)driver;

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

Klicken Sie dann auf das Element.

2.Die Seite wird aktualisiert, bevor sie auf das Element klickt.

Lassen Sie dazu die Seite einige Sekunden warten.

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

Der folgende Code wartet, bis die Überlagerung angezeigt wird

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

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);

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

Klicken Sie dann auf das Element.

267

Sie können auch JavaScript-Klick verwenden, und dann ist kein Scrollen erforderlich.

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

Es scheint einen Fehler in Chromedriver zu geben (das Problem ist, dass es als nicht behoben markiert wird) --> GitHub Link

(Setzen Sie eine Prämie auf FreedomSponsors vielleicht?)

Bei Kommentar Nr. 27 wird eine Problemumgehung vorgeschlagen. Vielleicht klappt es bei Ihnen.

39
Tony Lâmpada

Ich hatte das gleiche Problem, versuchte alle angebotenen Lösungen, aber sie funktionierten nicht für mich.

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));

Hoffe das hilft

28
XGillerX

Ich habe dies in der Situation gesehen, als das mit Selenium angetriebene Chrome-Fenster zu klein geöffnet wurde. Das Element, das angeklickt werden soll, befand sich außerhalb des Darstellungsbereichs und schlug daher fehl.

Das klingt logisch ... ein echter Benutzer muss entweder die Größe des Fensters ändern oder einen Bildlauf durchführen, damit das Element angezeigt und tatsächlich angeklickt werden kann.

Nachdem ich den Selenium-Treiber angewiesen hatte, die Fenstergröße entsprechend einzustellen, sind diese Probleme für mich verschwunden. Die Webdriver-API wird beschrieben hier .

16
opichals

Wow, viele Antworten hier und viele gute.

Ich hoffe, ich werde aus meiner Erfahrung etwas hinzufügen.

Nun, Leute, in meinem Fall gab es eine Cookie-Überlagerung, die das Element gelegentlich verbirgt. Das Scrollen zu dem Element funktioniert auch; aber meiner bescheidenen meinung nach (für meinen fall kein allheilmittel für jedermann) ist es die einfachste lösung, einfach im vollbildmodus zu laufen (ich habe meine scripts auf einem 3/4 des bildschirmfensters ausgeführt)! Auf geht's:

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

Hoffentlich hilft das!

15
Xwris Stoixeia

Ich habe auch mit diesem Problem gerungen. Code funktioniert gut in FF, schlägt in Chrome fehl. Ich habe versucht, ein Ankreuzfeld anzuklicken. Wenn es nicht angezeigt wird, blättere ich zur Ansicht und klicke dann auf. Selbst das Scrollen in die Ansicht funktioniert in Chrome, nur die untersten Pixel des Kontrollkästchens waren nicht sichtbar, sodass der Web-Treiber nicht darauf klicken wollte. 

Mein Workaround ist folgender:

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. Das Verwenden von Aktionen ist manchmal erforderlich. Natürlich müssen Sie wissen, in welche Richtung und wie viel Sie fahren müssen, damit Ihre Laufleistung variieren kann. Aber ich bevorzuge das dem Javascript-Hack, also poste ich es hier, falls jemand anderes es nützlich finden wird.

13
kolibri

Ruby/Watir-Webdriver/Chrom

Ich benutze den folgenden Trick und scheint so 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")
13
Annet

Dieser Fehler wurde beim Ausführen von Tests mit xvfb-run ohne Heads angezeigt. Sie arbeiteten einwandfrei vor Ort. Verwendung von Chrome, Versionen von Webdriver/Chromdriver/Chrome/Java usw. sind alle identisch.

Der Fehler, der nicht behoben werden konnte, im Chromedriver - GitHub Link , auf den Tony Lâmpada hingewiesen hat, deutete darauf hin, dass dies mit dem zusammenhängt, was auf dem Bildschirm sichtbar ist/nicht.

Die Hilfemeldung für xvfb-run zeigt Folgendes:

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

Das Ändern der Auflösung für xvfb hat den Fehler beseitigt:

xvfb-run -s "-screen 0 1280x1024x16" ...
12
u-phoria

Bei der Verwendung von Winkelmesser hat mir dies geholfen:

var Elm = element(by.css('.your-css-class'));
browser.executeScript("arguments[0].scrollIntoView();", Elm.getWebElement());
Elm.click();
8
Gal Bracha

Versuchen Sie zunächst, den neuesten Chrome-Treiber zu erhalten, und prüfen Sie, ob er das Problem löst. 

In meinem Fall wurde das Problem nicht behoben. Aber die folgende Lösung hat bisher für mich funktioniert. Der folgende Code ist C #, aber Sie können dieselbe Logik in Ihrer Sprache verwenden. Was wir hier machen, ist 

Schritt 1: Fokussieren Sie das Element mit dem Selenium Actions-Objekt.

Schritt 2: Klicken Sie dann auf das Element

Schritt 3: Wenn eine Ausnahme vorliegt, lösen wir ein Javascript-Ereignis "Click" für das Element aus, indem Sie das Javascript-Skript über die "ExecuteScript" -Methode des Selenium-Browsertreibers ausführen. 

Sie können auch Schritt 1 und 2 überspringen und nur Schritt 3 versuchen. Schritt 3 würde von selbst funktionieren, aber ich habe in einem Szenario ein merkwürdiges Verhalten festgestellt, in dem Schritt 3, obwohl das Element erfolgreich geklickt wurde, unerwartetes Verhalten in anderen Teilen meines Codes verursacht hat, nachdem Sie auf das Element geklickt haben.

            try
            {
                //Setup the driver and navigate to the web page...
                var driver = new ChromeDriver("folder path to the Chrome driver");
                driver.Navigate().GoToUrl("UrlToThePage");

                //Find the element...
                var element = driver.FindElement(By.Id("elementHtmlId")); 

                //Step 1
                new Actions(driver).MoveToElement(element).Perform();  

                //Step 2
                element.Click();
            }
            catch (Exception)
            {
                //Step 3
                driver.ExecuteScript("document.getElementById('elementHtmlId').click();");

            }
8
Sujeewa

Ich hatte das gleiche Problem, als ich das Selenium-Skript in Python lief. Hier habe ich das Element angeklickt:

from Selenium.webdriver.common.action_chains import ActionChains


ActionChains(driver).click(element).perform()
6
Prabhjot Rai

Ich habe diese Methode basierend auf einem Kommentar von Tony Lâmpadas Antwort erstellt. Es funktioniert sehr gut. 

def scroll_to(element)
  page.execute_script("window.scrollTo(#{element.native.location.x}, #{element.native.location.y})")
end
6
Roger Garza

Ich war mit einem ähnlichen Problem konfrontiert, bei dem ich zwei Kontrollkästchen nacheinander aktivieren mußte. Aber ich bekam den gleichen Fehler wie oben.Wenn ich hinzugefügt habe, füge ich zwischen meine Schritte zum Überprüfen der Kontrollkästchen hinzu ... es funktioniert gut und großartig. Hier sind die Schritte: -

  When I visit /administrator/user_profiles
  And I press xpath link "//*[@id='1']"
  Then I should see "Please wait for a moment..."
  When I wait for 5 seconds
  And I press xpath link "//*[@id='2']"
  Then I should see "Please wait for a moment..."
  When I visit /administrator/user_profiles_updates
5
Milind

Anscheinend ist dies das Ergebnis eines "Won't Fix" -Fehlers in der Chrome-Treiber-Binärdatei.

Eine für mich funktionierende Lösung (Our Mileage May Vary) kann in dieser Google-Gruppendiskussion gefunden werden, Kommentar Nr. 3:

https://groups.google.com/forum/?fromgroups=#!topic/Selenium-developer-activity/DsZ5wFN52tc

Der relevante Teil ist hier richtig:

Ich habe das Problem seitdem umgangen, indem ich direkt zur Href von .__ navigiere. der übergeordnete Anker der Spannweite.

driver.Navigate (). GoToUrl (driver.FindElement (By.Id (embeddedSpanIdToClick)). FindElement (By.XPath ("..")). GetAttribute ("href"));

In meinem Fall verwende ich Python. Sobald ich das gewünschte Element gefunden hatte, habe ich es einfach verwendet

driver.get(ViewElm.get_attribute('href'))

Ich würde erwarten, dass dies nur funktioniert, wenn das Element, auf das Sie klicken, ein Link ist ...

4
alpheus

Dies kann passieren, wenn das Element seine Position ändert, während der Treiber versucht, darauf zu klicken (ich habe dies auch mit IE gesehen). Der Fahrer behält die Ausgangsposition bei, aber wenn er tatsächlich darauf geklickt wird, zeigt diese Position nicht mehr auf dieses Element. Der FireFox-Treiber hat dieses Problem übrigens nicht, anscheinend "klickt" er Elemente programmgesteuert.

Dies kann jedoch der Fall sein, wenn Sie Animationen verwenden oder einfach die Höhe von Elementen dynamisch ändern (z. B. $("#foo").height(500)). Sie müssen sicherstellen, dass Sie nur dann auf Elemente klicken, wenn sich ihre Höhe "festgelegt hat". Ich bekam am Ende Code, der so aussieht (C # -Bindungen):

if (!(driver is FirefoxDriver))
{
    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(
        d => d.FindElement(By.Id(someDynamicDiv)).Size.Height > initialSize);
}

Im Falle einer Animation oder eines anderen Faktors, den Sie nicht leicht abfragen können, können Sie eine "generische" Methode verwenden, die darauf wartet, dass das Element stationär ist:

var prevLocation = new Point(Int32.MinValue, Int32.MinValue);
int stationaryCount = 0;
int desiredStationarySamples = 6; //3 seconds in total since the default interval is 500ms
return new WebDriverWait(driver, timeout).Until(d => 
{
    var e = driver.FindElement(By.Id(someId));
    if (e.Location == prevLocation)
    {
        stationaryCount++;
        return stationaryCount == desiredStationarySamples;
    }

    prevLocation = e.Location;
    stationaryCount = 0;
    return false;
});
3
Ohad Schneider

Ich habe dies getroffen, weil ein Ladedialog dieses Element abdeckt. Ich löse es einfach, indem Sie ein Warten hinzufügen, bevor Sie mit diesem Element arbeiten. 

try {
        Thread.sleep((int) (3000));
    } catch (InterruptedException e) {
        //
        e.printStackTrace();
    }

Ich hoffe das hilft!

3
Huy Hóm Hỉnh

Ich hatte das gleiche Problem mit clj-webdriver (clojure port of Selenium). Ich habe die vorherige Lösung nur aus Komfortgründen 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))))
3
Jaime Agudo

Erklärung der Fehlermeldung :

Die Fehlermeldung besagt lediglich, dass das Element, auf das Sie klicken möchten, vorhanden ist, aber nicht sichtbar ist. Es könnte durch etwas verdeckt oder vorübergehend nicht sichtbar sein.

Es kann viele Gründe dafür geben, dass das Element im Moment des Tests nicht sichtbar ist. Bitte analysieren Sie Ihre Seite erneut und finden Sie die richtige Lösung für Ihren Fall.

Lösung für den besonderen Fall :

In meinem Fall tritt dieser Fehler auf, wenn ein Tooltip des Bildschirmelements, auf das ich gerade geklickt habe, über dem Element erscheint, das ich als Nächstes anklicken wollte. Defocus war eine Lösung, die ich brauchte.

  • Schnelle Lösung Wie defokussiert werden kann, ist das Klicken auf ein anderes Element in einem anderen Teil des Bildschirms, das "nichts" bzw. Nichts passiert nach einer Klickaktion. 
  • Richtige Lösung wäre der Aufruf von element.blur() für das Element, das die QuickInfo öffnet, wodurch die QuickInfo nicht mehr angezeigt wird. 
3
Dee

Ich mache eine Art rohe Kraft 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
2
Super Mario

Der Grund für diesen Fehler ist, dass sich das Element, auf das Sie klicken, nicht im Ansichtsfenster (Bereich befindet, der vom Benutzer gesehen wird) des Browsers befindet. Um dies zu überwinden, scrollen Sie zuerst zum gewünschten Element und führen dann den Klick aus.

Javascript:

async scrollTo (webElement) {
    await this.driver.executeScript('arguments[0].scrollIntoView(true)', webElement)
    await this.driver.executeScript('window.scrollBy(0,-150)')
}

Java:

public void scrollTo (WebElement e) {
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    js.executeAsyncScript('arguments[0].scrollIntoView(true)', e)
    js.executeAsyncScript('window.scrollBy(0,-150)')
}
2
sri

Wenn Sie jQuery auf der Seite geladen haben, können Sie den folgenden Javascript-Befehl ausführen:

"$('#" + element_id + "').click()"

Beispiel mit Python-Executor:

driver.execute_script("$('#%s').click()" % element_id)
2
Zags

Nachdem alle genannten Vorschläge getestet wurden, 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();
            }
        }
    }
}
2
Bruno Marinho

Es ist komisch, die ganze Zeit, in der ich mir die verschiedenen Antworten angeschaut hatte, hatte niemand das Offensichtliche versucht, was ich natürlich auch nicht getan hatte. Wenn Ihre Seite dieselbe ID mehrmals verwendet hat, wie meine, ("newButton"), und die gewünschte nicht die erste ist, werden Sie höchstwahrscheinlich diesen Fehler erhalten. Die einfachste Sache (C #):

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

Beachten Sie, dass es sich um FindElements handelt, nicht um FindElement.

Testen Sie anschließend, wie viele Ergebnisse aus dem Abruf stammen. Wenn es die zweite ist, können Sie Folgendes verwenden:

testit[1].Click();

Oder lassen Sie sich von wem auch immer wiederverwenden, um sie zu reparieren.

2
CargoMeister

Zu Tony Lâmpadas Antwort, Kommentar Nr. 27, hat das Problem tatsächlich für mich gelöst, mit der Ausnahme, dass Java-Code bereitgestellt wurde und ich Python brauchte. Hier ist eine Python-Funktion, die zur Position des Elements blättert und dann darauf klickt.

def scroll_to_and_click(xpath):
    element = TestUtil.driver.find_element_by_xpath(xpath)
    TestUtil.driver.execute_script('window.scrollTo(0, ' + str(element.location['y']) + ');')
    element.click()

Dies löste das Problem für mich in Chrome 34.0. In Firefox 28.0 und IE 11 wurde kein Schaden verursacht. Diese Browser unterliegen nicht dem Problem, aber das Scrollen an die Position des Elements vor dem Klicken ist immer noch nicht schlecht.

2
Steve Saporta

Ich habe diesen Fehler erhalten, weil ich einen Schwebeflug getestet habe und dann auf den Link unterhalb der QuickInfo klicken musste. Die Lösung bestand darin, page.find('.sp-logo').hover vor click_link hinzuzufügen, um den Tooltip aus dem Weg zu räumen.

2
dankohn

Vielleicht ist es keine wirklich saubere Lösung, aber es 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
2
radeklos

Ich hatte einen weiteren Fehler, bei dem find_link in Chrome und Poltergeist kein A-Tag mit einem EM-Tag und Text darin anklicken konnte, obwohl dies in Firefox und rack_test einwandfrei funktioniert. Die Lösung bestand darin, click_link(link) durch Folgendes zu ersetzen:

find('a em', text: link).click
1
dankohn

Ich hatte dieselbe Ausnahme, als ich versuchte, auf eines der Optionsfelder auf meiner Seite zu klicken. Ich habe unter Javascript verwendet und mit IJavaScriptExecutor beendet. C # -Beispiel

string script=" function clickCharity() {"+
"var InputElements = document.getElementsByName('Charity');"+
  "for (i=0; i<InputElements.length; i++){"+
    "if(InputElements[i].getAttribute('value') == 'true')"+
    "{"+
        "InputElements[i].click();"+
    "}"+
"}"+
"}";
var js=WebDriver as IJavaScriptExecutor;
js.ExecuteScript(script);
1
JSDeveloper

Anstatt

webdriver.findElement(By.id("id1")).click();

versuchen zu benutzen

click(By.id("id1"));

void click(final By byLocator) {
    waitFor(new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver driver) {
            WebElement element = driver.findElement(byLocator);
            if (element.isDisplayed()) {
                try {
                    element.click();
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return false;
        }

        @Override
        public String toString() {
            return "Element located " + byLocator + " clicked";
        }
    });
}
1

Ich war aus dem gleichen Grund auch zwei Tage lang festgefahren, tatsächlich funktioniert das Scrollen, da möglicherweise die Daten nicht richtig geladen werden konnten, was immer wieder denselben Fehler verursachen kann.

Was ich getan habe, ist, dass ich nach dem Zufallsprinzip einmal mit (0, -500), dann mit (0,400) und dann mit (0, -600) nach unten scrolle. Sie geben diesen Scroll-Wert entsprechend Ihrer Verwendung an. Scrollen Sie einfach dorthin, wo Sie den Inhalt zum Klicken haben.

driver.execute_script("scrollBy(0,-500);")
sleep(5)

driver.execute_script("scrollBy(0,400);")
sleep(5)

driver.execute_script("scrollBy(0,-600);")
sleep(5)

Es hat wirklich funktioniert :)

1
Sanyam Gupta

In Drupal bei der Verwendung von Selen :

    // Get element.
    $element = $this->driver->getElement('xpath=//input');        
    // Get screen location.
    $location = $element->getLocation();
    // To make sure that Chrome correctly handles clicking on the elements 
    // outside of the screen, we must move the cursor to the element's location.
    $this->driver->moveCursor($location['x'], $location['y']);

    // Optionally, set some sleep time (0.5 sec in the example below) if your
    // elements are visible after some animation.
    time_nanosleep(0, 500000000);

    // Click on the element.
    $element->click();
1

Ich hatte das gleiche Problem und bekam den Fehler "Anderes Element würde den Klick erhalten" für ein angezeigtes sichtbares Element. Ich habe keine andere Lösung gefunden, um den Klick mit einem Javascript auszulösen.

Ich ersetzte:

WebElement el = webDriver.findElement(By.id("undo-alert"));
WebElement closeButton = el.findElement(By.className("close"));
// The following throws 'Element is not clickable at point ... Other element 
// would receive the click'
closeButton.click();

mit:

((JavascriptExecutor) webDriver).executeScript(
    "$('#undo-alert').find('.close').click();"
);

und alles hat gut funktioniert

1
mwikblom

Wenn Sie in Visual Studio 2013 BrowserLink aktivieren, wird eine BrowserLink-Navigationsleiste am unteren Bildschirmrand angezeigt. Wenn sich das Element, auf das Sie klicken möchten, hinter dieser Navigationsleiste befindet, wird der Fehler angezeigt. Das Deaktivieren von BrowserLink hat das Problem für mich gelöst.

1
Jim Sowers

Ich hatte das gleiche Problem und es wurde durch einen ID-Konflikt zwischen dem Div und dem Link innerhalb des Div verursacht. Der Treiber klickte also auf das div anstatt auf den Link, den ich wollte ... Ich habe die Div-ID geändert und es hat richtig funktioniert.

Vor:

<div id="logout"><a id="logout" href="logoutLink">logout</a></div>

Nach dem:

<div id="differentId"><a id="logout" href="logoutLink">logout</a></div>
1
Jordan Silva

Ich hatte das gleiche Problem und verbrachte Stunden damit, die Lösung zu finden. Ich habe versucht, eine Zelle am unteren Rand eines langen ngGrid mit einem Winkelmesser anzuklicken. Hier ist eine Momentaufnahme meines ngGrid-HTML:

....many rows here..
<!- row in renderedRows ->
   <!- column in renderedColumns ->
   <div ...> <a ngclick="selectRow(row)"...>the test link 100000</a>...
....

alle Klickfunktionen funktionierten nicht. Die Lösung ist die Verwendung von evaluieren im aktuellen Gültigkeitsbereich des Elements:

element(by.cssContainingText("a", "the test link 100000"))
    .evaluate("selectRow(row)")
1
chfw

Ich bin auf dieses Problem gestoßen und es scheint (in meinem Fall) durch Klicken auf ein Element verursacht zu werden, das ein div vor dem angeklickten Element öffnet. Ich bin damit umgekommen, indem ich meinen Klick in einen großen 'ol try try block' gehüllt habe. 

1
Code Silverback

Sie können das Klicken mit JS simulieren:

public void click(WebElement element) {
    JavascriptExecutor js =(JavascriptExecutor)driver;
    js.executeScript("document.elementFromPoint(" + element.getLocation().x + "," + element.getLocation().y + ").click();");
}
1
AndreyP
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.<Id or anything>));

Hoffe das hilft.

0
Ayush Goel

Sie müssen den Fokus verwenden oder einen Bildlauf für dieses Element durchführen. Möglicherweise müssen Sie auch explict wait verwenden.

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

OR

Das Element kann nicht angeklickt werden, da sich darüber ein Drehfeld/Overlay befindet:

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 immer noch nicht funktioniert, benutze JavascriptExecutor

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

Dies könnte jemandem helfen, der WebdriverIO verwendet:

function(){
    var runInBrowser = function(argument) { 
        argument.click();
    };
    var elementToClickOn = browser.$('element');
    browser.execute(runInBrowser, elementToClickOn);
}

Quelle: https://www.intricatecloud.io/2018/11/webdriverio-tips-element-wrapped-in-div-is-not-clickable/

0
web-auto-bot

In meinem Fall hat es in Firefox funktioniert, aber in Chrome fehlgeschlagen. In Chrome wurde dieses Problem behoben, nachdem die Chrome-Treiberversion auf die neueste Version aktualisiert wurde.

0
Balram Singh

In Rselenium war dies der Fall, wenn Code häufig verwendet wurde, wenn ein Link am oberen Fensterrand positioniert wurde. Eine einfache Lösung bestand darin, sendKeysToElement () wie folgt zu verwenden.

if (unlist(webElem$isElementDisplayed())) {
    webElem$sendKeysToElement(list(key = "up_arrow"))  # Add "up arrow"..
    webElem$clickElement()  # ... before $clickElement
0
Osprey Eagle

Ich bin mit dem gleichen Problem konfrontiert und habe mit Verzögerung gearbeitet, und es funktioniert gut auf meiner Seite. Page wurde immer erfrischt und holte die anderen Locators.

Thread.sleep(2000);
        Click(By.xpath("//*[@id='instructions_container']/a"));
0
Adnan Ghaffar

Wenn Sie die folgende Zeile in Ihrer conf.js-Datei verwenden, kommentieren Sie sie bitte aus und versuchen Sie es erneut

browser.ignoreSynchronization = true;
0
rts

Versuchen Sie, den Browser zu maximieren, wenn Sie mit Auflösungen arbeiten, die größer als 1024x768 sind.

driver.manage().window().maximize();
0
D.JCode