2016-07-12 109 views
0

我正在努力尋找解決方案。迭代列陣水豚黃瓜

我正在訪問網頁上的表格。應用特定過濾器後,每行中的一個數據項必須包含某個值。

我試着從表數據中創建一個數組,使每一行都有自己的索引。

一旦我有了索引,我想在這一行範圍內找到我以後的特定值。

到目前爲止,我有以下幾點:

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| 
    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 

使用或不使用內

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不等待行出現,所以如果這是與一個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

Hi @Tom Walpole,我嘗試了兩種解決方案,結果都一樣。 RSpec :: Expectations :: ExpectationNotMetError:期望在「」 – Tom

+0

@Tom中找到文本「TEXT」@Tom然後文本不存在 - 發佈您正在嘗試搜索的實際HTML –

+0

使用puts row.text時,它顯示整行文本和我之後的特定文本都包含在內。只是當我們試圖擴大範圍時,它就會失敗。這是put row.text'A123ABC Ferrari 48 SORN Renew 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會有所作爲的唯一原因是如果你的行查詢匹配沒有預期內容的行中的行。在這種情況下,它意味着將tbody添加到第一行,正確地過濾了行,並且內部循環變成了'expect(row.all('td')[3])to have_text TEXT' –

+0

這樣好多了!如果你想添加它作爲答案,我會接受它。謝謝 – Tom