2016-02-23 2 views
1

Некоторые из вас могут знать, что можно попросить пользователя выбрать файл (ы), даже не помещая <input type=file"> внутри DOM , Кажется, что это нормально для большинства браузеров, если этот код вызывается изнутри обработчика события клика, инициированного пользователем.

Итак, в основном я использую эту функцию, чтобы получить обещание ES6 файла.

function askForFile() { 
    var $input = $("<input type='file'/>"); 
    var promise = new Promise(function(resolve, reject) { 
     $input.change(e => { 
      resolve(e.target.files[0]); 
     }); 
    }); 
    $input.click(); 
    return promise; 
}; 

Это прекрасно работает, но может ли кто-нибудь сказать мне, как его можно протестировать с помощью Selenium?

Я видел некоторые Селен snippets, что разрешение на ввод заполнить DOM с некоторым файлом:

// 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"); 

Но мой вклад не в DOM, так что кажется, что я не могу использовать этот трюк. Есть ли способ проверить мой код с Selenium?

Может ли кто-нибудь сказать мне, есть ли другой способ тестирования, чтобы задать пользователю файл (ы) без ввода бесполезного ввода в DOM?

ответ

0

Как насчет добавления слушателя в onclick с селеном?

driver.executeScript(' 
    $(function() { 
     $("input[type=file]").on('click', function(el) { 
      $(el).val('path/to/file'); 
     }); 
    }) 
') 

Извините, если это мусор, я не в состоянии проверить это на данный момент так почему бы это псевдокод :)

+0

Затем вы создаете вход с селеном, но как мое приложение получить код расслоение плотной этот файл, то ? Не уверен, что мы можем установить значение val, как нет? –

+0

Нет, вход создается вашим приложением при вызове 'askForFile'. Selenium просто добавляет слушателя к событию 'onclick'. В самом деле, я не уверен, что вы можете указать путь к файлу, как этот, но у вас уже есть код, который легко тестировать :) –

+0

, но как '$ (" input [type = file] ")' вернет что-либо, если нет ввода добавлен в DOM? –

Смежные вопросы