Was ist der Unterschied zwischen diesen
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
Welches soll wann verwendet werden?
Was ist der Unterschied zwischen diesen
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
Welches soll wann verwendet werden?
Antworten:
Dies ist eine gute Frage, die Leute gesehen haben, die Close () verwenden, wenn sie es nicht sollten. Ich habe im Quellcode nach den Selenium Client & WebDriver C # -Bindungen gesucht und Folgendes festgestellt.
webDriver.Close()
- Schließen Sie das Browserfenster, auf das sich der Treiber konzentriert webDriver.Quit()
- Aufrufe Dispose () webDriver.Dispose()
Schließt alle Browserfenster und beendet die Sitzung sicherDer folgende Code entsorgt das Treiberobjekt, beendet die Sitzung und schließt alle während eines Tests geöffneten Browser, unabhängig davon, ob der Test fehlschlägt oder erfolgreich ist.
public IWebDriver Driver;
[SetUp]
public void SetupTest()
{
Driver = WebDriverFactory.GetDriver();
}
[TearDown]
public void TearDown()
{
if (Driver != null)
Driver.Quit();
}
Stellen Sie zusammenfassend sicher, dass Quit () oder Dispose () aufgerufen wird, bevor Sie das Programm beenden, und verwenden Sie die Close () -Methode nur, wenn Sie sicher sind, was Sie tun.
Hinweis:
Ich habe diese Frage gefunden, als ich versucht habe, ein verwandtes Problem herauszufinden, warum meinen VMs der Festplattenspeicher ausgeht. Es stellte sich heraus, dass eine Ausnahme dazu führte, dass Quit () oder Dispose () nicht bei jedem Lauf aufgerufen wurden, wodurch der Ordner appData die Festplatte füllte. Wir haben also die Quit () -Methode korrekt verwendet, aber der Code war nicht erreichbar. Zusammenfassung Stellen Sie sicher, dass alle Codepfade Ihre nicht verwalteten Objekte bereinigen, indem Sie ausnahmesichere Muster verwenden oder IDisposable implementieren
Auch
wenn RemoteDriver Quit () oder Dispose () aufruft, wird die Sitzung auf dem Selenium Server geschlossen. Wenn die Sitzung nicht geschlossen wird, bleiben die Protokolldateien für diese Sitzung im Speicher.
Quit()
ist eine Umleitung zuDispose()
Close()
- Es wird verwendet, um den Browser oder die Seite zu schließen, die gerade den Fokus hat.
Quit()
- Es wird verwendet, um die Webtreiberinstanz herunterzufahren oder die Webtreiberinstanz zu zerstören (Schließen Sie alle Fenster).
Dispose()
- Diese Methode ist mir nicht bekannt.
Quit
und Dispose
sollten Methoden Synonyme für einander sein. Mit anderen Worten, Quit
Anrufe Dispose
.
driver.close
und driver.quit
sind zwei verschiedene Methoden zum Schließen der Browsersitzung in Selenium WebDriver. Für Ihre Testausführung ist es wichtig, beide zu verstehen und zu wissen, wann die einzelnen Methoden anzuwenden sind. Deshalb habe ich versucht, diese beiden Methoden zu beleuchten.
driver.close
- Diese Methode schließt das Browserfenster, auf das der Fokus gesetzt ist. Trotz der bekannten Namen für diese Methode, WebDriver
ist nicht implementieren die AutoCloseable
Schnittstelle .
driver.quit
- Diese Methode ruft im Grunde driver.dispose
eine jetzt interne Methode auf, die wiederum alle Browserfenster schließt und die WebDriver-Sitzung ordnungsgemäß beendet.
driver.dispose
- Wie bereits erwähnt, handelt es sich um eine interne Methode von WebDriver, die gemäß einer anderen Antwort stillschweigend gelöscht wurde. - Überprüfung erforderlich. Diese Methode hat in einem normalen Testworkflow wirklich keinen Anwendungsfall, da eine der vorherigen Methoden für die meisten Anwendungsfälle funktionieren sollte.
Erläuterung Anwendungsfall: Sie sollten verwenden, driver.quit
wann immer Sie das Programm beenden möchten. Es werden alle geöffneten Browserfenster geschlossen und die WebDriver-Sitzung beendet. Wenn Sie driver.quit
am Ende des Programms nicht verwenden , wird die WebDriver-Sitzung nicht ordnungsgemäß geschlossen und die Dateien werden nicht aus dem Speicher gelöscht. Dies kann zu Speicherverlustfehlern führen.
Die obige Erklärung sollte den Unterschied zwischen driver.close
und driver.quit
Methoden in WebDriver erklären . Ich hoffe, Sie finden es nützlich.
Auf der folgenden Website finden Sie einige gute Tipps zum Selentest: Link
quit()
: Beendet diesen Treiber und schließt jedes zugeordnete Fenster, das geöffnet war.
close()
: Schließen Sie das aktuelle Fenster und beenden Sie den Browser, wenn es das letzte aktuell geöffnete Fenster ist.
close (): - Angenommen, Sie haben mehrere Browserfenster mit derselben Treiberinstanz geöffnet. Wenn Sie jetzt close () für die Treiberinstanz aufrufen, wird das aktuelle Fenster geschlossen, auf das die Treiberinstanz verweist. Die Treiberinstanz bleibt jedoch weiterhin im Speicher und kann zur Verarbeitung anderer geöffneter Browserfenster verwendet werden.
quit (): - Wenn Sie quit () für die Treiberinstanz aufrufen und ein oder mehrere Browserfenster geöffnet sind, werden alle geöffneten Browserfenster geschlossen, und die Treiberinstanz wird mit Müll gesammelt, dh aus dem Speicher entfernt. Daher können Sie diese Treiberinstanz jetzt nicht verwenden, um andere Vorgänge auszuführen, nachdem Sie quit () darauf aufgerufen haben. Wenn Sie dies tun, wird eine Ausnahme ausgelöst.
dispose (): - Ich glaube nicht, dass es eine dispose-Methode für eine WebDriver-Instanz gibt.
Sie können zu diesem Selenium offiziellen Java Doc Link als Referenz gehen.
Basierend auf einem Problem mit Github von PhantomJS beendet quit () den PhantomJS-Prozess nicht. Du solltest benutzen:
import signal
driver = webdriver.PhantomJS(service_args=service_args)
# Do your work here
driver.service.process.send_signal(signal.SIGTERM)
driver.quit()
close () ist ein Webdriver-Befehl, der das aktuell fokussierte Browserfenster schließt. Trotz der bekannten Namen für diese Methode, WebDriver
ist nicht implementieren die AutoCloseable
Schnittstelle .
Wenn während des Automatisierungsprozesses mehr als ein Browserfenster geöffnet ist, schließt der Befehl close () nur das aktuelle Browserfenster, das zu diesem Zeitpunkt den Fokus hat. Die restlichen Browserfenster werden nicht geschlossen. Der folgende Code kann verwendet werden, um das aktuelle Browserfenster zu schließen:
quit () ist ein Webdriver-Befehl, der die Methode driver.dispose aufruft, die wiederum alle Browserfenster schließt und die WebDriver-Sitzung beendet. Wenn am Ende des Programms nicht quit () verwendet wird, wird die WebDriver-Sitzung nicht ordnungsgemäß geschlossen und die Dateien werden nicht aus dem Speicher gelöscht. Dies kann zu Speicherverlustfehlern führen.
Wenn der Automatisierungsprozess nur ein einziges Browserfenster öffnet, funktionieren die Befehle close () und quit () auf dieselbe Weise. Beide unterscheiden sich in ihrer Funktionalität, wenn während der Automatisierung mehr als ein Browserfenster geöffnet wird.
Für oben Ref: hier klicken
Dispose-Befehl Dispose () sollte Quit () aufrufen, und es scheint, dass dies der Fall ist. Das gleiche Problem besteht jedoch auch darin, dass alle nachfolgenden Aktionen blockiert werden, bis PhantomJS manuell geschlossen wird.
Ref Link
Unterschied zwischen driver.close () & driver.quit ()
driver.close - Schließt das Browserfenster, auf das der Fokus gesetzt ist.
driver.quit - Im Grunde wird die Methode driver.dispose aufgerufen, die wiederum alle Browserfenster schließt und die WebDriver-Sitzung ordnungsgemäß beendet.
Selenium WebDriver
WebDriver.Close()
Diese Methode wird verwendet, um das aktuell geöffnete Fenster zu schließen. Es schließt das aktuell geöffnete Fenster, auf das sich der Fahrer konzentriert.
WebDriver.Quit()
Diese Methode wird verwendet, um die Instanz von WebDriver zu zerstören. Es schließt alle mit diesem Treiber verknüpften Browserfenster und beendet die Sitzung sicher. WebDriver.Quit () ruft Dispose auf.
WebDriver.Dispose()
Diese Methode schließt alle Browserfenster und beendet die Sitzung sicher