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

Ruby 在某些条件下迭代表并替换单元格文本,ruby,watir-webdriver,Ruby,Watir Webdriver,我的标记中有这样一个表: <table class="wowClassTable"> <tbody> <tr> <td>Race</td> <td>Faction</td> <td>Link</td> </tr> <tr> <td>Human</td> <td>Allianc

我的标记中有这样一个表:

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

如果猜测这与我如何检查单元格是否有一个名为“查看”的链接有关,但我不确定此时该如何更正问题。

好的,我有一个答案,它似乎不是非常不雅观

下面是我最后做的:

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

我觉得不错!我不知道这是否是最好的方法,但它似乎确实有效。

我个人将使用更实用的方法,稍微清理一下代码

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

希望我能帮上忙。

种族、派系和链接应该是
而不是
?然后,您可以快速检查以确保您正在处理
,然后将每个元素单独推入数组。从良好的web设计角度来看,毫无疑问,初始行应该是
th
元素。虽然我的示例内容是假的,但该表是基于我公司大多数表的构造方式。但是,目前我可以毫无问题地获取所有
td
元素。(我的第一个迭代器完全按照我的要求填充数组。)只是当我在给定行的第三个
td
元素上时,我需要获取链接的
href
文本,然后返回该文本,就好像它是单元格文本而不是单元格中实际存在的文本“查看”文本一样。你帮了大忙!这是一段非常优雅的代码。我很感谢你在这里补充这一点。我当然计划使用你的方法。
[["Race", "Faction", "Link"], "http://www.wowwiki.com/Human_(playable)", "http://www.wowwiki.com/Dwarf_(playable)", "http://www.wowwiki.com/Night_elf_(playable)"]]
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)"]]
rows.map do |row|
  row.cells.map do |cell|
    cell.a(text: 'View').exists? ?  cell.a(text: 'View').href : cell.text
  end
end