Python Селен выдает на Windows Docker Контейнер при попадании на наш производственный URL - PullRequest
0 голосов
/ 15 марта 2020

Я довольно новичок в 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 ========================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...