2016-07-12 72 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