найти прямого потомка тега в watir - PullRequest
1 голос
/ 30 августа 2011

У меня есть таблица, содержащая несколько столбцов, в которых данные заполняются из базы данных.Столбцы могут иметь выпадающие списки, текстовые поля, флажки и простой текст.Мне нужно написать функцию, которая будет по существу возвращать данные, присутствующие в столбце таблицы.

Вот пример того, как теги названы на веб-странице.[Кредиты для 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 = или подстроку как «data-row».
  2. Создайте строку для получения ячейки и перебора ее от 0 до n-1
  3. Используйте текстовый метод дляполучить текст

Теперь, если я использую это в списке выбора, он возвращает все опции в списке.Таким образом, я собирался проверить, является ли дочерний элемент тега текстовым полем или раскрывающимся списком, и вызвать их соответствующие функции, чтобы получить их значения.

Есть ли способ, где в Watir мы можемопределить, является ли дочерний элемент определенного тега определенным тегом или нет, или есть какой-то метод, похожий на getAllChildNodes в JavaScript?

Извините за излишнюю описательность и заранее благодарим за любые возможные решения.

1 Ответ

4 голосов
/ 30 августа 2011

Это очень просто, вам просто нужно посмотреть, существует ли текстовое поле или список выбора:

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