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