ruby - test - Watir Webdriver: tabla iterativa y almacenamiento de su contenido en una matriz
watir installation (3)
Estoy tratando de automatizar un bloque que aparece en el sitio web y comparar su contenido a través de la tabla CMS. El problema es que he logrado automatizar el bloqueo que aparece en la interfaz de usuario, pero cuando inicio sesión como administrador y trato de guardar el contenido de la tabla en una matriz utilizando la iteración, allí donde no puedo hacerlo.
<table id="nodequeue-dragdrop" class="nodequeue-dragdrop sticky-enabled tabledrag-processed sticky-table">
<thead class="tableHeader-processed">
<tbody>
<tr class="draggable odd">
<td>
<a class="tabledrag-handle" href="#" title="Drag to re-order">
<a href="/car-news/moscow/new-text-1">New Text 1</a>
</td>
<td>
<td>2012-06-06 10:24</td>
<td style="display: none;">
<td>
<td>
<td class="position">1</td>
</tr>
<tr class="draggable even">
<td>
<a class="tabledrag-handle" href="#" title="Drag to re-order">
<a href="/car-news/new-cars/text-2">Text 2 </a>
</td>
<td>
<td>2012-06-06 10:29</td>
<td style="display: none;">
<td>
<td>
<td class="position">2</td>
</tr>
<tr class="draggable odd">
<td>
<a class="tabledrag-handle" href="#" title="Drag to re-order">
<a href="/car-news/new-cars/this-is-text-3">This is Text 3</a>
</td>
<td>
<td>2012-06-05 12:55</td>
<td style="display: none;">
<td>
<td>
<td class="position">3</td>
</tr>
El código que estoy usando es
@text = Array.new
x = 1
y = 0
until x == 10
y = x -1
until y == x
@text[y] = @browser.table(:id,''nodequeue-dragdrop'').tbody.row{x}.cell{1}.link(:href =>/car-news/).text
puts @text[y]
y=y+1
end
x=x+1
end
El problema es que las secuencias de comandos se ejecutan con éxito, pero a pesar de que he establecido una iteración, la secuencia de comandos solo lee el primer elemento y lo muestra, y no pasa a los elementos de la 2ª 3ª ... etcétera.
Justin se dirige en la dirección correcta con los métodos integrados de ruby para iterar sobre las colecciones. Pero considere esto: si estoy leyendo su código correctamente, sabe que está buscando el texto de enlaces específicos, entonces ¿por qué iterar sobre las filas cuando podría hacer una colección de enlaces iguales?
link_text_array = Array.new
@browser.table(:id,''nodequeue-dragdrop'').links(:href => /car-news/) do |link|
link_text_array << link.text
end
Encontré la solución a mi problema
en lugar de filas {} utilicé tds {}, es decir, cambié el código a
@text[y] = @browser.table(:id,''nodequeue-dragdrop'').tbody.tds{x}.cell{1}.link(:href =>/car-news/).text
Funciona como yo quiero ...
Hay métodos integrados para iterar sobre las filas / columnas. Prueba esto:
table_array = Array.new
table = @browser.table(:id,''nodequeue-dragdrop'')
table.rows.each do |row|
row_array = Array.new
row.cells.each do |cell|
row_array << cell.text
end
table_array << row_array
end
puts table_array # This will be an array (row) of arrays (column)