这些有什么区别
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
何时使用哪个?
这些有什么区别
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
何时使用哪个?
Answers:
这是一个很好的问题,我已经看到人们在不应该使用Close()的情况下。我查看了Selenium Client&WebDriver C#绑定的源代码,发现了以下内容。
webDriver.Close()
-关闭驱动程序关注的浏览器窗口 webDriver.Quit()
-调用Dispose() webDriver.Dispose()
关闭所有浏览器窗口并安全结束会话下面的代码将放置驱动程序对象,结束会话并关闭测试期间打开的所有浏览器,无论测试失败还是通过。
public IWebDriver Driver;
[SetUp]
public void SetupTest()
{
Driver = WebDriverFactory.GetDriver();
}
[TearDown]
public void TearDown()
{
if (Driver != null)
Driver.Quit();
}
总而言之,请确保在退出程序之前先调用Quit()或Dispose(),并且除非您确定自己在做什么,否则不要使用Close()方法。
请注意,
当我试图找出一个相关问题为什么我的VM的硬盘空间不足时,我发现了这个问题。原来有一个异常导致每次运行都不调用Quit()或Dispose(),这随后导致appData文件夹填充硬盘驱动器。因此,我们正确使用了Quit()方法,但代码无法访问。摘要确保通过使用异常安全模式或实现IDisposable来确保所有代码路径都会清理非托管对象
同样,
在RemoteDriver调用Quit()或Dispose()的情况下,也会关闭Selenium Server上的会话。如果未关闭会话,则该会话的日志文件将保留在内存中。
Quit()
是一个重定向到Dispose()
driver.close
并且driver.quit
是在硒的webdriver关闭浏览器会话两种不同的方法。了解两者并知道何时使用每种方法对您的测试执行很重要。因此,我试图阐明这两种方法。
driver.close
-此方法关闭设置焦点的浏览器窗口。尽管此方法的名称很熟悉,WebDriver
但并未实现AutoCloseable
interface。
driver.quit
–此方法基本上调用driver.dispose
了now内部方法,该方法又关闭了所有浏览器窗口并正常结束了WebDriver会话。
driver.dispose
-如前所述,这是WebDriver的内部方法,已根据另一个答案以静默方式删除了该方法-需要验证。在常规测试工作流程中,此方法确实没有用例,因为上述两种方法中的任何一种都适用于大多数用例。
说明用例:driver.quit
每当结束程序时都应使用。它将关闭所有打开的浏览器窗口,并终止WebDriver会话。如果未driver.quit
在程序末尾使用,则WebDriver会话将无法正确关闭,并且不会从内存中清除文件。这可能会导致内存泄漏错误。
上面的解释应该解释WebDriver中driver.close
和driver.quit
方法之间的区别。希望对你有帮助。
以下网站提供了有关硒测试的一些好技巧:链接
quit()
:退出此驱动程序,关闭所有打开的关联窗口。
close()
:关闭当前窗口,如果它是当前打开的最后一个窗口,则退出浏览器。
close():-假设您已经使用相同的驱动程序实例打开了多个浏览器窗口,现在在驱动程序实例上调用close()将关闭该驱动程序实例指向的当前窗口。但是驱动程序实例仍保留在内存中,可用于处理其他打开的浏览器窗口。
quit():-如果在驱动程序实例上调用quit(),并且打开了一个或多个浏览器窗口,它将关闭所有打开的浏览器窗口,并且驱动程序实例已被垃圾回收,即从内存中删除。因此,现在您无法在调用quit()之后使用此驱动程序实例执行其他操作。如果这样做,将引发异常。
dispose():-我认为WebDriver实例没有dispose方法。
您可以转到此硒官方java doc 链接以供参考。
close()是一个Webdriver命令,用于关闭当前处于焦点的浏览器窗口。尽管此方法的名称很熟悉,WebDriver
但并未实现AutoCloseable
interface。
在自动化过程中,如果打开了多个浏览器窗口,则close()命令将仅关闭当时具有焦点的当前浏览器窗口。其余的浏览器窗口将不会关闭。以下代码可用于关闭当前浏览器窗口:
quit()是一个Webdriver命令,该命令调用driver.dispose方法,该方法又关闭所有浏览器窗口并终止WebDriver会话。如果在程序末尾不使用quit(),则WebDriver会话将无法正确关闭,并且文件也不会从内存中清除。这可能会导致内存泄漏错误。
如果自动化过程仅打开一个浏览器窗口,则close()和quit()命令的工作方式相同。如果在自动化期间打开了多个浏览器窗口,则两者的功能将有所不同。
对于上述参考:单击此处
Dispose命令 Dispose()应该调用Quit(),看起来确实如此。但是,它也具有相同的问题,即在手动关闭PhantomJS之前,所有后续操作都将被阻止。
参考链接
driver.close()和driver.quit()之间的区别
driver.close –关闭在其上设置焦点的浏览器窗口。
driver.quit –它基本上调用driver.dispose方法,该方法依次关闭所有浏览器窗口并正常结束WebDriver会话。
Selenium WebDriver
WebDriver.Close()
此方法用于关闭当前打开的窗口。它会关闭当前打开的驱动程序所关注的窗口。
WebDriver.Quit()
此方法用于销毁WebDriver的实例。它将关闭与该驱动程序关联的所有浏览器Windows,并安全地结束会话。WebDriver.Quit()调用Dispose。
WebDriver.Dispose()
此方法关闭所有浏览器窗口并安全结束会话