318

这些有什么区别

  1. Webdriver.Close()
  2. Webdriver.Quit()
  3. Webdriver.Dispose()

使用哪一个以及何时使用?

4

12 回答 12

278

这是一个很好的问题,我看到人们不应该使用 Close()。我查看了 Selenium Client & WebDriver C# Bindings 的源代码,发现了以下内容。

  1. webDriver.Close()- 关闭驱动程序关注的浏览器窗口
  2. webDriver.Quit()- 调用 Dispose()
  3. webDriver.Dispose()关闭所有浏览器窗口并安全结束会话

下面的代码将处理驱动程序对象,结束会话并关闭在测试期间打开的所有浏览器,无论测试失败还是通过。

public IWebDriver Driver;

[SetUp]
public void SetupTest()
{
    Driver = WebDriverFactory.GetDriver();
}

[TearDown]
public void TearDown()
{
    if (Driver != null)
      Driver.Quit();
}

总之,请确保在退出程序之前调用 Quit() 或 Dispose(),除非您确定自己在做什么,否则不要使用 Close() 方法。

注意
当我试图找出一个相关的问题时,我发现了这个问题,为什么我的虚拟机的硬盘空间不足。结果发现异常导致每次运行都没有调用 Quit() 或 Dispose() ,从而导致 appData 文件夹填满硬盘驱动器。所以我们正确地使用了 Quit() 方法,但是代码无法访问。摘要确保所有代码路径都将通过使用异常安全模式或实现 IDisposable 来清理您的非托管对象

此外
,在 RemoteDriver 调用 Quit() 或 Dispose() 的情况下,也会关闭 Selenium 服务器上的会话。如果会话未关闭,则该会话的日志文件将保留在内存中。

于 2013-06-24T00:05:15.350 回答
51

Close()- 用于关闭当前处于焦点的浏览器或页面。

Quit()- 用于关闭 Web 驱动实例或销毁 Web 驱动实例(关闭所有窗口)。

Dispose()- 我不知道这种方法。

于 2013-02-25T12:58:11.043 回答
37

driver.close并且driver.quit是在 Selenium WebDriver 中关闭浏览器会话的两种不同方法。了解它们并知道何时使用每种方法在您的测试执行中很重要。因此,我试图阐明这两种方法。

driver.close- 此方法关闭设置焦点的浏览器窗口。尽管这个方法的名字很熟悉,WebDriver但它并没有实现AutoCloseable接口

driver.quit– 这个方法基本上调用driver.dispose了一个现在内部的方法,该方法依次关闭所有浏览器窗口并优雅地结束 WebDriver 会话。

driver.dispose- 如前所述,是 WebDriver 的内部方法,已根据另一个答案静默删除 - 需要验证。这种方法在正常的测试工作流程中确实没有用例,因为前面的任何一种方法都应该适用于大多数用例。

说明用例:您应该driver.quit在想要结束程序时使用。它将关闭所有打开的浏览器窗口并终止 WebDriver 会话。如果您在程序结束时不使用driver.quit,WebDriver 会话将无法正常关闭,文件也不会从内存中清除。这可能会导致内存泄漏错误。

上面的解释应该解释了WebDriver中driver.close和方法的区别。driver.quit希望对你有帮助。

以下网站有一些关于硒测试的好技巧:链接

于 2015-09-08T00:38:27.513 回答
15

quit():退出此驱动程序,关闭所有打开的关联窗口。

close():关闭当前窗口,如果它是当前打开的最后一个窗口,则退出浏览器。

于 2014-05-18T14:08:32.610 回答
10

close()是一个 webdriver 命令,用于关闭当前焦点所在的浏览器窗口。尽管这个方法的名字很熟悉,WebDriver但它并没有实现AutoCloseable接口

在自动化过程中,如果打开了多个浏览器窗口,则 close() 命令将仅关闭当时具有焦点的当前浏览器窗口。其余的浏览器窗口不会关闭。以下代码可用于关闭当前浏览器窗口:

