Разница между webdriver.Dispose(),.Close() и .Quit()

В чем разница между этими

  • Webdriver.Close()
  • Webdriver.Quit()
  • Webdriver.Dispose()

Какой из них следует использовать и когда?

Ответ 1

Это хороший вопрос, который я видел, когда люди используют Close(), когда они этого не делают. Я просмотрел исходный код для Selenium Client и WebDriver С# Bindings и нашел следующее.

  • 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. Если сеанс не закрыт, файлы журнала для этого сеанса остаются в памяти.

Ответ 2

Close() - он используется для закрытия браузера или страницы, которая в настоящее время имеет фокус.

Quit() - Он используется для закрытия экземпляра веб-драйвера или уничтожения экземпляра веб-драйвера (Закройте все окна).

Dispose() - Я не знаю об этом методе.

Ответ 3

driver.close и driver.quit - два разных метода для закрытия сеанса браузера в Selenium WebDriver. Понимание их обоих и знание того, когда использовать каждый метод, важно при выполнении теста. Поэтому я попытался пролить свет на оба этих метода.

driver.close - Этот метод закрывает окно браузера, на котором установлен фокус. Несмотря на знакомое название этого метода, WebDriver не реализует интерфейс AutoCloseable.

driver.quit - Этот метод в основном вызывает driver.dispose теперь внутренний метод, который, в свою очередь, закрывает все окна браузера и корректно завершает сеанс WebDriver.

driver.dispose - Как упоминалось ранее, это внутренний метод WebDriver, который был отброшен в соответствии с другим ответом - необходима проверка. Этот метод в действительности не имеет прецедента в обычном рабочем процессе тестирования, поскольку любой из предыдущих методов должен работать в большинстве случаев.

Объяснение варианта использования: Вы должны использовать driver.quit всякий раз, когда хотите завершить программу. Он закроет все открытые окна браузера и завершит сеанс WebDriver. Если вы не используете driver.quit в конце программы, сеанс WebDriver не закроется должным образом и файлы не будут удалены из памяти. Это может привести к ошибкам утечки памяти.

Приведенное выше объяснение должно объяснить разницу между методами driver.close и driver.quit в WebDriver. Я надеюсь, что вы найдете это полезным.

На следующем сайте есть несколько полезных советов по тестированию селена: Ссылка

Ответ 4

quit(): выход из этого драйвера, закрытие каждого связанного окна, которое было открыто.

close(): закройте текущее окно, выйдя из браузера, если оно открыто в настоящее время.

Ответ 5

Основанный на проблеме на Github PhantomJS, quit() не завершает процесс PhantomJS. Вы должны использовать:

import signal
driver = webdriver.PhantomJS(service_args=service_args)
# Do your work here

driver.service.process.send_signal(signal.SIGTERM)
driver.quit()

ссылка

Ответ 6

close(): - Предположим, что вы открыли несколько окон браузера с одним экземпляром драйвера, теперь вызов close() для экземпляра драйвера закроет текущее окно, на которое указывает экземпляр драйвера. Но экземпляр драйвера все еще остается в памяти и может использоваться для обработки других открытых окон браузера.

quit(): - Если вы вызываете quit() для экземпляра драйвера и у вас открыто одно или несколько окон браузера, он закроет все открытые окна браузера, а экземпляр драйвера будет удален из памяти, т.е. удален из памяти. Так что теперь вы не можете использовать этот экземпляр драйвера для выполнения других операций после вызова quit(). Если вы это сделаете, вы получите исключение.

dispose(): - я не думаю, что есть метод dispose для экземпляра WebDriver.

Вы можете обратиться к официальному документу по селену по ссылке.

Ответ 7

close() - команда веб-драйвера, которая закрывает окно браузера, которое в данный момент находится в фокусе. Несмотря на знакомое название этого метода, WebDriver не реализует интерфейс AutoCloseable.

В процессе автоматизации, если открыто более одного окна браузера, команда close() закроет только текущее окно браузера, которое в данный момент находится в фокусе. Остальные окна браузера не будут закрыты. Следующий код можно использовать для закрытия текущего окна браузера:

quit() - это команда webdriver, которая вызывает метод driver.dispose, который, в свою очередь, закрывает все окна браузера и завершает сеанс WebDriver. Если мы не используем quit() в конце программы, сеанс WebDriver не будет закрыт должным образом и файлы не будут удалены из памяти. Это может привести к ошибкам утечки памяти.

Если в процессе автоматизации открывается только одно окно браузера, команды close() и quit() работают одинаково. Оба будут различаться по своим функциям, если во время автоматизации открыто более одного окна браузера.

Для ссылки выше: нажмите здесь

Команда утилизации Dispose() должен вызвать Quit(), и похоже, что это так. Однако эта проблема также связана с тем, что любые последующие действия блокируются до тех пор, пока PhantomJS не будет закрыт вручную.

Ссылка Ссылка

Ответ 8

Разница между driver.close() и driver.quit()

driver.close - закрывает окно браузера, на котором установлен фокус.

driver.quit - он в основном вызывает метод driver.dispose, который, в свою очередь, закрывает все окна браузера и корректно завершает сеанс WebDriver.

Ответ 9

Selenium WebDriver

  • WebDriver.Close() Этот метод используется для закрытия текущего открытого окна. Он закрывает текущее открытое окно, на которое фокусируется драйвер.

  • WebDriver.Quit() Этот метод используется для уничтожения экземпляра WebDriver. Он закрывает все окна браузера, связанные с этим драйвером, и безопасно завершает сеанс. Вызов WebDriver.Quit() Dispose.

  • WebDriver.Dispose() Этот метод закрывает все окна браузера и безопасно завершает сеанс

Ответ 10

Насколько я понимаю, driver.close(); закроет текущий браузер, и driver.quit(); прекратит работу всего браузера.