Заставить SeleniumHQ в Docker-контейнере закрыть все сеансы браузера - PullRequest
0 голосов
/ 08 февраля 2019

Я запускаю selenium hub в Docker-контейнере для тестирования веб-сайтов.Соответствующая часть моего Dockerfile:

#https://github.com/SeleniumHQ/docker-selenium
version: '3'
services:
selenium-hub:
    image: selenium/hub:3.141.59-dubnium
    environment:
    - GRID_MAX_SESSION=15
    - GRID_TIMEOUT=180000
    - GRID_BROWSER_TIMEOUT=180000      
    networks: 
    - selenium-hub
chrome:
    image: selenium/node-chrome:3.141.59-dubnium
    shm_size: 512MB
    volumes:
    - /dev/shm:/dev/shm
    depends_on:
    - selenium-hub
    environment:
    - NODE_MAX_INSTANCES=5
    - NODE_MAX_SESSION=6
    - HUB_HOST=selenium-hub
    - HUB_PORT=4444
    - DBUS_SESSION_BUS_ADDRESS=/dev/null
    networks: 
    - selenium-hub

Я пишу скрипты Python 3.x для подключения к селену.Обычная рутина следующая.Но иногда переменная driver теряется из-за внешних ошибок.В этом случае сетка селена содержит ожидающие сеансы браузера, над которыми я уже потерял контроль.Можно ли заставить Selenium hub закрыть все сеансы браузера одновременно?Как мне сделать это в python?

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

cap = DesiredCapabilities.CHROME
driver = webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub',desired_capabilities=cap) 
##
# commands to browser
##
driver.quit()

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете структурировать свой код, используя try / finally:

driver = webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub', desired_capabilities=cap)
try:
    ##
    # commands to browser
    ##
finally:
    driver.quit()

или создать свой драйвер в качестве менеджера контекста:

with webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub', desired_capabilities=cap) as driver:
    ##
    # commands to browser
    ##

... оба они всегда будут вызывать quit() в вашем экземпляре драйвера.

Примечание: даже если они безусловно вызовут quit(), это не обязательно означает, что браузер фактически закроется.

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