提问人:Puran Joshi 提问时间:2/25/2013 最后编辑:zb226Puran Joshi 更新时间:6/9/2021 访问量:353787
webdriver 之间的区别。Dispose()、.Close() 和 .退出()
Difference between webdriver.Dispose(), .Close() and .Quit()
答:
Close()
- 它用于关闭当前具有焦点的浏览器或页面。
Quit()
- 用于关闭 Web 驱动实例或销毁 Web 驱动实例(关闭所有窗口)。
Dispose()
- 我不知道这种方法。
评论
Quit
Dispose
Quit
Dispose
这是一个很好的问题,我看到人们在不应该使用Close()的时候使用Close()。我查看了Selenium客户端和WebDriver C#绑定的源代码,并发现了以下内容。
webDriver.Close()
- 关闭驱动程序关注的浏览器窗口webDriver.Quit()
- 调用 dispose()webDriver.Dispose()
关闭所有浏览器窗口并安全结束会话
下面的代码将释放驱动程序对象,结束会话并关闭测试期间打开的所有浏览器,无论测试失败还是通过。
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 服务器上的会话。如果会话未关闭,则该会话的日志文件将保留在内存中。
评论
Quit()
Dispose()
quit()
:退出此驱动程序,关闭所有已打开的关联窗口。
close()
:关闭当前窗口,如果是当前打开的最后一个窗口,则退出浏览器。
评论
driver.close
和是在 Selenium WebDriver 中关闭浏览器会话的两种不同方法。了解这两种方法并知道何时使用每种方法在测试执行中非常重要。因此,我试图阐明这两种方法。driver.quit
driver.close
- 此方法关闭设置焦点的浏览器窗口。尽管此方法的名称很熟悉,但未实现 AutoCloseable
接口。WebDriver
driver.quit
– 此方法基本上调用现在内部方法,该方法反过来关闭所有浏览器窗口并优雅地结束 WebDriver 会话。driver.dispose
driver.dispose
- 如前所述,是 WebDriver 的一个内部方法,它已根据另一个答案静默删除 - 需要验证。这种方法在正常的测试工作流程中确实没有用例,因为前面的任一方法都应该适用于大多数用例。
解释用例:
每当您想结束程序时,您都应该使用。它将关闭所有打开的浏览器窗口并终止 WebDriver 会话。如果在程序结束时不使用,则 WebDriver 会话将无法正确关闭,并且不会从内存中清除文件。这可能会导致内存泄漏错误。driver.quit
driver.quit
上面的解释应该解释 WebDriver 中 和 方法之间的区别。我希望你觉得它有用。driver.close
driver.quit
以下网站有一些关于硒测试的好提示: 链接
评论
Selenium Web驱动程序
WebDriver.Close()
此方法用于关闭当前打开的窗口。它关闭当前打开的窗口,驱动程序关注的窗口。WebDriver.Quit()
此方法用于销毁 WebDriver 的实例。它将关闭与该驱动程序关联的所有浏览器窗口,并安全地结束会话。WebDriver.Quit() 调用 Dispose。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()
close():- 假设您打开了多个具有相同驱动程序实例的浏览器窗口,现在在驱动程序实例上调用 close() 将关闭驱动程序实例指向的当前窗口。但驱动程序实例仍保留在内存中,可用于处理其他打开的浏览器窗口。
quit():- 如果在驱动程序实例上调用 quit() 并且打开了一个或多个浏览器窗口,它将关闭所有打开的浏览器窗口,并且驱动程序实例将被垃圾回收,即从内存中删除。所以现在你不能使用这个驱动程序实例在调用 quit() 后执行其他操作。如果这样做,将抛出异常。
dispose():- 我认为 WebDriver 实例没有 dispose 方法。
你可以去这个 selenium 官方 java 文档链接参考。
评论
我的理解是将关闭当前浏览器,
并将终止所有浏览器。driver.close();
driver.quit();
driver.close() 和 driver.quit() 之间的区别
driver.close – 它关闭设置焦点的浏览器窗口。
driver.quit – 它基本上调用 driver.dispose 方法,该方法反过来关闭所有浏览器窗口并优雅地结束 WebDriver 会话。
close() 是一个 webdriver 命令,用于关闭当前处于焦点中的浏览器窗口。尽管此方法的名称很熟悉,但未实现 AutoCloseable
接口。WebDriver
在自动化过程中,如果打开了多个浏览器窗口,则 close() 命令将仅关闭当时具有焦点的当前浏览器窗口。其余的浏览器窗口不会关闭。以下代码可用于关闭当前浏览器窗口:
quit() 是一个 WebDriver 命令,它调用 Driver.Dispose 方法,该方法反过来关闭所有浏览器窗口并终止 WebDriver 会话。如果我们在程序结束时不使用 quit(),WebDriver 会话将无法正确关闭,并且文件不会从内存中清除。这可能会导致内存泄漏错误。
如果自动化进程仅打开一个浏览器窗口,则 close() 和 quit() 命令的工作方式相同。当在自动化期间打开多个浏览器窗口时,两者的功能会有所不同。
以上参考:点击这里
Dispose 命令Dispose() 应该调用 Quit(),看起来确实如此。但是,它也有同样的问题,因为在手动关闭 PhantomJS 之前,任何后续操作都会被阻止。
参考链接
driver.close() 和 driver.quit() 在会话 ID 方面的差异。
driver.close
– 它关闭了设置焦点的浏览器窗口,并
如果在之后使用驱动程序实例,则 selenium throw NoSuchSessionException:无效的会话 IDdriver.close
driver.quit
– 它基本上调用 driver.dispose 方法,该方法反过来关闭所有浏览器窗口并优雅地结束 WebDriver 会话,并且
如果在此之后使用驱动程序实例,则 selenium throw NoSuchSessionException:会话 ID 为 nulldriver.quit
Quit 和 close 之间有两个区别。
- 由于 Quit() 关闭程序打开的所有窗口,而 Close() 将关闭正确的窗口,其中焦点集中在设置上。
- Quit () - 考虑,WebDriver driver = new ChromeDriver(); 上面的语句将创建一个会话 ID。为整个会话维护相同的会话 ID。会话 ID - 73e6d7c2ae55d9f059ad1cce248adb75
输入 url 后,会话 ID 相同 - 73e6d7c2ae55d9f059ad1cce248adb75
在 currentUrl() 之后,会话 ID - 73e6d7c2ae55d9f059ad1cce248adb75
如果用户尝试执行任何语句,会话 ID null 将发送到服务器。看到这种情况后,服务器将发送异常 - 会话 ID 为 null。调用 quit() 后使用 WebDriver?
在 Close() 中,将为整个会话创建和维护随机会话 ID(只有一个)。执行 Close() 后,会话将无效或过期。例外
因此,在 quit() 中,会话为 null,而在 close() 中,会话 ID 无效。
评论