Как щелкнуть по <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: Сообщение: Невозможно щелкнуть элементы. Пожалуйста, помогите мне.