Difference between webdriver.Dispose(), .Close() and .Quit()
What is the difference between these
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
Which one to be used and when?
Solution 1:
This is a good question I have seen people use Close() when they shouldn't. I looked in the source code for the Selenium Client & WebDriver C# Bindings and found the following.
-
webDriver.Close()
- Close the browser window that the driver has focus of -
webDriver.Quit()
- Calls Dispose() -
webDriver.Dispose()
Closes all browser windows and safely ends the session
The code below will dispose the driver object, ends the session and closes all browsers opened during a test whether the test fails or passes.
public IWebDriver Driver;
[SetUp]
public void SetupTest()
{
Driver = WebDriverFactory.GetDriver();
}
[TearDown]
public void TearDown()
{
if (Driver != null)
Driver.Quit();
}
In summary ensure that Quit() or Dispose() is called before exiting the program, and don't use the Close() method unless you're sure of what you're doing.
Note
I found this question when try to figure out a related problem why my VM's were running out of harddrive space. Turns out an exception was causing Quit() or Dispose() to not be called every run which then caused the appData folder to fill the hard drive. So we were using the Quit() method correctly but the code was unreachable. Summary make sure all code paths will clean up your unmanaged objects by using exception safe patterns or implement IDisposable
Also
In the case of RemoteDriver calling Quit() or Dispose() will also close the session on the Selenium Server. If the session isn't closed the log files for that session remain in memory.
Solution 2:
Close()
- It is used to close the browser or page currently which is having the focus.
Quit()
- It is used to shut down the web driver instance or destroy the web driver instance(Close all the windows).
Dispose()
- I am not aware of this method.
Solution 3:
driver.close
and driver.quit
are two different methods for closing the browser session in Selenium WebDriver. Understanding both of them and knowing when to use each method is important in your test execution. Therefore, I have tried to shed some light on both of these methods.
driver.close
- This method closes the browser window on which the focus is set. Despite the familiar name for this method, WebDriver
does not implement the AutoCloseable
interface.
driver.quit
– This method basically calls driver.dispose
a now internal method which in turn closes all of the browser windows and ends the WebDriver session gracefully.
driver.dispose
- As mentioned previously, is an internal method of WebDriver which has been silently dropped according to another answer - Verification needed. This method really doesn't have a use-case in a normal test workflow as either of the previous methods should work for most use cases.
Explanation use case:
You should use driver.quit
whenever you want to end the program. It will close all opened browser windows and terminates the WebDriver session. If you do not use driver.quit
at the end of the program, the WebDriver session will not close properly and files would not be cleared from memory. This may result in memory leak errors.
The above explanation should explain the difference between driver.close
and driver.quit
methods in WebDriver. I hope you find it useful.
The following website has some good tips on selenium testing : Link
Solution 4:
quit()
: Quits this driver, closing every associated window that was open.
close()
: Close the current window, quitting the browser if it's the last window currently open.
Solution 5:
close() is a webdriver command which closes the browser window which is currently in focus. Despite the familiar name for this method, WebDriver
does not implement the AutoCloseable
interface.
During the automation process, if there are more than one browser window opened, then the close() command will close only the current browser window which is having focus at that time. The remaining browser windows will not be closed. The following code can be used to close the current browser window:
quit() is a webdriver command which calls the driver.dispose method, which in turn closes all the browser windows and terminates the WebDriver session. If we do not use quit() at the end of program, the WebDriver session will not be closed properly and the files will not be cleared off memory. This may result in memory leak errors.
If the Automation process opens only a single browser window, the close() and quit() commands work in the same way. Both will differ in their functionality when there are more than one browser window opened during Automation.
For Above Ref : click here
Dispose Command Dispose() should call Quit(), and it appears it does. However, it also has the same problem in that any subsequent actions are blocked until PhantomJS is manually closed.
Ref Link