Как использовать Geb для проверки значения атрибута элемента после события страницы

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

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

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

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

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

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

Ваше здоровье,

Эдд


person Edd Grant    schedule 07.06.2011    source источник


Ответы (2)


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

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

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

$('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! Надеюсь, это объяснение будет полезно другим.

person Edd Grant    schedule 09.06.2011

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

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

waitFor { $("input.submit").@disabled == "false" }
person Ray Nicholus    schedule 08.06.2011