Я довольно новичок в Docker контейнерах, так что я надеюсь, что кто-то может указать на проблему, почему у меня всегда проходит тест селена на моем контейнере docker, когда я пытаюсь найти элементы в нашем производственном URL.
Я пытаюсь запустить тест входа в систему одновременно на нескольких docker контейнерах для нашего веб-приложения. Тест отлично работает как для нашего URL для разработки, так и для рабочего при его запуске на моем хост-компьютере, но проходит только при нажатии на URL для разработки в контейнере docker. В частности, селен выдает исключение Timeout
при попытке найти первый элемент в скрипте (строка имени пользователя на странице входа в систему). Он не выдает ошибку, когда я получаю сам URL, поэтому мне интересно, есть ли какие-то меры безопасности, которые распознают, что есть устройство VM, пытающееся очистить элементы на странице. Поскольку тест работает для одного URL в контейнере docker (и на моем хост-компьютере), я уверен, что код должен работать, и это является некоторой проблемой безопасности. Однако ниже приведено описание кода и трассировки стека, которые я получаю.
При настройке теста в тестовый набор передается приспособление pytest, в котором есть информация о браузере (chrome browser) и информация о приложении (включает в себя экземпляр нашего «класса приложения», который задает URL, информацию для входа в систему и т. д. c., чтобы соответствовать среде: Dev / Prod для веб-приложения). Затем тестовый случай пытается войти в систему, вызвав функцию входа в систему. При этом используется настраиваемая функция поиска, которая находит список элементов, соответствующих css -селектору. Нам нужен первый элемент этого списка, поэтому мы добавляем индекс [0]
в конец оператора find следующим образом: our_test_objects_browser.find('our_element')[0]
. Более конкретно, здесь есть функция входа в систему (из нашего класса входа в систему), которая вызывается и завершается ошибкой при поиске элемента self.user
:
def login(self):
self.browser.get(self.obc.obcUrl)
search_form = self.browser.find(self.user)[0]
search_form.clear()
search_form.send_keys(self.obc.username)
search_form = self.browser.find(self.password)[0]
search_form.clear()
search_form.send_keys(self.obc.password)
search_form.submit()
Ниже приведен тестовый сценарий, который вызывает этот метод:
def test_valid_login(obj_to_test):
start_time=time.time()
obj_to_test.login()
print("run_time is" +str(time.time()-start_time())
А вот трассировка стека для сбоя:
================================== FAILURES ===================================
______________________________ test_valid_login _______________________________
obj_to_test = <obc.login.login.Login object at 0x0000026833AFD820>
def test_valid_login(obj_to_test):
start_time=time.time()
> obj_to_test.login()
tests\obc\test_login.py:23:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src\obc\login\login.py:25: in login
search_form = self.browser.find(self.user)[0]
src\common\selenium_test.py:61: in find
return (self.wait.until(expected_conditions.presence_of_all_elements_located(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.support.wait.WebDriverWait (session="035a9153594f3ebe92663c5e4bc9b121")>
method = <selenium.webdriver.support.expected_conditions.presence_of_all_elements_located object at 0x0000026833ACAC10>
message = ''
def until(self, method, message=''):
"""Calls the method provided with the driver as an argument until the \
return value is not False."""
screen = None
stacktrace = None
end_time = time.time() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
c:\python\lib\site-packages\selenium\webdriver\support\wait.py:80: TimeoutException
============================== warnings summary ===============================
tests/obc/test_login.py::test_valid_login
c:\python\lib\site-packages\urllib3\connectionpool.py:997: InsecureRequestWarning: Unverified HTTPS request is being made to host 'flexonboardingn1.paychex.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
warnings.warn(
-- Docs: https://docs.pytest.org/en/latest/warnings.html
======================== 1 failed, 1 warning in 52.50s ========================