在watir中找到标签的直接子节点

时间:2011-08-30 06:53:55

标签: watir watir-webdriver

我有一个包含多个列的表,其中数据从数据库中填充。列可以包含下拉菜单,文本字段,复选框以及简单文本。我需要写下一个函数,它基本上会返回表列中的数据。

以下是关于如何在网页中命名标记的示例。 [w3schools为表格的CSS提供的信用]。

<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. 将具有class =或substring的行的no确定为“data-row”。
  2. 构造用于获取单元格的字符串并将其从0迭代到n-1
  3. 使用文本方法检索文本
  4. 现在,如果我在select_list上使用它,它将返回列表中的所有选项。因此,我将检查标记的子项是文本字段还是下拉列表 列出并调用各自的函数来获取它们的值。

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

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

1 个答案:

答案 0 :(得分: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