Fügen Sie Selenium Web Driver Wait in Python hinzu
- Python Selenium Web Driver Warten
- Implizites Warten im Selenium-Webtreiber
- Explizites Warten im Selenium-Webtreiber
In diesem Artikel werden Beispiele für das Hinzufügen einer Wartezeit im Selenium-Webtreiber in Python vorgestellt.
Python Selenium Web Driver Warten
Die meisten Webanwendungen verwenden AJAX-Techniken. Aus diesem Grund benötigen verschiedene auf einer Webseite vorhandene Elemente unterschiedliche Zeitintervalle, um vollständig hochgeladen zu werden, da Selen keinen Text finden kann, bis er auf der Webseite vorhanden ist.
Möglicherweise stellen wir fest, dass ein bestimmter Text auf einer Webseite einer Anwendung nicht vorhanden ist, bevor er hochgeladen wird. Dies führt beim Testen einer Anwendung zu Fehlern.
Dieses Problem kann durch Einbeziehen von Wartezeiten gelöst werden. Diese Wartezeiten bieten Flexibilität bei der Suche nach einem Element oder einer anderen Operation auf einer Webseite.
Der Selenium-Webtreiber bietet zwei Arten von Wartezeiten. Das erste ist implizites Warten, das zweite explizites Warten.
Die Einzelheiten dieser beiden Arten von Wartezeiten werden in diesem Artikel erörtert.
Implizites Warten im Selenium-Webtreiber
Aufgrund eines langsamen Internets oder einer langsamen Antwort einer Website kann es Situationen geben, in denen wir einige Sekunden warten müssen, um alle Ergebnisse zu erhalten. In diesem Fall funktioniert das implizite Warten am besten.
Ein implizites Warten weist den Webtreiber an, das DOM für eine bestimmte Zeit abzufragen, während er Elemente findet, um alle Elemente verfügbar zu machen, wenn unser Webtreiber das Element abruft. Die Voreinstellung für den Prozess ist 0
.
Sobald wir die implizite Wartezeit festgelegt haben, gilt sie für die Lebensdauer des Webtreiberobjekts.
Es kostet den gleichen Betrag, solange wir denselben Webtreiber ausführen, ohne den Wartewert zu schließen oder neu zu starten und zu ändern.
Lassen Sie uns ein Beispiel durchgehen, in dem wir zu einer Website gehen und 10 Sekunden warten und danach auf den Link Über uns
klicken, wie unten gezeigt.
Beispielcode:
# python
from selenium import webdriver
ChromeDriver = webdriver.Chrome()
ChromeDriver.implicitly_wait(10)
ChromeDriver.get("https://www.inventicosolutions.com/")
getElemByLink = ChromeDriver.find_element_by_link_text("About Us")
getElemByLink.click()
Ausgang:
Wie Sie dem obigen Beispiel entnehmen können, wartet es nach dem Laden der Seite genau 10 Sekunden, bevor es auf die Seite Über uns
wechselt.
Explizites Warten im Selenium-Webtreiber
Ein explizites Warten ist eine Art von Code, der so definiert ist, dass er auf das Eintreten einer bestimmten Bedingung wartet und im Code weiter fortfährt. Der Extremfall des expliziten Wartens ist time.sleep()
.
Dies setzt die Bedingung für das Warten auf eine genaue Zeitspanne.
Einige geeignete Methoden helfen uns, einen expliziten Code zu schreiben. Explizite Wartezeiten werden mithilfe der Warteklasse des Webtreibers erreicht und mit expected_conditions
kombiniert.
Lassen Sie uns, wie unten gezeigt, ein Beispiel durchgehen, in dem wir ein explizites Warten anstelle eines impliziten Wartens verwenden.
Beispielcode:
# python
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ExpectedCond
chromeDriver = webdriver.Chrome()
chromeDriver.get("https://inventicosolutions.com")
getElembyLinkText = WebDriverWait(chromeDriver, 10).until(
ExpectedCond.presence_of_element_located((By.LINK_TEXT, "About Us"))
)
getElembyLinkText.click()
Ausgang:
Der Timeout-Wert beträgt 10 Sekunden für den oben geschriebenen Code. Der Webtreiber wartet 10 Sekunden, bevor er eine Timeout Exception
auslöst.
Die Webseitenadresse (URL) und das Textelement der Anwendung können je nach Anforderung in den angegebenen Code geschrieben werden.
Der Web Driver Wait (eines der Tools, die bei expliziten Waits verwendet werden) hat diese eingebaute Eigenschaft, alle 500 Millisekunden auf den Erwarteten Zustand
zu prüfen, bis der Text erfolgreich gefunden wurde.
Erwartete Wartebedingungen in Python
Diese Bedingungen werden am häufigsten bei der Automatisierung des Webbrowsers verwendet und sind im Webtreiber vordefiniert. Diese Bedingungen umfassen:
title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present
Wir können diese erwarteten Bedingungen in unseren Code aufnehmen, indem wir die folgenden Bibliotheken importieren.
# python
from selenium.webdriver.support import expected_conditions as ExpectedCond
Benutzerdefinierte Wartebedingungen in Python
Benutzerdefinierte Wartebedingungen können erstellt werden, wenn keine der oben genannten Methoden die Anforderungen eines Benutzers erfüllt. Eine benutzerdefinierte Bedingung wird mithilfe einer Klasse mit der Methode call()
erstellt.
Lassen Sie uns, wie unten gezeigt, ein Beispiel durchgehen, in dem wir eine benutzerdefinierte Bedingung erstellen und versuchen, unser Programm einige Sekunden warten zu lassen.
Beispielcode:
# python
class ElementWithClass(object):
def __init__(self, location, className):
self.location = location
self.className = className
def __call__(self, ChromeDriver):
findElem = ChromeDriver.find_element(*self.location)
if self.className in findElem.get_attribute("class"):
return findElem
else:
return False
wait = WebDriverWait(ChromeDriver, 10)
findElem = wait.until(element_has_css_class((By.ID, "myId"), "myClass"))
Dieser Code gibt dem Benutzer ein true
, wenn das Element gefunden wird, und gibt andernfalls ein false
zurück.
Daher haben wir anhand einiger Beispiele verschiedene Methoden zum Hinzufügen von Wartezeiten in Python besprochen. Wir hoffen, dass Ihnen dieses Thema gefallen hat und Sie etwas daraus gelernt haben.
Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.
LinkedIn