Python Selenium: как проверить, действительно ли WebDriver завершает работу ()?

Я хочу контролировать, выходит ли мой WebDriver но я не могу найти для этого метод. ( Кажется, что в Java есть способ сделать это )

 from selenium import webdriver driver = webdriver.Firefox() driver.quit() driver # <selenium.webdriver.firefox.webdriver.WebDriver object at 0x108424850> driver is None # False 

Я также изучил атрибуты WebDriver но не могу найти какой-либо конкретный метод для получения информации о статусе драйвера. Также проверяя идентификатор сеанса:

 driver.session_id # u'7c171019-b24d-5a4d-84ef-9612856af71b' 

Если вы изучите исходный код драйвера python-selenium, вы увидите, что делает метод quit() драйвера firefox:

 def quit(self): """Quits the driver and close every associated window.""" try: RemoteWebDriver.quit(self) except (http_client.BadStatusLine, socket.error): # Happens if Firefox shutsdown before we've read the response from # the socket. pass self.binary.kill() try: shutil.rmtree(self.profile.path) if self.profile.tempfolder is not None: shutil.rmtree(self.profile.tempfolder) except Exception as e: print(str(e)) 

Здесь вы можете положиться: проверка binary.process пути profile.path или проверка состояния binary.process . Он может работать, но вы также можете видеть, что есть только «внешние вызовы», и на стороне python ничего не меняется , что поможет вам указать, что вызывается quit() .

Другими словами, вам необходимо сделать внешний вызов, чтобы проверить статус :

 >>> from selenium.webdriver.remote.command import Command >>> driver.execute(Command.STATUS) {u'status': 0, u'name': u'getStatus', u'value': {u'os': {u'version': u'unknown', u'arch': u'x86_64', u'name': u'Darwin'}, u'build': {u'time': u'unknown', u'version': u'unknown', u'revision': u'unknown'}}} >>> driver.quit() >>> driver.execute(Command.STATUS) Traceback (most recent call last): ... socket.error: [Errno 61] Connection refused 

Вы можете поместить его под функцию try/except и сделать повторно используемую функцию:

 import httplib import socket from selenium.webdriver.remote.command import Command def get_status(driver): try: driver.execute(Command.STATUS) return "Alive" except (socket.error, httplib.CannotSendRequest): return "Dead" 

Применение:

 >>> driver = webdriver.Firefox() >>> get_status(driver) 'Alive' >>> driver.quit() >>> get_status(driver) 'Dead' 

Другим подходом было бы сделать ваш пользовательский веб-редактор Firefox и установить session_id в None в quit() :

 class MyFirefox(webdriver.Firefox): def quit(self): webdriver.Firefox.quit(self) self.session_id = None 

Затем вы можете просто проверить значение session_id :

 >>> driver = MyFirefox() >>> print driver.session_id u'69fe0923-0ba1-ee46-8293-2f849c932f43' >>> driver.quit() >>> print driver.session_id None 

Как насчет выполнения команды драйвера и проверки исключения:

 import httplib, socket try: driver.quit() except httplib.CannotSendRequest: print "Driver did not terminate" except socket.error: print "Driver did not terminate" else: print "Driver terminated" 

он работает в java, проверяется на FF

 ((RemoteWebDriver)driver).getSessionId() == null