Fügen Sie Selenium Web Driver Wait in Python hinzu

Rana Hasnain Khan 15 Februar 2024
  1. Python Selenium Web Driver Warten
  2. Implizites Warten im Selenium-Webtreiber
  3. Explizites Warten im Selenium-Webtreiber
Fügen Sie Selenium Web Driver Wait in Python hinzu

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:

Selenium Web Driver Wait-Beispiel in Python

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:

Explizites Wartebeispiel für den Selenium-Webtreiber in Python

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 Hasnain Khan avatar Rana Hasnain Khan avatar

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

Verwandter Artikel - Python Selenium