#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() до того, как будет отправлена веб-страница, это вызовет ошибку подключения.