WebDriver-Timeouts

Mit einer WebDriver-Sitzung sind verschiedene Timeout-Definitionen verbunden, die das Verhalten für Skriptinjektion, Dokumentennavigation und Elementretrieval steuern.

Sie finden das Timeouts-Objekt in einigen verschiedenen Kontexten verwendet. Es kann als Konfiguration bei der Erstellung einer neuen Sitzung über Fähigkeiten verwendet werden, es wird als Teil der übereinstimmenden, effektiven Fähigkeiten nach der Sitzungserstellung zurückgegeben und wird als Eingabe und Ausgabe für die Befehle Set Timeouts und Get Timeouts verwendet.

Die Standardwerte können bei der Sitzungserstellung überschrieben werden und sind wirksam, bis die Sitzung geschlossen wird. Wenn Sie Set Timeouts während der Laufzeit der Sitzung aufrufen, werden die Standardwerte überschrieben und bleiben für die Dauer der Sitzung wirksam oder bis Set Timeouts erneut aufgerufen wird.

Payload

Das Timeouts-Objekt ist ein JSON-Objekt, das entweder die Timeout-Werte der aktuellen Sitzung beschreibt oder als Eingabe beim Konfigurieren der Timeouts verwendet wird:

implicit

Zeit in Millisekunden, um die Element-Lokalisierungsstrategie beim Auffinden eines Elements zu wiederholen. Standardmäßig ist dies 0, was bedeutet, dass die Strategie nur einmal ausgeführt wird.

pageLoad

Zeit in Millisekunden, um auf das vollständige Laden des Dokuments zu warten. Standardmäßig wartet WebDriver fünf Minuten (oder 300.000 ms).

script

Skripte, die mit Execute Script oder Execute Async Script injiziert werden, laufen bis zur Erreichung der Skript-Timeout-Dauer, die ebenfalls in Millisekunden angegeben wird. Die Skripte werden dann unterbrochen und ein Skript-Timeout-Fehler wird zurückgegeben. Standardmäßig 30 Sekunden (oder 30.000 ms).

Wenn das Objekt als Eingabe für den Befehl Set Timeouts oder als Teil der Timeouts-Fähigkeit bei der Erstellung einer neuen Sitzung verwendet wird, sind alle Felder optional. Das bedeutet, dass Sie null oder mehr der Timeout-Dauerwerte individuell oder alle auf einmal konfigurieren können.

Wenn es vom Treiber zurückgegeben wird, entweder durch Get Timeouts oder in den übereinstimmenden Fähigkeiten nach Erstellung einer Sitzung, werden alle Felder vorhanden sein.

Beispiele

Timeouts bei Sitzungsstart setzen

Sie können die Standard-Timeouts der Sitzung überschreiben, indem Sie ein Timeouts-Fähigkeiten-Objekt bereitstellen, wenn Sie eine neue WebDriver-Sitzung starten:

python
import urllib

from selenium import webdriver

def inline(doc):
    return "data:text/html;charset=utf-8,{}".format(urllib.quote(doc))

session = webdriver.Firefox(capabilities={"timeouts": {"implicit": 4500}})
session.get(inline("""
    <h1>Example</h1>

    <script>
      // Inserts <p> below <h1> after 2.5 seconds:
      setTimeout(() => {
        const delayedElement = document.createElement("p");
        const h1 = document.querySelector("h1");
        document.body.insertAfter(delayedElement, h1);
      }, 2500);
    </script>
    """)

# This will cause the driver to wait 4.5 seconds
# for #foo to appear in the DOM:
delayed_element = session.find_element_by_tag_name("p")

Timeouts zur Laufzeit setzen und abrufen

Timeouts können auch zur Laufzeit mit dem Set Timeouts-Befehl gesetzt werden. Diese überschreiben die aktuellen Sitzung-Timeouts und sind für die gesamte Dauer der Sitzung wirksam, oder bis ein späterer Aufruf an denselben Befehl erfolgt:

python
from selenium import webdriver

session = webdriver.Firefox()

session.set_timeouts({"implicit": 4.5})
print(session.get_timeouts)

Die Ausgabe erfolgt in Sekunden, da dies die idiomatische Zeiteinheit in Python ist:

json
{ "implicit": 4.5, "script": 300, "pageLoad": 30000 }