Как использовать Geb для проверки значения атрибута элемента после события страницы - PullRequest
8 голосов
/ 07 июня 2011

После небольшой помощи здесь я пишу функциональный веб-тест с использованием Geb и хочу проверить значение атрибута disabled кнопки отправки формы как до, так и после того, как событие произошло, поток должен быть следующим:

  1. Загрузить страницу, кнопка отправки объявлена ​​как отключенная в источнике страницы, поэтому должна быть отключена, например. <input type="submit" class="submit" disabled="true"/>.
  2. Установите флажок на странице, это должно привести к выполнению фрагмента кода JQuery, который активирует отключенную кнопку отправки программно, используя: $('input.submit').attr('disabled', false);

Моей первой попыткой было использовать утверждение $('input.submit').@disabled == 'true', похоже, это сработало для начальной проверки после загрузки страницы, однако после выполнения моего кода JQuery для включения кнопки последующая проверка по-прежнему возвращает тот же результат. Это заставило меня задуматься, может ли такая проверка только сообщать о значении во время загрузки страницы и не видит никаких последующих программных изменений?

Затем я обнаружил, что Geb использует jquery итерацию, и я надеялся, что смогу использовать это, чтобы вернуть значение кнопки отправки и сделать свое утверждение, например, об этом. $('input.submit').jquery.attr('disabled') == false однако документация Geb подтверждает, что все вызовы свойства .jquery возвращают экземпляр Geb Navigator, поэтому, к сожалению, я не думаю, что смогу вернуть нужную информацию.

Я также сомневался, действительно ли код JQuery переключал состояние отключения кнопки отправки, я тщательно протестировал это с помощью Firebug и могу подтвердить, что это отлично работает в браузере, поэтому я подозреваю, что это либо проблема с моим пониманием Геба или, возможно, ограничение самого Геба?

Меня поражает, что проверка значения атрибутов элемента после выполнения какого-либо действия на странице может быть распространенным вариантом использования, поэтому я скорее надеюсь, что упустил какой-то тривиально простой способ сделать это. Был бы очень благодарен за любые указатели, чтобы помочь мне разобраться в этом.

Приветствия

Edd

Ответы [ 2 ]

10 голосов
/ 09 июня 2011

Провел немного больше испытаний и теперь достиг удовлетворительного результата. Я делал несколько вещей, которые, как я теперь считаю, неуместны, а именно пытался установить для атрибута disabled недопустимые значения true и false, например:

$('input.submit').attr('disabled', true);
$('input.submit').attr('disabled', false);

Глядя на спецификацию HTML-форм показано, что отключенный атрибут не принимает значения, а только его наличие указывает на то, что элемент отключен. Модификация моего кода в соответствии с этим и удаление атрибута, указывающего на включение элемента, похоже, добились цели:

$('input.submit').attr('disabled', true);
//This time we remove the disabled attribute rather than setting it to false.
$('input.submit').removeAttr('disabled');

Примечание. Я по-прежнему устанавливаю значение disabled на true, поскольку не могу определить, как установить атрибут без установки значения, см. в этом сообщении SO для получения дополнительной информации.

Используя вышеупомянутое, я теперь могу использовать Geb, чтобы утверждать отключенное / включенное состояние таких элементов:

//Check that something is disabled.
deleteSelectedButton.@disabled == 'true'

//Check that something is enabled.
deleteSelectedButton.@disabled == 'false'

Примечание: Geb, похоже, требует строкового литерала, указывающего ожидаемый статус, а не логическое значение, которое из-за iirc не подтвердило мои утверждения.

Вот и все - теперь все работает хорошо, и я продолжаю писать множество тестов Geb! Надеюсь, что это объяснение пригодится другим.

3 голосов
/ 08 июня 2011

Повторное вещание моего поста в списке рассылки Geb:

После того, как вы выполните код jQuery, который включает кнопку, возможно ли, что вы проверяете результат до того, как код фактически активировал кнопку?Например, делают что-то вроде:

waitFor { $("input.submit").@disabled == "false" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...