在某些条件下迭代表并替换单元格文本

时间:2014-07-06 13:17:02

标签: ruby watir-webdriver

我的标记中有这样的表格:

<table class="wowClassTable">
  <tbody>
  <tr>
    <td>Race</td>
    <td>Faction</td>
    <td>Link</td>
  </tr>
  <tr>
    <td>Human</td>
    <td>Alliance</td>
    <td><a href="http://www.wowwiki.com/Human_(playable)">View</a></td>
  </tr>
  <tr>
    <td>Dwarf</td>
    <td>Alliance</td>
    <td><a href="http://www.wowwiki.com/Dwarf_(playable)">View</a></td>
  </tr>
  <tr>
    <td>Night Elf</td>
    <td>Alliance</td>
    <td><a href="http://www.wowwiki.com/Night_elf_(playable)">View</a></td>
  </tr>
  </tbody>
</table>

我想要做的是迭代表,返回以下数组:

[["Race", "Faction", "Link"], ["Human", "Alliance", "View"], ["Dwarf", "Alliance", "View"], ["Night Elf", "Alliance", "View"]]

但是我希望数组的第三个元素具有&#34; View&#34;文本替换为实际链接。所以首先迭代表并获取数组我做了这个:

race_table_array = Array.new

rows.each do |row|
  race_array = Array.new
  row.cells.each do |cell|
    race_array << cell.text
  end
  race_table_array << race_array
end

puts race_table_array.inspect

这让我得到阵列。所以我试着替换文本,在这里我不知所措。我知道我需要引用单元格中的link元素。所以我将上面的row.cells迭代器更改为:

row.cells.each do |cell|
  if cell.a(text: 'View').exists?
    race_array << cell.a(:href)
  else
    race_array << cell.text
  end
end

我的想法是,我会引用嵌套的&#39; a&#39;单元格内的(链接)元素(这是一个TableCell对象)。我会通过文字&#39;查看&#39;找到该元素。有了这个,我就会使用href。这给了一个工作的印象,但正在取代我的整个阵列,所以我最终得到这个:

[["Race", "Faction", "Link"], "http://www.wowwiki.com/Human_(playable)", "http://www.wowwiki.com/Dwarf_(playable)", "http://www.wowwiki.com/Night_elf_(playable)"]]

如果猜测这与我如何检查该单元格是否有名为&#39; View&#39;的链接有关。但我现在还不确定如何纠正这个问题。

2 个答案:

答案 0 :(得分:2)

就个人而言,我将采用更多功能方法并稍微清理一下代码。

rows.map do |row|
  row.cells.map do |cell|
    cell.a(text: 'View').exists? ?  cell.a(text: 'View').href : cell.text
  end
end

希望我帮助过。

答案 1 :(得分:0)

好的,所以我有一个答案,它似乎是一个非常非常不优雅的答案。

这是我最终做的事情:

rows.each do |row|
  race_array = Array.new
  row.cells.each do |cell|
    if cell.a(text: 'View').exists?
      race_array << cell.a(text: 'View').href
    else
      race_array << cell.text
    end
  end
  race_table_array << race_array
end

不同之处在于(而不是像我原来那样):

race_array << cell.a(:href)

我这样做:

race_array << cell.a(text: 'View').href

这样做是为了得到以下内容:

[["Race", "Faction", "Link"], ["Human", "Alliance", "http://www.wowwiki.com/Human_(playable)"], ["Dwarf", "Alliance", "http://www.wowwiki.com/Dwarf_(playable)"], ["Night Elf", "Alliance", "http://www.wowwiki.com/Night_elf_(playable)"]]

对我来说很好看!我不知道这是否是最好的方法,但它似乎确实有效。