WebDriver Classic-Timeouts
Mit einer WebDriver-Sitzung sind verschiedene Timeout-Definitionen verbunden, die das Verhalten für Skriptinjektion, Dokumentnavigation und Elementabruf steuern.
Das Timeouts-Objekt wird in verschiedenen Kontexten verwendet. Es kann als Konfiguration beim Erstellen einer neuen Sitzung über Capabilities verwendet werden, es wird als Teil der abgestimmten, effektiven Fähigkeiten zurückgegeben, nachdem die Sitzung erstellt wurde, und es wird als Eingabe und Ausgabe für die Befehle Set Timeouts und Get Timeouts verwendet.
Die Standardwerte können beim Erstellen der Sitzung überschrieben werden und sind wirksam, bis die Sitzung geschlossen wird. Wenn Sie Set Timeouts während der Lebensdauer der Sitzung aufrufen, werden die Standardwerte überschrieben und gelten für die Lebensdauer der Sitzung 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 das als Eingabe bei der Konfiguration der Timeouts verwendet wird:
implicit-
Zeit in Millisekunden, um die Element-Lokalisierungsstrategie bei der Suche nach einem Element zu wiederholen. Der Standardwert ist 0, was bedeutet, dass die Strategie nur einmal ausgeführt wird.
pageLoad-
Zeit in Millisekunden, die auf das vollständige Laden des Dokuments gewartet wird. 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 sie die Skript-Timeout-Dauer erreichen, die ebenfalls in Millisekunden angegeben ist. Die Skripte werden dann unterbrochen, und ein Script-Timeout-Fehler wird zurückgegeben. Der Standardwert ist 30 Sekunden (oder 30.000 ms).
Wenn das Objekt als Eingabe für den Befehl Set Timeouts oder als Teil der Timeouts-Fähigkeit beim Erstellen einer neuen Sitzung verwendet wird, sind alle Felder optional. Das bedeutet, dass Sie null oder mehr der Werte für die Timeout-Dauer einzeln oder alle auf einmal konfigurieren können.
Wenn es vom Treiber zurückgegeben wird, entweder durch Get Timeouts oder in den abgestimmten Fähigkeiten von einer erstellten Sitzung, sind alle Felder vorhanden.
Beispiele
>Timeouts bei Sitzungserstellung setzen
Sie können die Standard-Session-Timeouts überschreiben, indem Sie ein Timeouts-Capabilities-Objekt bereitstellen, wenn Sie eine neue WebDriver-Sitzung starten:
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")
Setzen und Abrufen von Timeouts zur Laufzeit
Timeouts können auch zur Laufzeit mithilfe des Set Timeouts-Befehls gesetzt werden. Diese überschreiben die aktuellen Timeouts der Sitzung und sind für die gesamte Lebensdauer der Sitzung wirksam oder bis ein nachfolgender Aufruf desselben Befehls erfolgt:
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:
{ "implicit": 4.5, "script": 300, "pageLoad": 30000 }