Veralteter Elementverweis
Der veraltete Elementverweis-Fehler ist ein WebDriver-Fehler, der auftritt, weil das referenzierte Web-Element nicht mehr an das DOM gebunden ist.
Jedes DOM-Element wird in WebDriver durch einen einzigartigen Identifizierungsverweis repräsentiert, bekannt als ein Web-Element. Der Web-Element-Verweis ist ein UUID, der verwendet wird, um Befehle auszuführen, die auf spezifische Elemente abzielen, wie z.B. Abrufen des Tag-Namens eines Elements und Abrufen einer Eigenschaft eines Elements.
Wenn ein Element nicht mehr an das DOM gebunden ist, d.h. es aus dem Dokument entfernt wurde oder das Dokument sich geändert hat, wird es als veraltet bezeichnet. Veralterung tritt beispielsweise auf, wenn Sie einen Web-Element-Verweis haben und das Dokument, aus dem es abgerufen wurde, navigiert.
Beispiele
>Dokumentnavigation
Bei der Navigation werden alle Web-Element-Verweise auf das vorherige Dokument zusammen mit dem Dokument verworfen. Dies führt dazu, dass jede nachfolgende Interaktion mit dem Web-Element mit dem Fehler des veralteten Elementverweises fehlschlägt:
import urllib
from selenium import webdriver
from selenium.common import exceptions
def inline(doc):
return "data:text/html;charset=utf-8,{}".format(urllib.quote(doc))
session = webdriver.Firefox()
session.get(inline("<strong>foo</strong>"))
foo = session.find_element_by_css_selector("strong")
session.get(inline("<i>bar</i>"))
try:
foo.tag_name
except exceptions.StaleElementReferenceException as e:
print(e)
Ausgabe:
StaleElementReferenceException: The element reference of e75a1764-ff73-40fa-93c1-08cb90394b65 is stale either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
Knotenentfernung
Wenn ein Dokumentknoten aus dem DOM entfernt wird, wird sein Web-Element-Verweis ungültig. Dies führt ebenfalls dazu, dass jede nachfolgende Interaktion mit dem Web-Element mit dem Fehler des veralteten Elementverweises fehlschlägt:
import urllib
from selenium import webdriver
from selenium.common import exceptions
def inline(doc):
return "data:text/html;charset=utf-8,{}".format(urllib.quote(doc))
session = webdriver.Firefox()
session.get(inline("<button>foo</button>"))
button = session.find_element_by_css_selector("button")
session.execute_script("""
let [button] = arguments;
button.remove();
""", script_args=(button,))
try:
button.click()
except exceptions.StaleElementReferenceException as e:
print(e)
Ausgabe:
StaleElementReferenceException: The element reference of e75a1764-ff73-40fa-93c1-08cb90394b65 is stale either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
Siehe auch
- WebElement
- Zugehörige Befehle: