3

「削除」と呼ばれるフォームボタンがあるWebページと、次の行を持つcukeシナリオがあります。

And I should see "delete"

シナリオを実行すると、次のエラーが発生します。

expected the following element's content to include "delete"

...そして、webratページをstdoutにダンプしますが、実際には「削除」はありません。ここまでは順調ですね。ただし、エラーが発生する前に webrat にページを表示するように指示すると、次のようになります。

Then show me the page
And I should see "delete"

...Safari が起動してページが表示され、Safari には「削除」ボタンが完全に表示されます。

Webrat がフォーム ボタンを見つけられないのはなぜですか? ページの読み込み時に値が含まれるテキスト入力など、フォーム フィールドでも同じ問題が発生しましたが、webrat では何も表示されません。これを Safari で見ると、フィールドに正しいテキストが含まれていることがわかります。

これはバグですか、それとも webrat はフォーム要素のチェックに適していませんか? これを行う別の方法はありますか?ありがとう!

4

4 に答える 4

2

独自のステップ定義を記述して、フォーム要素をチェックできます。たとえば、値が「削除」のボタンを見つけるには、機能を次のように記述します。

And I should see a button with a value of "delete"

そして、次のステップ定義:

Then /^I should see a button with a value of "([^\"]*)"$/ do |value|
  response.should have_selector("form input[value=#{value}]")
end

補足として、カスタム ステップが失敗すると、応答全体がダンプされ、フォーム要素が表示されることに気付くでしょう。これがなぜなのかは完全にはわかりませんが、「I should see...」と書いたときに Cucumber がフォーム要素の値と一致していないようです。

Webrat は、構文を使用するときに HTML 要素を一致させるためのCSS3 セレクターをサポートすると主張しています。have_selector

于 2010-04-15T03:46:04.773 に答える
1

レオナルドへ:

スペースを含むボタン ラベルの場合は、次のvalueように引用符で囲む必要があります。

Then /^I should see a button with a value of "([^\"]*)"$/ do |value|
  response.should have_selector("form input[value='#{value}']")
end
于 2010-09-19T17:44:06.443 に答える
0

テスト対象の HTML が有効かどうかを確認する

于 2010-04-15T03:52:11.170 に答える
0

他の誰かがこれに遭遇した場合。上記の答えは私にはうまくいきませんでした(理由はわかりません)が、次の答えはうまくいきました。

Then /^I should see a button with "([^"]*)"$/ do |button_text|
  if page.respond_to? :should
    page.should have_xpath("//input[contains(@value,'#{button_text}')]")
  else
    assert page.has_xpath?("//input[contains(@value,'#{button_text}')]")
  end
end
于 2011-08-30T19:09:24.363 に答える