Я запускаю сценарий selenium webdriver без головы, используя драйвер Phantomjs. У меня возникают проблемы с загрузкой файла, поскольку в обычном браузере (firefox или chrome) появляется диалоговое окно ОС, которое позволяет мне найти файл на моем компьютере и загрузить его. Как это сделать с помощью ghostDriver (драйвер Phantomjs)? Спасибо
Selenium webdriver java - загрузить файл с драйвером phantomjs
Ответы (4)
Всегда идентифицируйте и взаимодействуйте с элементами типа «файл», когда речь идет о загрузке. Это решит вашу проблему с всплывающими окнами.
Пример: в моем приложении связанные с загрузкой элементы имеют DOM ниже:
<a id="uploadFileButtonLink" class="uploadFileButtonLink" href="javascript:void(0)" data-uidsfdc="3" style="display: none;">Upload a file</a>
<input id="multiFileInput" class="multifile-upload-input-button" type="file" name="chatterFile_upload" multiple="multiple"/>
<input id="multiUploadBtn" class="btnImportant" type="button" value="Upload Files"/>
В этом случае вы можете использовать метод sendKeys для «multiFileInput», который имеет тип «файл». Таким образом, это будет работать для всех FF, Chrome, а также безголовых браузеров.
У меня такая же проблема, и я разместил вопрос для того же. PhantomJS зависает при использовании метода sendKeys().
Здесь зарегистрирована проблема — https://github.com/ariya/phantomjs/issues/10993< /а>
В одном из комментариев по этому вопросу говорилось, что приведенное ниже утверждение сработало:
(PhantomJSDriver) driver.executePhantomJS("var page = this; page.uploadFile('input[type=file]', 'path to file');");
Вы можете попробовать вышеуказанное решение, но оно может сработать, а может и не сработать.
Этот код помог мне с загрузкой, если был установлен атрибут «несколько»:
protected void uploadFile(CharSequence... keys) {
if (((WrapsDriver) driver).getWrappedDriver() instanceof PhantomJSDriver) {
StringBuffer s = new StringBuffer(keys.length);
for (int index = 0; index < keys.length; index++) {
s.append(keys[index].toString());
}
((PhantomJSDriver) ((WrapsDriver) driver).getWrappedDriver()).executePhantomJS(
String.format("var page = this; page.uploadFile(arguments[0], '%s');", s.toString()), getElement());
} else {
getElement().sendKeys(keys);
}
}
var webPage = require('webpage');
var page = webPage.create();
page.uploadFile('input[name=image]', '/path/to/some/photo.jpg');
в новой версии phantomjs вы можете загрузить файл следующим образом: uploadfile