quit()是一个调用 driver.dispose 方法的 webdriver 命令,该方法依次关闭所有浏览器窗口并终止 WebDriver 会话。如果我们在程序结束时不使用 quit(),WebDriver 会话将不会正确关闭,文件也不会从内存中清除。这可能会导致内存泄漏错误。

如果自动化进程仅打开一个浏览器窗口,则 close() 和 quit() 命令的工作方式相同。当自动化期间打开多个浏览器窗口时,两者的功能会有所不同。

以上参考:点击这里

Dispose 命令 Dispose() 应该调用 Quit(),而且看起来确实如此。但是,它也有同样的问题,任何后续操作都会被阻止,直到手动关闭 PhantomJS。

参考链接

于 2018-08-24T04:38:27.180 回答
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()

关联

于 2017-01-26T13:20:48.503 回答
5

close():-假设你打开了多个具有相同驱动程序实例的浏览器窗口,现在在驱动程序实例上调用 close() 将关闭驱动程序实例指向的当前窗口。但驱动程序实例仍保留在内存中,可用于处理其他打开的浏览器窗口。

quit():- 如果您在驱动程序实例上调用 quit() 并且打开了一个或多个浏览器窗口,它将关闭所有打开的浏览器窗口,并且驱动程序实例被垃圾收集,即从内存中删除。所以现在你不能在调用 quit() 后使用这个驱动实例做其他操作。如果你这样做,它会抛出一个异常。

dispose():- 我不认为 WebDriver 实例有 dispose 方法。

你可以去这个 selenium 官方 java doc链接以供参考。

于 2017-09-21T06:34:14.027 回答
3

Selenium 网络驱动程序

  1. WebDriver.Close()此方法用于关闭当前打开的窗口。它关闭驱动程序关注的当前打开的窗口。

  2. WebDriver.Quit()该方法用于销毁 WebDriver 的实例。它关闭与该驱动程序关联的所有浏览器窗口并安全地结束会话。WebDriver.Quit() 调用 Dispose。

  3. WebDriver.Dispose()此方法关闭所有浏览器窗口并安全地结束会话

于 2016-05-31T11:28:11.460 回答
3

driver.close() 和 driver.quit() 之间的区别

driver.close - 它关闭设置焦点的浏览器窗口。

driver.quit - 它基本上调用 driver.dispose 方法,该方法依次关闭所有浏览器窗口并优雅地结束 WebDriver 会话。

于 2018-05-28T07:25:57.407 回答
2

退出和关闭有两个区别。

  1. 由于 Quit() 关闭程序打开的所有窗口,而 Close() 将关闭焦点所在的正确窗口。
  2. Quit() - 考虑一下,WebDriver driver = new ChromeDriver(); 上面的语句将创建一个会话 ID。为整个会话维护相同的会话 ID。 会话 ID - 73e6d7c2ae55d9f059ad1cce248adb75

输入网址后,相同的会话 ID - 73e6d7c2ae55d9f059ad1cce248adb75

currentUrl() 之后的会话 ID - 73e6d7c2ae55d9f059ad1cce248adb75

退出()后浏览器的会话 ID - null

如果用户尝试执行任何语句,会话 ID null 将发送到服务器。看到这一点,服务器将发送异常 -会话 ID 为空。调用 quit() 后使用 WebDriver?

在 Close() 中,将为整个会话创建和维护随机会话 ID(只有一个)。执行 Close() 后,会话将无效或过期例外

因此,在 quit() 中,会话为空,而在 close() 中,会话 id 无效。

于 2021-06-09T15:39:56.933 回答
1

我的理解是driver.close();会关闭当前浏览器,并且driver.quit();会终止所有浏览器。

于 2018-05-18T16:44:12.267 回答
-1

driver.close() 和 driver.quit() 在会话 ID 方面的区别。

driver.close– 它关闭设置焦点的浏览器窗口,如果之后使用驱动程序实例,driver.close则 selenium throw NoSuchSessionException: invalid session id

driver.quit– 它基本上调用 driver.dispose 方法,该方法依次关闭所有浏览器窗口并优雅地结束 WebDriver 会话,如果之后使用驱动程序实例,driver.quit则 selenium throw NoSuchSessionException: session id is null

于 2021-06-05T14:21:09.617 回答