Я работаю на веб-странице, где загружается jquery, и на веб-странице есть поле ввода, которое поддерживает автоматическое завершение, поэтому после ввода нескольких символов появляется окно выбора предложений. С помощью консоли средства разработки, я могу быть в состоянии силой, что список предложений, которые будут созданы и быть появились по требованию, выполняя следующие функции Jquery (в браузере консоли):Фокус на входе с помощью jQuery
$('input#PrincipalPolicyHolder_EmploymentOccupationDescription').val("soft");
setTimeout(function() { $('input#PrincipalPolicyHolder_EmploymentOccupationDescription').focus(); }, 5000);
setTimeout(function() { $('input#PrincipalPolicyHolder_EmploymentOccupationDescription').keyup(); }, 6000);
Задержка необходима для меня для смены фокуса на окно с консоли. Эти команды jQuery достаточно, чтобы получить $('#PrincipalPolicyHolder_EmploymentOccupationDescription').is('focus')
true, что необходимо для создания списка предложений, если я не нажимаю на другое место.
Однако эти же действия не работают в среде casperjs. Вот как я выполняю;
casper.then(function() {
this.evaluate(function() {
$('input#PrincipalPolicyHolder_EmploymentOccupationDescription').val("soft");
$('input#PrincipalPolicyHolder_EmploymentOccupationDescription').focus();
$('input#PrincipalPolicyHolder_EmploymentOccupationDescription').keyup();
});
});
Я также попытался использовать SendKeys с keepFocus: true
, но никогда не получал is(':focus')
чек положительный. Есть ли способ сделать это?
Edit: я сузили проблему работать на очень простой веб-страницы, Вот фрагмент кода, который фиксирует вопрос:
var casper = require('casper').create({
verbose: true,
loglevel: "debug"
});
casper.start('http://jsfiddle.net/vhermL99/embedded/result/');
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
});
casper.withFrame(0, function() {
casper.thenEvaluate(function() {
var input = $('#input1');
input.val("value set by jquery");
input.focus();
console.log("is input focussed: " + input.is(':focus'));
});
casper.then(function() {
this.capture('before-sendkey.png');
});
casper.then(function() {
casper.sendKeys('#input1', 'value set by sendKeys', {'reset': true, 'keepFocus': true});
});
casper.thenEvaluate(function() {
console.log("is input focussed: " + $('#input1').is(':focus'));
});
casper.then(function() {
this.capture('before-sendkey.png');
});
});
casper.run();
ожидание оказывает .is(':focus')
истинное в одном из двух способов.
Я добавил casperjs.wait, но не работал. Проблема в том, что даже вы удаляете функции setTimeout() (откровенно говоря, я не мог понять, почему вы поместили их в контексте CasperJS) и сразу же выполните jquery focus(), а '' 'is (': focus')' '' check, вы увидите, что проверка фокуса никогда не верна. – sardok
Независимо от того, сфокусирован ли вход или нет, открылись ли предложения автозаполнения? Также как вы можете проверить, что что-то произошло на странице? Вы делаете скриншот или полагаетесь только на этот тест 'is (': focus')' test? –
Автозаполнение не работает, потому что функция автозаполнения проверяет на '' 'is (': focus')' '' на элемент. Автозаполнение заполняет список, и функция CasperJS ожидает этого списка. Кроме того, я делаю скриншот, и кажется, что элемент сфокусирован (кроме факта, что я не вижу курсора, хотя я не уверен, что я должен видеть). Интересно, что точно такие же инструкции jquery работают на консоли, но по какой-то причине не работают при запуске CasperJS. – sardok