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

它们之间的区别是什么

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

什么时候用哪一种?

337115 次浏览

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

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

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

这是一个很好的问题,我看到有人在不应该的时候使用Close()。我查看了源代码的硒客户端&WebDriver c#绑定,发现如下。

  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()方法,除非您确定自己在做什么。

< p > 请注意 < br > 我发现这个问题时,试图找出一个相关的问题,为什么我的虚拟机的硬盘空间不足。原来是一个异常导致Quit()或Dispose()没有被调用每次运行,然后导致appData文件夹填满硬盘驱动器。因此,我们正确地使用了Quit()方法,但代码不可访问。总结:确保所有代码路径都将通过使用异常安全模式或实现IDisposable

来清理非托管对象 < p > < br > 在RemoteDriver的情况下,调用Quit()或Dispose()也将关闭Selenium服务器上的会话。如果会话没有关闭,该会话的日志文件将保留在内存中

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

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

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

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

driver.quit——这个方法调用driver.dispose作为内部方法,它会关闭所有的浏览器窗口,并优雅地结束WebDriver会话。

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

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

上面的解释应该解释了WebDriver中driver.closedriver.quit方法之间的区别。我希望它对你有用。

下面的网站有一些关于硒测试的好提示

硒WebDriver

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

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

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

根据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

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

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

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

你可以去这个selenium官方java文档链接中参考。

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

driver.close() &driver.quit ()

司机。close -关闭设置焦点的浏览器窗口。

司机。quit -它基本上调用driver。dispose方法将关闭所有浏览器窗口并优雅地结束WebDriver会话。

close ()是一个webdriver命令,它关闭当前关注的浏览器窗口。尽管这个方法的名字很熟悉,但WebDriver确实实现了AutoCloseable接口

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

辞职()是一个webdriver命令,它调用驱动程序。dispose方法,该方法反过来关闭所有浏览器窗口并终止WebDriver会话。如果我们没有在程序结束时使用quit(), WebDriver会话将不能正常关闭,文件将不能从内存中清除。这可能会导致内存泄漏错误。

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

以上参考:点击这里

< >强处理命令 Dispose()应该调用Quit(),看起来确实调用了。但是,它也有同样的问题,在手动关闭PhantomJS之前,任何后续操作都被阻止

Ref 链接

driver.close() &driver.quit()相对于会话ID。

driver.close -关闭设置焦点的浏览器窗口 如果驱动实例在driver.close之后使用,则硒抛出NoSuchSessionException:无效的会话id

driver.quit -它基本上调用驱动程序。dispose方法将关闭所有浏览器窗口并优雅地结束WebDriver会话 如果驱动实例在driver.quit之后使用,则硒抛出NoSuchSessionException:会话id为null

“退出”和“接近”有两个区别。

  1. 因为Quit()将关闭程序打开的所有窗口,而Close()将关闭焦点集中在set上的正确窗口。
  2. Quit() -考虑,WebDriver驱动=新的ChromeDriver(); 上述语句将创建一个会话ID。为整个会话维护相同的会话ID。 李会话ID - 73e6d7c2ae55d9f059ad1cce248adb75 < / >

输入url后相同的会话ID - 73e6d7c2ae55d9f059ad1cce248adb75

After the currentUrl() the session ID - 73e6d7c2ae55d9f059ad1cce248adb75 . > . > the current turl () the session ID - 73e6d7c2ae55d9f059ad1cce248adb75

quit()后浏览器会话ID - null

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

在Close()中,将为整个会话创建和维护随机会话ID(只有一个)。在执行Close()后,会话将无效或过期. 会话将无效或过期. 会话将无效或过期异常 < / p >

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