webdriver.Dispose(),.Close()和.Quit()之间的区别
这些有什么区别
Webdriver.Close()
-
Webdriver.Quit()
-
Webdriver.Dispose()
哪一个被使用,什么时候?
这是我见过的一个很好的问题,当人们不应该使用Close()时。 我查看了Selenium Client&WebDriver C#绑定的源代码,发现如下。
-
webDriver.Close()
– closures驱动程序所关注的浏览器窗口 -
webDriver.Quit()
– 调用Dispose() -
webDriver.Dispose()
closures所有浏览器窗口并安全结束会话
下面的代码将处理驱动程序对象,结束会话并closures在testing期间打开的所有浏览器,无论testing是否失败或通过。
public IWebDriver Driver; [SetUp] public void SetupTest() { Driver = WebDriverFactory.GetDriver(); } [TearDown] public void TearDown() { if (Driver != null) Driver.Quit(); }
总之,确保在退出程序之前调用Quit()或Dispose(),除非您确定自己在做什么,否则不要使用Close()方法。
注意
当我试图找出一个相关的问题,为什么我的虚拟机硬盘空间不足,我发现这个问题。 结果是一个exception导致Quit()或Dispose()不会被每次运行调用,然后导致appData文件夹填充硬盘驱动器。 所以我们正确地使用Quit()方法,但代码无法访问。 总结请确保所有代码path将通过使用exception安全模式或实现IDisposable来清理您的非托pipe对象
也
在RemoteDriver调用Quit()或Dispose()的情况下,也将closuresSelenium服务器上的会话。 如果会话未closures,则该会话的日志文件保留在内存中。
Close()
– 用于closures当前焦点所在的浏览器或页面。
Quit()
– 用于closuresWeb驱动程序实例或销毁Web驱动程序实例(closures所有窗口)。
Dispose()
– 我不知道这个方法。
quit()
:退出此驱动程序,closures每个打开的关联窗口。
close()
:closures当前窗口,如果它是当前打开的最后一个窗口,则退出浏览器。
driver.close
和driver.quit
是在Selenium WebDriver中closures浏览器会话的两种不同的方法。 理解这两者并知道何时使用每种方法在testing执行中是非常重要的。 因此,我试图揭示这两种方法。
driver.close
– 此方法closures设置焦点的浏览器窗口。
driver.quit
– 此方法基本上调用driver.dispose
一个现在的内部方法,它依次closures所有的浏览器窗口,并优雅地结束WebDriver会话。
driver.dispose
– 如前所述,是WebDriver的一种内部方法,根据另一个答案已经被默默的放弃 – validation需要。 这种方法在正常的testing工作stream程中确实没有用例,因为前面的方法都适用于大多数用例。
解释用例:每当你想结束程序,你应该使用driver.quit
。 它将closures所有打开的浏览器窗口并终止WebDriver会话。 如果在程序结束时没有使用driver.quit
,则WebDriver会话将无法正常closures,文件也不会从内存中清除。 这可能会导致内存泄漏错误。
上面的解释应该解释WebDriver中driver.close
和driver.quit
方法的区别。 希望对你有帮助。
下面的网站有一些关于seleniumtesting的好的提示: http : //www.testingdiaries.com/
根据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()
链接: https : //github.com/seleniumhq/selenium/issues/767
Selenium WebDriver
-
WebDriver.Close()
此方法用于closures当前打开的窗口。 它closures了当前驾驶员关注的开放窗口。 -
WebDriver.Quit()
此方法用于销毁WebDriver的实例。 它closures与该驱动程序相关的所有浏览器窗口,并安全结束会话。 WebDriver.Quit()调用Dispose。 -
WebDriver.Dispose()
此方法closures所有浏览器窗口并安全地结束会话
close():假设你用相同的驱动程序实例打开了多个浏览器窗口,现在在驱动程序实例上调用close()将closures驱动程序实例指向的当前窗口。 但驱动程序实例仍然保留在内存中,可用于处理其他打开的浏览器窗口。
quit():如果在驱动程序实例上调用quit()并且打开了一个或多个浏览器窗口,它将closures所有打开的浏览器窗口,驱动程序实例被垃圾收集,即从内存中移除。 所以现在你不能在调用quit()之后使用这个驱动实例来做其他操作。 如果你这样做会抛出一个exception。
dispose(): – 我不认为有一个WebDriver实例的处置方法。
你可以去这个selenium官方的Java文档链接,以供参考。