Selenium webdriver webdriver.Dispose()、.Close()和.Quit()之间的差异

Selenium webdriver webdriver.Dispose()、.Close()和.Quit()之间的差异,selenium-webdriver,Selenium Webdriver,这两者有什么区别 Webdriver.Close() Webdriver.Quit() Webdriver.Dispose() 使用哪一个以及何时使用?Close()-用于关闭当前具有焦点的浏览器或页面 Quit()-用于关闭web驱动程序实例或销毁web驱动程序实例(关闭所有窗口) Dispose()-我不知道这种方法。这是一个很好的问题,我看到人们在不应该使用Close()的时候使用Close()。我查看了Selenium客户端和WebDriver C#绑定的源代码,发现了以下内容 webD

这两者有什么区别

  • Webdriver.Close()
  • Webdriver.Quit()
  • Webdriver.Dispose()
  • 使用哪一个以及何时使用?

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

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


    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()方法

    注意
    我发现这个问题时,试图找出一个相关的问题,为什么我的虚拟机的硬盘空间不足。原来是一个异常导致每次运行时都无法调用Quit()或Dispose(),从而导致appData文件夹填满硬盘。因此,我们正确地使用了Quit()方法,但无法访问代码。请确保所有代码路径都将通过使用异常安全模式或实现IDisposable来清理非托管对象


    对于RemoteDriver,调用Quit()或Dispose()也将关闭Selenium服务器上的会话。如果会话未关闭,该会话的日志文件将保留在内存中。

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


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

    驱动程序。close
    驱动程序。quit
    是关闭Selenium WebDriver中浏览器会话的两种不同方法。理解这两种方法并知道何时使用每种方法在测试执行中都很重要。因此,我试图阐明这两种方法

    driver.close
    -此方法关闭设置焦点的浏览器窗口。尽管这种方法的名称很熟悉,
    WebDriver
    并没有实现

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

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

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

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

    以下网站提供了一些关于硒测试的好提示:

    SeleniumWebDriver

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

  • WebDriver.Quit()
    此方法用于销毁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命令,用于关闭当前处于焦点的浏览器窗口。尽管这种方法的名称很熟悉,
    WebDriver