1

我有一个包含多个列的表,其中数据是从数据库中填充的。这些列可以有下拉列表、文本字段、复选框以及简单的文本。我需要写下一个函数,它本质上将返回表列中存在的数据。

这是一个关于如何在网页中命名标签的示例。[表的 CSS 归功于 w3schools]。

<html>
<head>
<style type="text/css">
#customers
{
font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
width:100%;
border-collapse:collapse;
}
#customers td, #customers th 
{
font-size:1em;
border:1px solid #98bf21;
padding:3px 7px 2px 7px;
}
#customers th 
{
font-size:1.1em;
text-align:left;
padding-top:5px;
padding-bottom:4px;
background-color:#A7C942;
color:#ffffff;
}
#customers tr.alt td 
{
color:#000000;
background-color:#EAF2D3;
}
</style>
</head>

<body>
<table id="customers">
<tr>
  <th>Company</th>
  <th>Contact</th>
  <th>Country</th>
</tr>
<tr class="data-row">
<td id="customers:0:company">Alfreds Futterkiste</td>
<td id="customers:0:contact">Maria Anders</td>
<td id="customers:0:chooseCountry">
<select id="customers:0:country">
<option>Germany</option>
<option>Sweden</option>
<option>Mexico</option>
</select>
</td>
</tr>
<tr class="data-row alt">
<td id="customers:1:company">Berglunds snabbköp</td>
<td id="customers:1:contact">Christina Berglund</td>
<td id="customers:1:chooseCountry">
<select id="customers:1:country">
<option>Germany</option>
<option selected="selected">Sweden</option>
<option>Mexico</option>
</select>
</td>
</tr>
<tr class="data-row">
<td id="customers:2:company">Centro comercial Moctezuma</td>
<td id="customers:2:contact">Francisco Chang</td>
<td id="customers:2:chooseCountry">
<select id="customers:2:country">
<option>Germany</option>
<option>Sweden</option>
<option selected="selected">Mexico</option>
</select>
</td>
</tr>
</table>
</body>
</html>

现在,我用来确定列中所有值的算法说“公司”是

  1. 确定具有类 = 或子字符串的行数为“数据行”。
  2. 构造字符串以获取单元格并将其从 0 迭代到 n-1
  3. 使用 text 方法检索文本

现在,如果我在 select_list 上使用它,它会返回列表中的所有选项。因此,我将检查标记的子项是文本字段还是下拉列表,并调用它们各自的函数来获取它们的值。

有没有一种方法可以在 Watir 中确定特定标签的子标签是否是特定标签,或者是否有类似于 JavaScript 中的 getAllChildNodes 的方法?

很抱歉描述过度,并提前感谢任何可能的解决方案。

4

1 回答 1

4

这很简单,你只需要查看是否存在 text_field 或 select_list 即可:

require 'watir-webdriver'

b = Watir::Browser.start 'yourwebpage'

b.table.rows.each do |row|
  row.cells.each do |cell|
    if cell.text_field.exist?
      puts cell.text_field.value
    elsif cell.select_list.exist?
      puts cell.select_list.selected_options
    else
      puts cell.text
    end
  end
end

b.close
于 2011-08-30T11:03:05.160 回答