Я предполагаю, что ваша проблема заключается в том, что, вероятно, существует объект-обертка для красивого элемента input
по умолчанию. Веб-разработчикам свойственно «скрывать» этот элемент ввода по умолчанию, и поэтому Selenium не сможет щелкнуть этот объект, поскольку его атрибут отображения имеет значение «none».
Возможно, нам придется взглянуть на другие теги HTML в этой иерархии DOM, но я подозреваю, что, вероятно, есть еще один входной тег, вложенный на 1 или 2 уровня ниже, который выглядит примерно так. По крайней мере, атрибут отображения должен иметь значение none:
<input display: none;> </input>
Чтобы загрузить файл, вместо этого вам нужно будет отправить ключи непосредственно к этому элементу. Но сначала вам нужно сделать его видимым:
//the 'upload' variable here refers to the input element with display: none;
JavascriptExecutor jsexec = (JavascriptExecutor) driver;
//First, change the display to inline to expose the underlying input element
jsexec.executeScript("arguments[0].display='inline;', upload);
После выполнения приведенного выше кода вы должны увидеть необработанный элемент ввода. Это элемент, который вы хотите отправить:
//After that you can go ahead to upload the file:
upload.sendKeys("path of the file");
Честно говоря, не видя всего DOM, я не могу сообщить, нужна ли нижняя строка. Вам нужно будет попробовать и убедиться в этом:
jsexec.executeScript("arguments[0].type='file'", upload);
- Если такого вложенного элемента ввода не существует, просто попробуйте код выше с текущим элементом ввода, который вы нашли.