8

ここで少し助けた後、私は Geb を使用して機能的な Web テストを作成しており、イベントが発生する前後の両方でフォーム送信ボタンの無効な属性値をテストしたいと考えています。フローは次のようになります。

  1. ページの読み込み、送信ボタンはページソースで無効として宣言されているため、無効にする必要があります<input type="submit" class="submit" disabled="true"/>
  2. ページのチェックボックスをオンにすると、JQuery コードが実行され、無効になっている送信ボタンがプログラムで有効になります。$('input.submit').attr('disabled', false);

私の最初の試みは assertion を使用することでした$('input.submit').@disabled == 'true'。これは、ページの読み込み後の最初のチェックでは機能するように見えましたが、JQuery コードを実行してボタンを有効にした後も、後続のチェックで同じ結果が返されます。これにより、この種のチェックはページの読み込み時にのみ値を報告でき、その後のプログラムによる変更は表示されないのではないかと思いました。

その後、Geb の jquery itegration を発見しました。これを使用して送信ボタンの値を返し、これに対してアサートを実行できることを望んでいました。たとえば$('input.submit').jquery.attr('disabled') == false、Geb のドキュメントでは、.jqueryプロパティへのすべての呼び出しが Geb Navigator インスタンスを返すことが確認されているので、残念ながらそうではありません。必要な情報を返すことができるとは思いません。

また、JQuery コードが実際に送信ボタンを無効な状態に切り替えているかどうかも疑問でした。Firebug を使用してこれを広範囲にテストし、これがブラウザーで完全に機能していることを確認できたので、これは Geb の理解に問題があるか、またはおそらくGeb自体の制限ですか?

ページで何らかのアクションを実行した後に要素の属性の値をチェックするのは一般的なユースケースかもしれないと思います。これを整理するのに役立つポインタがあれば、最も感謝しています。

乾杯、

エド

4

2 に答える 2

11

もう少しテストを行い、満足のいく結果が得られました。私は今では不適切だと思ういくつかのことをしていました。つまり、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');

注:値をtrue設定せずに属性を設定する方法を決定できないため、まだdisabledの値を設定しています。詳細については、このSOの投稿を参照してください。

上記を使用して、Gebを使用して、次のような要素の無効/有効ステータスをアサートできるようになりました。

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

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

注:Gebは、ブール値ではなく、期待されるステータスを示す文字列リテラルを必要としているようです。これにより、iircによってアサーションが失敗しました。

以上です。すべてが正常に機能しており、Gebテストを大量に作成しています。この説明が他の人にも役立つことを願っています。

于 2011-06-09T09:08:58.443 に答える
3

Geb メーリング リストでの投稿の再ブロードキャスト:

ボタンを有効にする jQuery コードを実行した後、コードが実際にボタンを有効にする前に結果を確認している可能性はありますか? たとえば、次のようなことをしています。

waitFor { $("input.submit").@disabled == "false" }
于 2011-06-08T15:53:34.170 に答える