Я пишу автоматический тест для импорта файлов через пользовательский интерфейс веб-приложения. Как пользователь, вы нажимаете кнопку «Импортировать», открывается проводник Windows, и вы можете перемещаться по системе, чтобы найти файл, который хотите импортировать. Автоматический тест работает немного по-другому, поскольку Selenium не может взаимодействовать с Проводником Windows. Я использую send_keys со следующим XPATH для передачи строки пути к файлу в пользовательский интерфейс:
Код: Выделить всё
input_path = "(//input[contains(@type, 'file')])[1]"
И я получил следующую ошибку:
Код: Выделить всё
Message: invalid element state: Element is not currently interactable and may not be manipulated
Поэтому я попытался манипулировать JavaScript, чтобы сделать элемент интерактивным, вот так:
Код: Выделить всё
self.webDriver.execute_script(f"arguments[0].style.display='block'; arguments[0].value={filePath};", input_path)
self.webDriver.execute_script("arguments[0].dispatchEvent(new Event('change'));", input_path)
Но это дало мне еще одну ошибку:
Код: Выделить всё
selenium.common.exceptions.WebDriverException: Message: unknown error: Runtime.evaluate threw exception: SyntaxError: Unexpected token ':'
Я не уверен, в чем проблема.
Элемент ввода выглядит следующим образом:
Я не знаю, означает ли это что-нибудь, но на другой панели приложения есть еще один элемент ввода, который выглядит следующим образом:
Я использую //input[@accept = '.docx'] для определения input_path в этом тесте, и он работает нормально. Может ли проблема заключаться в отсутствии свойства Accept в бывшем элементе ввода?
Подробнее здесь:
https://stackoverflow.com/questions/787 ... teractable