Как щелкнуть по <input type = file> в браузерах с помощью Selenium Webdriver?
Я работаю над диалогом с файловым выбором, используя Selenium 2 - WebDriver. Верьте или нет, моя проблема заключается не в том, что OS-native-file-chooser. Эта часть, с которой я могу справиться!
Проблема заключается в том, чтобы Selenium правильно нажал кнопку "Выбрать файл". Поскольку исходный html-источник просто <input type='file'>
, браузер определяет, как отображать его как поле и кнопку. В результате размещение и именование кнопки изменяется в зависимости от браузера. У меня это работает в Chrome, но только потому, что Chrome помещает кнопку в крайнее левое выравнивание, и по умолчанию Selenium щелкает по ней.
Любые идеи? Мне непонятно, действительно ли вход этого типа действительно доступен изнутри DOM...
Ответы
Ответ 1
Правильный способ загрузки файла на любую ОС -
- Найдите элемент
<input type='file'>
. Вам не нужно беспокоиться о разных реализациях и точном позиционировании. Просто найдите элемент, например, xpath //input[@type='file']
-
sendKeys()
или type()
(или любой другой метод записывает текст в элементы на вашем языке) путь к файлу для этого элемента ввода.
Пример кода Java:
// find the input element
WebElement elem = driver.findElement(By.xpath("//input[@type='file']"));
// 'type' the file location to it as it were a usual <input type='text' /> element
elem.sendKeys("C://path/To/File.jpg");
Это работает для каждой ОС и браузера в WebDriver.
Ответ 2
Иметь точно такую же ситуацию с элементом <input type='file'>
. В моем случае он создается с помощью ExtJS.
Я не знаю, решил ли вы этот вопрос или нет, но позвольте мне предоставить мое решение.
JavascriptExecutor executor = (JavascriptExecutor)getDriver();
executor.executeScript("arguments[0].click();", element);
Ни sendKeys(), ни тип(), ни использование ActionBuilder не были полезны для меня. Единственный JavascriptExecutor работает как шарм.
Ответ 3
Я тестировал следующий элемент:
<INPUT style="WIDTH: 550px; background-color:yellow" type="file">
Результаты:
- IE: doubleclick в любой области элемента, появится диалог "Выбрать файл";
- Firefox: нажмите в любой области элемента, появится диалог "Выбрать файл".
Ответ 4
Я точно сталкиваюсь с той же проблемой при кодировании в Python 3.6, selenium.common.exceptions.InvalidArgumentException: Сообщение: Невозможно щелкнуть элементы. Пожалуйста, помогите мне.