Автоматизация тестирования Selenium, driver.get (url) происходит до запуска веб-сайта

#python #selenium

#python #селен

Вопрос:

Я создаю автоматизацию тестирования образа docker веб-сайта с использованием Selenium python. На этапе настройки,

driver.get(myurl) может вернуть ошибку отказа в подключении, поскольку веб-страница еще не запущена.

Я думал, что implicitly_wait() может решить эту проблему. Поэтому я поставил

 driver.implicitly_wait(90)
driver.get(myurl) 
 

Но исключение все равно выдается немедленно.

  selenium.common.exceptions.WebDriverException: Message: unknown error: net::ERR_CONNECTION_REFUSED
 

Есть предложения? Должен ли я вместо этого использовать явное ожидание?

Мой текущий взлом заключается в создании функции ожидания, которая проверяет, пока driver.get() больше не выдает ошибку.

 from selenium import webdriver
from selenium.common.exceptions import WebDriverException

import config
from utils import SureThing, json_load

def wait_untill_loaded(driver, url, seconds=60):
    """Wait until driver can connect to url"""
    start = time.time()
    while time.time() - start <= seconds:
        try:
            driver.get(url)
            if driver.title:
                return driver
        except:
            pass
    raise WebDriverException("net::ERR_CONNECTION_REFUSED")

driver_options = webdriver.ChromeOptions()

driver_options.add_argument("--headless")

driver = webdriver.Chrome(options=driver_options)
driver = wait_untill_loaded(driver, myweblocalurl)
 

Комментарии:

1. Не могли бы вы предоставить немного больше информации (webdriver, url, …) спасибо

2. На всякий случай, если вы запустили свой локальный хостинг, который вы предоставили? Это вызывает ошибку в одном из моих тестов. Вы также получаете сообщение об ошибке, если запрашиваете другой URL (Google, …)?

3. @HedgeHog, я добавил текущий хак, myweblocalurl — это просто какой-то локальный хост с портом.

4. … Боюсь, вы неправильно поняли. Конечно, с Google все будет в порядке, потому что это уже запущенный веб-сайт. Я имею в виду локальный сервер, запуск которого занимает несколько секунд, который запускается из docker-compose. Если среда выполнения python достигнет driver.get() до того, как будет отправлена веб-страница, это вызовет ошибку подключения.