Ruby cucumber + capybaraを使用して)BDD Web開発を理解しようとしていますが、テーブルの行数を確認するだけの簡単なタスクで立ち往生しています。私が達成しようとしていることの意図は、次のようなものです:
page.should have_xpath("//table[@id='myTable']")
find("//table[@id='myTable']/tr").length.should == 3
しかし、これは機能せず(メソッドの長さが欠落)、テーブルの長さに対してアサートする方法を見つけることができません。
誰でもどんなアイデアでも(私には簡単にしてください、私はRuby nooby)です)
前もって感謝します
ニール
私はこれで最後に行きました:
Then /^I should see "(.*)" once$/ do |text|
within_table('myTable') do
should have_xpath("//tr", :text => text, :count => 1)
end
end
それは適切にエレガントに見えました。
私は他の答えが機能することを理解していますが、これはよく読んでいるようです。
コメントは?
たとえ have_css?
はトリックを実行します。テストは、いくつかの条件が真であると想定され、それが偽であったと単に言うのではなく、それらがどのように失敗したかを伝える必要があります。これを念頭に置いて、以下の最初の例は2番目の例よりも読みやすくなっています。
# IF FAILED => "expected 10, got 7"
page.all('table#myTable tr').count.should == 10
# IF FAILED => "expected true, got false"
page.should have_css("table#myTable tr", :count=>10)
私はこれを行うことができると思います:
page.should have_css("table#mytable tr", :count=>3)
何らかの理由で「has_css」は機能しませんが、「all(selector)」は本当にうまく機能します
all("table#movies tr").count
メソッド#findは1つの要素のみを返します(複数の一致がある場合、最初の要素を返すと思います)。#findの結果はNodeであるため、#lengthメソッドを取得しません。 =配列ではありません。
これを自分で証明するには、
puts find("//table[@id='myTable']/tr").class
必要なのは#allです。これにより、一致するすべてのノードの配列が返されます。
このようにして、htmlテーブルの行数を知ることができます。
area = find_by_id('#areaID').all('tr').size
テーブルの最初に列があると仮定します。この方法で実際の数に到達できます。
area = area-1