webdriver.Dispose(),. Close()和.Quit()之间的区别

时间:2013-02-25 12:35:39

标签: selenium-webdriver

这些

有什么区别
  1. Webdriver.Close()
  2. Webdriver.Quit()
  3. Webdriver.Dispose()
  4. 使用哪一个以及何时使用?

12 个答案:

答案 0 :(得分:215)

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

  1. webDriver.Close() - 关闭驱动程序具有焦点的浏览器窗口
  2. webDriver.Quit() - 调用Dispose()
  3. webDriver.Dispose()关闭所有浏览器窗口并安全地结束会话
  4. 下面的代码将处理驱动程序对象,结束会话并关闭测试期间打开的所有浏览器,无论测试失败还是通过。

    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.closedriver.quit是在Selenium WebDriver中关闭浏览器会话的两种不同方法。了解它们并了解何时使用每种方法对于测试执行非常重要。因此,我试图阐明这两种方法。

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

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

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

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

上述说明应解释WebDriver中driver.closedriver.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()

link

答案 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

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

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

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

答案 9 :(得分:2)

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

答案 10 :(得分:1)

退出和关闭有两个区别。

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

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