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'
- Подождите, пока перенаправление страницы Selenium WebDriver (Python)
- Невозможно получить доступ к выпадающему меню, используя Selenium в Python
- не удается перейти вниз в выпадающем списке, используя keys.ARROW_DOWN в веб-сервере Selenium, используя Python
- Нажмите кнопки с изображениями
- Как запустить селен в Xvfb?
Если вы изучите исходный код драйвера 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
- Периодически вызывать функцию в основном цикле пигтка
- Как передать двоичные данные в массивы numpy без хранения tmp?
- Selenium send_keys зависает на Python
- как я могу удалить уведомления и предупреждения из браузера? selenium python 2.7.7
- Python webdriver для обработки всплывающих окон браузера, который не является предупреждением
- Работайте для всплывающего окна selenium2
- Selenium … Программа работает отлично для Firefox, но не Chrome
- Как использовать профили Firefox в Selenium Python
- Перечислить все элементы в привязках Selenium Python для Appium
- Python – Selenium: Отправить форму без открытия новой вкладки или нового окна
- Ошибка в .vdisplay.start () – xvfbwrapper не работает