这些
有什么区别Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
使用哪一个以及何时使用?
答案 0 :(得分:215)
这是一个很好的问题,我看到人们不应该使用Close()。我查看了Selenium Client&的源代码。 WebDriver C#Bindings并发现以下内容。
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上的会话。如果会话未关闭,则该会话的日志文件将保留在内存中。
答案 1 :(得分:43)
Close()
- 用于关闭当前具有焦点的浏览器或页面。
Quit()
- 用于关闭Web驱动程序实例或销毁Web驱动程序实例(关闭所有窗口)。
Dispose()
- 我不知道这种方法。
答案 2 :(得分:14)
quit()
:退出此驱动程序,关闭所有打开的关联窗口。
close()
:关闭当前窗口,如果它是当前打开的最后一个窗口,则退出浏览器。
答案 3 :(得分:13)
driver.close
和driver.quit
是在Selenium WebDriver中关闭浏览器会话的两种不同方法。了解它们并了解何时使用每种方法对于测试执行非常重要。因此,我试图阐明这两种方法。
driver.close
- 此方法关闭设置焦点的浏览器窗口。
driver.quit
- 此方法基本上调用driver.dispose
现在的内部方法,该方法依次关闭所有浏览器窗口并优雅地结束WebDriver会话。
driver.dispose
- 如前所述,是WebDriver的内部方法,它已根据另一个答案默默删除 - 需要验证。这种方法在正常的测试工作流程中确实没有用例,因为以前的方法都适用于大多数用例。
解释用例:
每当要结束程序时,都应使用driver.quit
。它将关闭所有打开的浏览器窗口并终止WebDriver会话。如果在程序结束时不使用driver.quit
,则WebDriver会话将无法正常关闭,并且不会从内存中清除文件。这可能会导致内存泄漏错误。
上述说明应解释WebDriver中driver.close
和driver.quit
方法之间的区别。希望对你有帮助。
以下网站提供了一些关于硒测试的好建议:Link
答案 4 :(得分:5)
根据PhantomJS的Github上的问题,quit()不会终止PhantomJS进程。 你应该使用:
import signal
driver = webdriver.PhantomJS(service_args=service_args)
# Do your work here
driver.service.process.send_signal(signal.SIGTERM)
driver.quit()
答案 5 :(得分:5)
close(): - 假设您已打开多个具有相同驱动程序实例的浏览器窗口,现在在驱动程序实例上调用close()将关闭驱动程序实例所指向的当前窗口。但驱动程序实例仍保留在内存中,可用于处理其他打开的浏览器窗口。
quit(): - 如果你在驱动程序实例上调用quit()并且打开了一个或多个浏览器窗口,它将关闭所有打开的浏览器窗口,并且驱动程序实例被垃圾收集,即从内存中删除。所以现在你不能在调用quit()之后使用这个驱动程序实例来做其他操作。如果你这样做会抛出异常。
dispose(): - 我不认为WebDriver实例有一个dispose方法。
您可以访问此selenium官方java doc {{3}}以供参考。
答案 6 :(得分:3)
driver.close()&的区别driver.quit()强>
driver.close - 关闭设置焦点的浏览器窗口。
driver.quit - 它基本上调用了driver.dispose方法,该方法依次关闭所有浏览器窗口并优雅地结束WebDriver会话。
答案 7 :(得分:3)
close()是一个网络驱动程序命令,用于关闭当前聚焦的浏览器窗口。
在自动化过程中,如果打开了多个浏览器窗口,则close()命令将仅关闭当时具有焦点的当前浏览器窗口。其余的浏览器窗口将不会关闭。以下代码可用于关闭当前浏览器窗口:
quit()是一个Webdriver命令,该命令调用driver.dispose方法,该方法又关闭所有浏览器窗口并终止WebDriver会话。如果在程序末尾不使用quit(),则WebDriver会话将无法正确关闭,并且文件也不会从内存中清除。这可能会导致内存泄漏错误。
如果Automation进程仅打开一个浏览器窗口,则close()和quit()命令的工作方式相同。在自动化期间打开多个浏览器窗口时,两者的功能将有所不同。
对于以上参考:click here
处置命令 Dispose()应该调用Quit(),看起来确实如此。但是,它还有一个问题,就是在手动关闭PhantomJS之前,所有后续操作都将被阻止。
参考Link
答案 8 :(得分:2)
Selenium WebDriver
WebDriver.Close()
此方法用于关闭当前打开的窗口。它关闭驱动程序关注的当前打开窗口。
WebDriver.Quit()
此方法用于销毁WebDriver的实例。它会关闭与该驱动程序关联的所有浏览器窗口并安全地结束会话。 WebDriver.Quit()调用Dispose。
WebDriver.Dispose()
此方法关闭所有浏览器窗口并安全地结束会话
答案 9 :(得分:2)
我的理解是sq_id
会关闭当前的浏览器,
并且driver.close();
将终止所有浏览器。
答案 10 :(得分:1)
退出和关闭有两个区别。
after entering the url the same Session ID - 73e6d7c2ae55d9f059ad1cce248adb75
After the currentUrl() the session ID - 73e6d7c2ae55d9f059ad1cce248adb75
After quit() the browser the session ID - null
如果用户尝试执行任何语句,会话 ID null 将发送到服务器。看到这一点,服务器将发送异常 - 会话 ID 为空。调用quit()后使用WebDriver?
在 Close() 中,将为整个会话创建和维护随机会话 ID(仅一个)。执行 Close() 后,session 将失效或过期。 Exception
因此,在 quit() 中会话为空,而在 close() 中会话 id 无效。
答案 11 :(得分:0)
driver.close() 和 driver.quit() 在会话 ID 方面的区别。
driver.close
– 关闭设置焦点的浏览器窗口
如果在 driver.close
之后使用驱动程序实例,则 selenium 抛出 NoSuchSessionException: invalid session id
driver.quit
– 它基本上调用 driver.dispose 方法,该方法依次关闭所有浏览器窗口并优雅地结束 WebDriver 会话
如果在 driver.quit
之后使用驱动程序实例,则 selenium 抛出 NoSuchSessionException: session id is null