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

Pur*_*shi 265 selenium-webdriver

这些之间有什么区别

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

哪一个和什么时候使用?

rca*_*616 230

这是一个很好的问题,我看到人们不应该使用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();
}
Run Code Online (Sandbox Code Playgroud)

总之,确保在退出程序之前调用Quit()或Dispose(),并且除非您确定要执行的操作,否则不要使用Close()方法.

注意
我在尝试找出一个相关的问题时发现了这个问题,为什么我的VM耗尽了硬盘空间.结果是一个异常导致Quit()或Dispose()在每次运行时都没有被调用,这导致appData文件夹填满了硬盘.所以我们正确使用Quit()方法,但代码无法访问.总结确保所有代码路径都将使用异常安全模式或实现IDisposable来清理非托管对象

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

  • @ Mr.Bultitude很好,考虑到没有差别,这是可以理解的^^根据此答案,`Quit()`是对`Dispose()`的重定向。 (2认同)

Man*_*dan 44

Close() - 它用于关闭当前具有焦点的浏览器或页面.

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

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

  • 如果您使用的是.NET语言绑定,那么`Quit`和`Dispose`方法应该是彼此的同义词.换句话说,`Quit`调用`Dispose`. (2认同)

Anu*_*iya 16

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

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

WebDriver- 此方法基本上调用AutoCloseable一个now internal方法,该方法依次关闭所有浏览器窗口并正常结束WebDriver会话.

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

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

上述解释应该解释之间的差异driver.quitdriver.quit方法的webdriver.希望对你有帮助.

以下网站提供了一些关于硒测试的好建议:链接


Ran*_*ler 14

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

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

  • 这个答案错过了关键的区别: quit() 将停止底层的 webdriver 服务,而 close() 不会。专业提示:如果只剩下一个窗口,请不要调用 close() (2认同)

Wes*_* Na 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()
Run Code Online (Sandbox Code Playgroud)

链接


Pra*_*was 5

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

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

dispose(): - 我不认为WebDriver实例有一个dispose方法.

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


Dha*_*tri 5

close()是一个webdriver命令,用于关闭当前焦点对准的浏览器窗口。尽管此方法的名称很熟悉,WebDriver并未实现AutoCloseableinterface

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

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

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

对于上述参考:单击此处

Dispose命令 Dispose()应该调用Quit(),看起来确实如此。但是,它也具有相同的问题,即在手动关闭PhantomJS之前,所有后续操作都将被阻止。

参考链接