Veralteter Elementverweis

Der veraltete Elementverweis Fehler ist ein WebDriver-Fehler, der auftritt, weil das referenzierte Webelement nicht mehr an das DOM gebunden ist.

Jedes DOM-Element wird im WebDriver durch einen eindeutigen Identifikationsverweis repräsentiert, bekannt als ein Webelement. Der Webelement-Verweis ist ein UUID, der verwendet wird, um Befehle auf bestimmte Elemente auszuführen, wie zum Beispiel das Abrufen des Tag-Namens eines Elements und das Abrufen einer Eigenschaft eines Elements.

Wenn ein Element nicht mehr an das DOM gebunden ist, d. h., es wurde aus dem Dokument entfernt oder das Dokument hat sich geändert, spricht man davon, dass es veraltet ist. Veralterung tritt beispielsweise auf, wenn Sie einen Webelement-Verweis haben und das Dokument, aus dem er abgerufen wurde, navigiert.

Beispiele

Dokumentnavigation

Bei der Navigation werden alle Webelement-Verweise auf das vorherige Dokument zusammen mit dem Dokument verworfen. Dies führt dazu, dass jede nachfolgende Interaktion mit dem Webelement mit dem Fehler eines veralteten Elementverweises fehlschlägt:

python
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 Webelement-Verweis ungültig. Dies wird ebenfalls dazu führen, dass jede nachfolgende Interaktion mit dem Webelement mit dem Fehler eines veralteten Elementverweises fehlschlägt:

python
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