tool test script page guide ruby automation watir watir-webdriver

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)