2017-02-01 22 views
-1

Я построил приложение с метеорным пламенем, и теперь я пытаюсь проверить его с помощью CodeceptJS. Проблема в том, что все мои поля ввода не имеют значений в режиме DOM (режим F12), но я вижу значения в браузере. В meteor я использую шаблонные помощники для чтения их из моей коллекции MongoDB и передаю их в пламя/пробелы. Поэтому метеорит записывает все значения с помощью JavaScript в режиме реального времени (после того, как сайт полностью загружен/сгенерирован).Как найти входные значения, которые создаются после загрузки веб-сайта?

У меня есть поле ввода со значением «codeceptjs». Но я не вижу его в режиме DOM (режим chrome: F12). Он показывает мне только это:

<div class="input"><input data-title type="text" title="Todo Title"></div> 

Однако в моем Метеор Blaze-файл я следующее:

<div class="input"><input data-title type="text" value={{title}} title="Todo Title"></div> 

Также JQuery не может найти их, потому что нет значения в DOM:

jQuery('input[value="codeceptjs"]').length 
0 

Как получить доступ к входному значению в реальном времени с помощью jQuery/codeceptjs без изменения рабочего приложения?

+1

'JQuery ('вход [значение = "codeceptjs"]')' не находит ничего, потому что 'input' элементы не имеют атрибут с этим значением. Я не уверен, что вы имеете в виду, обратившись к «входному значению в реальном времени», но либо «val()», либо «prop» («val») должны соответствовать вашим потребностям. –

+0

важно понимать, что изменение значения свойства (по коду или пользовательскому вводу) не меняет атрибут value – charlietfl

+0

Я знаю, что мой элемент не имеет этого атрибута в DOM. Meteor изменяет все значения с помощью Blaze и JavaScript после полной загрузки Web-страницы (DOM). Мое приложение похоже на todo-приложение с неограниченными полями ввода (например, ToDo-name), которые можно переименовать/изменить и удалить в режиме реального времени. Я вижу это поле с этим значением в моем браузере. Но мой браузер не показывает эти значения в режиме F12 - потому что он переносит их в режиме реального времени после DOM. Должен быть способ найти их. –

ответ

0

Предполагая, что в реальном времени вы понимаете, что значение добавляется после завершения загрузки веб-страницы (DOM). Если это так, вам нужно использовать селектор контекста JQuery.

jQuery('input[value="codeceptjs"]', '.input').length 
+0

Да, я считаю, что Meteor меняет все значения с помощью Blaze и JavaScript после полной загрузки Web-страницы (DOM). Мое приложение похоже на todo-приложение с неограниченными полями ввода (например, ToDo-name), которые можно переименовать/изменить и удалить в режиме реального времени. С вашим решением я все равно получаю '0', хотя я вижу это поле с этим значением в своем браузере. Но мой браузер не показывает эти значения в режиме F12. –

1

Во-первых, я думаю, что ваш jQuery, чтобы получить входное значение, неверен. Если ваше значение изменяется в поле ввода со значением «codeceptjs», то ваш селектор jQuery не найдет уже измененное значение. Который был бы, почему вы получили ноль с помощью селектора jQuery. Вход будет лучше выбран, придав ему идентификатор или значение имени, как, например:

<div class="input"><input id="codeceptjs" type="text" title="My Title"></div> 

Если добавить идентификатор к вашей входной метке, то вы можете получить длину строки в поле ввода, как это :

$('#codeceptjs').val().length; 
+0

Каждый новый документ mongodb имеет идентификатор, и я использую его внутри метеор. Meteor отображает HTML с помощью blaze и генерирует HTML со всеми динамическими значениями реального времени с помощью Blaze и JavaScript. Если я вижу значение в браузере, должен быть способ найти их с помощью JQuery/JavaScript. Мое приложение похоже на todo-приложение с неограниченными полями ввода, которые можно переименовать/изменить и удалить в режиме реального времени. –

+0

Мне нужно решение без изменения рабочего приложения. Другие приложения метеоритов с неограниченными полями ввода не используют атрибут html-id в DOM, потому что он вам не нужен. –