2016-07-12 9 views
0

私はこれに対する解決策を見つけるのに苦労しています。アレイを繰り返します。カピバラキュウリ

私はウェブページ上の表にアクセスしています。特定のフィルタを適用した後、各行の1つのデータ項目には特定の値が含まれている必要があります。

テーブルデータから配列を作成しようとしましたが、各行にインデックスがあります。

インデックスを取得したら、この行のスコープを設定して、後に特定の値を見つける必要があります。

はこれまでのところ、私は次のことを持っている:

results_table = all('table#clickable-rows tr') 

    results_table.each do |row| 


    within(results_table[row]) do 
     table_data = all('table#clickable-rows td') 
      expect(table_data[3]).to have_text TEXT 
     end 
    end 
    end 

それは私が苦労してるの繰り返しです。誰にもこれに対する解決策がありますか?ここで間違っ

おかげ

答えて

1

物事のカップル - あなたはresults_table行の繰り返しを開始した後、実際の行要素(行のない指標)であるので、あなたは再びresults_tableにインデックスを付けるべきではありません。また、within(element)を呼び出すと、すべてのCSS検索がその要素に相対的になりますので、元のテーブルに埋め込まれたテーブルを検索しない限り、テーブルを再度検索する必要はありません。おそらく

results_table = all('table#clickable-rows tbody tr') 
results_table.each do |row| 
    table_data = row.all('td') 
    expect(table_data[3]).to have_text TEXT 
end 

内ここで注意すべき重要な点は、行が表示されるようにするために、デフォルトallでそう、待っていないということである何かもっとのような

results_table = all('table#clickable-rows tbody tr') 
results_table.each do |row| 
    within(row) do 
    table_data = all('td') # you could also just find the third one with nth-child if you only want that one column 
    expect(table_data[3]).to have_text TEXT 
    end 
end 

エンド

または使用せずにしたいですこれがJS対応ドライバで実行されている場合は、おそらく何かを使用したいと思うでしょう。

results_table = all('table#clickable-rows tbody tr', minimum: 1) #you can adjust minimum if you need to wait for more rows to be on the page 

テーブルの行が実際にページに表示されていることを確認する

+0

こんにちは@Tom Walpole、私は両方のソリューションを試して、両方の場合に同じ結果を得ました。 RSpec :: Expectations :: ExpectationNotMetError: ""でテキスト "TEXT"を検索すると予想されます – Tom

+0

@Tom次にテキストがありません - 検索しようとしている実際のHTMLを投稿します –

+0

puts row.textを使用すると、行全体のテキストと、後に特定のテキストが含まれています。それがスコープをとろうとするときだけです。失敗します。これはputs row.text 'A123ABC Ferrari 48 SORN更新2005年11月28日の出力です。フィルタ条件として' SORN 'を含めるにはすべての行が必要です。 – Tom

0

私はここのコミュニティの助けを借りて解決策に導かれました。

私のresults_tabletable_dataの変数にtbodyを含める必要があります。これを追加すると、目的のコンテンツを見つけることができました。

results_table = all('table#clickable-rows tbody tr') 
    results_table.each do |row| 
     within(row) do 
     table_data = all('table#clickable-rows tbody tr td') 
      expect(table_data[3]).to have_text TEXT 
    end 
    end 
end 
+0

tbodyを含む唯一の理由は、あなたの行のクエリが予想されるコンテンツを持たないtheadの行と一致していた場合に違いがあります。その場合は、最初の行にtbodyを追加し、行を正しくフィルタリングし、内部ループを 'expect(row.all( 'td')[3])にすることを意味します。to_text TEXT' –

+0

これははるかに優れています!答えとして追加したい場合は、私はそれを受け入れます。ありがとうございました – Tom

関連する問題