Загрузка файла в hidden input c помощью webdriver

Всем привет.
У меня есть такой элемент:

<input width="320" height="240" title="Кликните для выбора изображения" id="ArticleForm_previewImage" style="display: none;" name="ArticleForm[previewImage]" type="file">

Можно ли автоматизировать процесс загрузки файла с помощью WebDriver?

Так как Вы наверное уже поняли, в общем нельзя работать с hidden полями, но можно делать всякие хаки, в виде исполнения javascript.
Например, можно сделать поле видимое сначала, а потом вызвать webdriver команды.

1 лайк

browser.ExecuteJS(“document.getElementById(‘myfile2’).style.display = “block””);
Где-то так можно сделать видимым. Потом уже можно работать с этим элементом через WebDriver

2 лайка

Всем спасибо, получилось)

Ну тогда, пожалуйста, приложите работающий код для тех кто тоже столкнется с такой же проблемой и зайдет в эту тему. Спасибо!

Как-то так:

driver.execute_script("document.getElementById('file-input-id').style.display = 'inline'");
element = driver.find_element_by_id("file-input-id")
element.send_keys("myfile.txt")
1 лайк

Допишу подобную ситуацию из практики. Есть инпут, не содержащий в явном виде style="display: none;, однако, его все равно прячут от глаз юзера, путем указания в стилях position:absolute;top:-100%;opacity:0;
собственно, тем же джаваскриптэкзекьютером делем ему позицию релэтив, топ 0, и опасити 100 - и элемент виден и с ним можно работать.

кривовато и костыльно, - мне не нравится. Но работает

String script="b=document.getElementsByTagName('input')[1];\n" +
                "b.style.position=\"relative\";\n" +
                "b.style.top=\"0\";\n" +
                "b.style.width=\"200px\";\n" +
                "b.style.height=\"20px\";\n" +
                "b.style.opacity=100;";

((JavascriptExecutor)driver).executeScript(script);