Ich wurde damit beauftragt, einen Selentest (mit Python) auf einer Webseite bereitzustellen, für die ich den Quellcode nicht geschrieben habe (ich weiß nicht viel über Webentwicklung, aber von was? Mir wurde gesagt, es wurde mit D3 und JQuery geschrieben). Die Website generiert Grafiken, und es gibt einige Dropdown-Menüs mit Optionen. Ich versuche, alle möglichen Graphen mit diesen Optionen zu erstellen. Dazu erstelle ich aus dem Dropdown-Menü WebElement ein Select-Objekt und extrahiere den Text jeder Option im Dropdown-Menü. Später benutze ich diesen Text, um rekursiv jedes Dropdown zu durchlaufen und jede gültige Option einzugeben, um die Graphen zu erzeugen. Allerdings stolpere ich manchmal (nicht immer, und es scheint relativ zufällig zu sein) auf eine StaleElementReferenceException, während ich versuche, diese Liste von Optionen zu extrahieren, und zwar aufgrund des folgenden Codes (der auf der Zeile passiert). Ich habe frühere Fragen und Dokumentationen zu dieser Ausnahme durchsucht, und ich muss noch eine Antwort finden, die mir hilft.Python Selenium StaleElementReferenceException während des Durchlaufens Wählen Sie Optionen
#find all of the options
# create list of string options before, so as to avoid StaleElementReferenceException's
# as much as possible
el = driver.find_element(By.ID,node.element)
d = Select(el)
options = []
for op in d.options:
try:
options.append(op.get_attribute("text"))
except StaleElementReferenceException:
print >>sys.stderr, 'StaleElementReferenceException getting text from \'' + node.element + '\' element'
Jede Eingabe ist sehr hilfreich! Vielen Dank.
EDIT: Hier ist ein HTML-Snippet Beispiel einer der Dropdown-Listen:
<select class="dropdown" id="datatype" name="datatype" style="display: none;">
<option value="solar_radiation" selected="selected">solar radiation</option>
<option value="windspeed">windspeed</option>
<option value="airtemperature">airtemperature</option>
...
</select>
http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp –
Dank für den Rat! Ich habe diese Dokumentation bereits durchgesehen, und ich verstehe ziemlich gut, was die Ausnahme bedeutet. Ich bin mir nicht sicher, warum ich es in diesem Fall bekomme oder wie ich es vermeiden kann. – AndyW
wird bei Auswahl einer Option die Seite aktualisiert oder das DOM geändert? Wenn ja, verursacht das Ihr Problem. Sie verwenden einen Verweis auf ein Element, das geändert wurde –