StaleElementReferenceError mit Selen mit Inhalten, die bereits geladen
Ich bin mit Capybara mit Ruby 1.9.3 mit der selenium-Treiber, um die Informationen zu erhalten von einer website. Nachdem Sie ein paar Seiten, die ich Besuch die Seite, die ich möchte und ich habe gesagt:
all(:css, 'td').each { |td| a_info << td }
a_info.each {|t| puts t.text }
Den Fehler ich bekomme dann nach etwa 10 Sekunden Wartezeit:
[remote server] resource://fxdriver/modules/web_element_cache.js:5628:in `unknown': Element not found in the cache - perhaps the page has changed since it was looked up (Selenium::WebDriver::Error::StaleElementReferenceError)
Folgten viele weitere remote-server-Fehler. Ich habe die Seite 10-30 Sekunden sleep Zeit, und es ist immer noch nicht geladen, und wenn ich drucken page.html sehe ich ein javascript-Skript und dann alle td 's, die ich versuche zu get info" aus. Ich weiß, dass der Fehler bedeutet, dass ein element gefunden zu werden, ist nicht die aktuelle, aber es scheint, wie alle Elemente geladen wurden bereits, also bin ich nicht sicher, warum Sie würde nicht mehr existieren. Ich habe das internet durchforstet stundenlang auf der Suche nach diesem und würde gerne jede Art von Hilfe, die von möglichen Lösungen, um zu versuchen und die nächsten Schritte zu versuchen, um es herauszufinden. Ich kann jede zusätzliche Informationen benötigt, lasst es mich einfach wissen.
InformationsquelleAutor Anoel | 2012-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es passiert, wenn Sie einen Umfang und in, dass Sie die Seite ändern, zum Beispiel, aber hält Behauptungen drin, wie die folgenden:
Nur öffnen Sie die Rahmen wieder über, um daran zu arbeiten, die alte.
within
.Das ist genau mein Fall. Die tests habe versucht, zu warten, bis Sie ein modales schließen, die innerhalb des modalen Bereich. Die Behauptung war im Grunde bedeutungslos (immer false), aber wenn das modal geschlossen zu schnell, diese Behauptung ausgelöst, diese Ausnahme. Muss eingeführt wurden, und durch einige Umgestaltung.
InformationsquelleAutor Washington Botelho
Dies ist mein wenigsten Fehler. Ich bin gonna finden Sie, um diese exakte Frage auf stack overflow, fragte etwa ein Jahr vor Random "Element ist nicht mehr an der DOM" StaleElementReferenceException
re-Lesen Sie den stack-überlauf-Fehler, die ich Ihnen geschickt; das gibt Ihnen den Grund, warum Sie haben Ihre Probleme. Hier ist die definition des Fehlers youre getting: Fehler. 30 Sekunden warten und pflegen Sie. Vielleicht versuchen Sie eine implizite warten, oder ändern Sie Ihren code zu finden, der ein td-element setzen Sie Ihren text nach unten und dann bewegen Sie auf die nächste td. Oder, wenn Sie wollen eine Art von html-parser, Informationen zu finden. Selen ist nicht das beste Werkzeug für das, was Sie zu tun versuchen.
InformationsquelleAutor Greg
Präsentiert-code, den Sie drucken von text auf der Konsole, aber vielleicht in deinem realen code, den Sie durch klicken auf diese links innerhalb
each
- Schleife ist falsch.Lösung
Versuchen Sie zuerst zu extrahieren, die href-Attribute und dann gehen durch Sie in Schleife.
Code:
Ich bin mir nicht sicher, ob es passt zu Ihrer situation zu geben, mehr info in den Kommentaren.
Vielleicht etwas javascript wird ausgeführt und es sind nicht alle td ' s, die Sie gesammelt im vorherigen Schritt. Warum Sie nicht versuchen, zu sammeln td.text in zunächst jede Methode?
InformationsquelleAutor Иван Бишевац