Не удается получить путь к файлу при загрузке файла через Chrome на сетке селена, работающей в докере - PullRequest
0 голосов
/ 06 октября 2019

У меня есть тест, запущенный на удаленном компьютере (селеновая сетка на докере) в процессе CI через Jenkins. тест загружает zip-файл, и после этого мне нужно распаковать его и проверить файлы из zip-файла. когда я запускаю тест самостоятельно (с моего компьютера с Windows, все еще удаленного, но без докера), тесты проходят, и все работает отлично. но когда он находится на CI в Linux Env, мне не удается получить путь к файлу

, как вы видите, "get_file_names_from_selenium_grid" пытается выполнить сценарий, но ничего не возвращается, вместо этого я получаю пустой списоксписка с одним элементом, который является путем к zip-файлу

def get_file_names_from_selenium_grid(self):
    if not self.driver.current_url.startswith("chrome://downloads"):
        self.driver.get("chrome://downloads/")

    try:
        for i in range(5):
            paths = self.driver.execute_script(
                "return downloads.Manager.get().items_.filter(e => e.state === 'COMPLETE').map(e => e.filePath || e.file_path || e.fileUrl || e.file_url); ")
            if type(paths) is list and len(paths) > 0:
                return paths
            else:
                time.sleep(5)
            Assertion.add_message_soft_assert_arr("Didn't succeed to get file paths")
            return False
    except Exception as e:
        Assertion.add_message_soft_assert_arr("Didn't succeed to get file paths" + str(e))
        return False

def get_file_content_from_selenium_grid(self, path):

    elem = self.driver.execute_script( \
        "var input = window.document.createElement('INPUT'); "
        "input.setAttribute('type', 'file'); "
        "input.hidden = true; "
        "input.onchange = function (e) { e.stopPropagation() }; "
        "return window.document.documentElement.appendChild(input); ")

    elem._execute('sendKeysToElement', {'value': [path], 'text': path})

    result = self.driver.execute_async_script( \
        "var input = arguments[0], callback = arguments[1]; "
        "var reader = new FileReader(); "
        "reader.onload = function (ev) { callback(reader.result) }; "
        "reader.onerror = function (ex) { callback(ex.message) }; "
        "reader.readAsDataURL(input.files[0]); "
        "input.remove(); "
        , elem)

    if not result.startswith('data:'):
        raise Exception("Failed to get file content: %s" % result)

    return base64.b64decode(result[result.find('base64,') + 7:])

, как я уже сказал, я получаю пустой список, а затем мне нечего отправить в "get_file_content_from_selenium_grid".

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