Jaka jest różnica między nimi
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
Którego użyć i kiedy?
selenium-webdriver
Puran Joshi
źródło
źródło
Odpowiedzi:
To dobre pytanie. Widziałem, jak ludzie używają Close (), kiedy nie powinni. Szukałem w kodzie źródłowym Selenium Client & WebDriver C # Bindings i znalazłem następujące.
webDriver.Close()
- Zamknij okno przeglądarki, na którym skupia się sterownikwebDriver.Quit()
- Wywołania Dispose ()webDriver.Dispose()
Zamyka wszystkie okna przeglądarki i bezpiecznie kończy sesjęPoniższy kod usuwa obiekt sterownika, kończy sesję i zamyka wszystkie przeglądarki otwarte podczas testu, czy test się nie powiedzie, czy przejdzie.
Podsumowując, upewnij się, że Quit () lub Dispose () jest wywoływana przed wyjściem z programu i nie używaj metody Close (), chyba że jesteś pewien, co robisz.
Uwaga
Znalazłem to pytanie, gdy próbowałem znaleźć powiązany problem, dlaczego moje maszyny wirtualne zabrakło miejsca na dysku twardym. Okazało się, że wyjątek powodował, że Quit () lub Dispose () nie były wywoływane przy każdym uruchomieniu, co spowodowało, że folder appData zapełnił dysk twardy. Używaliśmy więc poprawnie metody Quit (), ale kod był nieosiągalny. Podsumowanie upewnij się, że wszystkie ścieżki kodu wyczyszczą niezarządzane obiekty za pomocą bezpiecznych wzorców wyjątków lub zaimplementuj IDisposable
Również
w przypadku RemoteDriver wywołanie Quit () lub Dispose () spowoduje zamknięcie sesji na serwerze Selenium. Jeśli sesja nie zostanie zamknięta, pliki dziennika dla tej sesji pozostaną w pamięci.
źródło
Quit()
jest przekierowanie doDispose()
Close()
- Służy do zamykania przeglądarki lub aktualnie aktywnej strony.Quit()
- Służy do zamykania instancji sterownika sieci lub niszczenia instancji sterownika sieci (Zamknij wszystkie okna).Dispose()
- Nie znam tej metody.źródło
Quit
iDispose
powinny być dla siebie synonimami. Innymi słowy,Quit
połączeniaDispose
.driver.close
idriver.quit
są dwiema różnymi metodami zamykania sesji przeglądarki w Selenium WebDriver. Zrozumienie obu z nich i wiedza, kiedy użyć każdej metody, jest ważne w wykonywaniu testu. Dlatego starałem się rzucić nieco światła na obie te metody.driver.close
- Ta metoda zamyka okno przeglądarki, na którym ustawiony jest fokus. Pomimo znanej nazwy dla tej metodyWebDriver
jest nie zaimplementowaćAutoCloseable
interfejs .driver.quit
- Ta metoda w zasadzie wywołujedriver.dispose
teraz wewnętrzną metodę, która z kolei zamyka wszystkie okna przeglądarki i kończy sesję WebDriver z wdziękiem.driver.dispose
- Jak wspomniano wcześniej, jest to wewnętrzna metoda WebDriver, która została po cichu odrzucona zgodnie z inną odpowiedzią - Konieczna weryfikacja. Ta metoda naprawdę nie ma przypadku użycia w normalnym toku pracy testowej, ponieważ jedna z poprzednich metod powinna działać w większości przypadków użycia.Objaśnienie przypadku użycia: Powinieneś używać,
driver.quit
gdy chcesz zakończyć program. Zamknie wszystkie otwarte okna przeglądarki i zakończy sesję WebDriver. Jeśli nie będziesz używaćdriver.quit
na końcu programu, sesja WebDriver nie zostanie poprawnie zamknięta, a pliki nie zostaną usunięte z pamięci. Może to spowodować błędy wycieku pamięci.Powyższe wyjaśnienie należy wyjaśnić różnicę pomiędzy
driver.close
idriver.quit
metod w WebDriver. Mam nadzieję, że uznasz to za przydatne.Poniższa strona zawiera kilka dobrych wskazówek na temat testowania selenu: Link
źródło
quit()
: Zamyka ten sterownik, zamykając każde powiązane okno, które było otwarte.close()
: Zamknij bieżące okno, zamykając przeglądarkę, jeśli jest to ostatnie otwarte okno.źródło
close (): - Załóżmy, że otworzyłeś wiele okien przeglądarki z tą samą instancją sterownika, teraz wywołanie close () w instancji sterownika zamknie bieżące okno, na które wskazuje instancja sterownika. Ale instancja sterownika wciąż pozostaje w pamięci i może być używana do obsługi innych otwartych okien przeglądarki.
quit (): - Jeśli wywołasz quit () w instancji sterownika, a jedno lub więcej okien przeglądarki jest otwarte, zamknie wszystkie otwarte okna przeglądarki, a instancja sterownika zostanie usunięta, tzn. usunięta z pamięci. Dlatego teraz nie można użyć tej instancji sterownika do wykonania innej operacji po wywołaniu jej na quit (). Jeśli to zrobisz, wygeneruje wyjątek.
dispose (): - Nie sądzę, aby istniała metoda usuwania dla instancji WebDriver.
Możesz przejść do tego oficjalnego linku do dokumentu selenium java w celach informacyjnych.
źródło
Na podstawie problemu dotyczącego Github z PhantomJS, quit () nie kończy procesu PhantomJS. Powinieneś użyć:
połączyć
źródło
close () to polecenie webdriver, które zamyka aktualnie aktywne okno przeglądarki. Pomimo znanej nazwy dla tej metody
WebDriver
jest nie zaimplementowaćAutoCloseable
interfejs .Jeśli w trakcie procesu automatyzacji otwarte jest więcej niż jedno okno przeglądarki, polecenie close () zamknie tylko bieżące okno przeglądarki, które jest w tym momencie aktywne. Pozostałe okna przeglądarki nie zostaną zamknięte. Aby zamknąć bieżące okno przeglądarki, można użyć następującego kodu:
porzucić() to polecenie webdriver, które wywołuje metodę driver.dispose, która z kolei zamyka wszystkie okna przeglądarki i kończy sesję WebDriver. Jeśli nie użyjemy quit () na końcu programu, sesja WebDriver nie zostanie poprawnie zamknięta, a pliki nie zostaną usunięte z pamięci. Może to spowodować błędy wycieku pamięci.
Jeśli proces automatyzacji otwiera tylko jedno okno przeglądarki, polecenia close () i quit () działają w ten sam sposób. Oba będą różnić się funkcjonalnością, gdy w Automatyzacji zostanie otwarte więcej niż jedno okno przeglądarki.
Aby zobaczyć powyższy odnośnik : kliknij tutaj
Polecenie Dispose Funkcja Dispose () powinna wywołać Quit () i wygląda na to, że tak. Ma jednak ten sam problem, że wszelkie kolejne działania są blokowane do momentu ręcznego zamknięcia PhantomJS.
Link referencyjny
źródło
Różnica między driver.close () i driver.quit ()
driver.close - Zamyka okno przeglądarki, w którym ustawiony jest fokus.
driver.quit - Zasadniczo wywołuje metodę driver.dispose, która z kolei zamyka wszystkie okna przeglądarki i kończy sesję WebDriver z wdziękiem.
źródło
Selenium WebDriver
WebDriver.Close()
Ta metoda służy do zamknięcia bieżącego otwartego okna. Zamyka bieżące otwarte okno, na którym skupia się sterownik.WebDriver.Quit()
Ta metoda służy do zniszczenia instancji WebDriver. Zamyka wszystkie okna przeglądarki powiązane z tym sterownikiem i bezpiecznie kończy sesję. Wywołania WebDriver.Quit () Dispose.WebDriver.Dispose()
Ta metoda zamyka wszystkie okna przeglądarki i bezpiecznie kończy sesjęźródło
Rozumiem,
driver.close();
że zamknie bieżącą przeglądarkę idriver.quit();
zakończy działanie tej przeglądarki.źródło