1

だから私はCucumberでBDDをやっていて、データベースからチェックボックスが入力されたフォームを持っています。チェックボックスのラベルにはハイパーリンクが含まれています。これまでのところ、あまりエキゾチックではありません(これはHAMLであり、Erbではありませんが、Railsの人なら誰でも十分に読めるはずです):

I would like my donation to support:
%br
- for podcast in @podcasts
  = check_box_tag "donation[podcast_ids][]", podcast.id, true
  = donation.label "donation[podcast_ids][]", link_to(podcast.name, podcast.url), :value => podcast.id
  %br

問題は、Cucumberの機能で、チェックボックスを見つけてチェックする方法がわからないことです。物語の関連部分はこれです:

  Scenario: Happy path
    Given I am on the home page
    When I fill in "My email address" with "john@example.org"
     # Skipped for brevity...
     And I check the "Escape Pod" podcast
     And I check the "PodCastle" podcast
     And I press "I'm ready!"
    Then I should see "Thank you!"
     And there should be 2 podcast donation records

裸のwebrat_steps.rbファイルを使用している場合、次のエラーが発生します。

Could not find field: "Escape Pod" (Webrat::NotFoundError)

link_to()これは、「脱出ポッド」を実際のWebサイトへのハイパーリンクにするために使用している方法によるものだと確信しています。link_toしかし、Cucumberのステップから簡単にアクセスすることはできません。また、ステップで大量のハイパーリンクコードをまとめる以外に、Webratを右のチェックボックスに向ける合理的な方法を理解できません(非常に脆弱になります)

この時点で私のBDDは停止しています。テストが難しいという理由だけでリンクを削除したくありません。そして、それはテストするのが難しいことではないように感じます。Webratは、checks()メソッドに渡すことができるものを制限しているだけです。誰かがこれに対するエレガントな答えを提案できますか?

4

2 に答える 2

2

簡単な答えは、field_by_xpathまたは他のWebrat :: Locatersメソッドの1つを使用して、ステップで操作する要素を選択することです。

When(/^I check the "(.+?)" podcast$/) do |name|
  check(field_by_xpath("//label/a[.=#{name}]")
end

そのxpathを少し試すか、代わりに使用する必要があるかもしれませんfield_by_id。データベースからのIDではなく、タグのhtmlIDを取得していることを確認してください。

于 2009-09-25T00:43:00.483 に答える
0

問題のあるチェックボックスの近くのレンダリングされたページにHTMLがどのように表示されるかを投稿できますか?時々あなたはフィールドに名前を付けることで遊ぶ必要があります...私はログインフォームであらゆる種類の問題を抱えていました...私はこれをすることになりました:

<%= submit_tag 'Enter', {:id => "login_button"} %>

以下が機能するように:

Given /^I am logged in as admin$/ do
    visit login_path
    fill_in "login", :with => "admin"
    fill_in "password", :with => "password"
#    click_button "login_button"
    click_button
end

チェックボックスの例ではないことは知っていますが、名前/IDなどをいじるとうまくいくかもしれません

于 2010-08-08T17:32:14.433 に答える