У меня есть тест, запущенный на удаленном компьютере (селеновая сетка на докере) в процессе 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".