Selenium webdriver java - загрузить файл с драйвером phantomjs

Я запускаю сценарий selenium webdriver без головы, используя драйвер Phantomjs. У меня возникают проблемы с загрузкой файла, поскольку в обычном браузере (firefox или chrome) появляется диалоговое окно ОС, которое позволяет мне найти файл на моем компьютере и загрузить его. Как это сделать с помощью ghostDriver (драйвер Phantomjs)? Спасибо


person user2022966    schedule 01.05.2013    source источник


Ответы (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, а также безголовых браузеров.

person praneel    schedule 02.05.2013
comment
Большое спасибо за Ваш ответ. Однако мое приложение написано на extjs (вложенные диапазоны и элементы div). И нет текстовой области рядом с кнопкой загрузки. Буду признателен за другие предложения - person user2022966; 02.05.2013


Этот код помог мне с загрузкой, если был установлен атрибут «несколько»:

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);
    }
}
person Dmitry    schedule 18.08.2015

var webPage = require('webpage');   
var page = webPage.create();
page.uploadFile('input[name=image]', '/path/to/some/photo.jpg');

в новой версии phantomjs вы можете загрузить файл следующим образом: uploadfile

person Noin    schedule 01.12.2016