Watir Webdriver:迭代表并将其内容存储在数组中

时间:2012-06-07 10:07:34

标签: ruby automation watir watir-webdriver

我正在尝试自动化出现在网站上的块并通过CMS表比较其内容。 问题是我已经设法自动化出现在UI上的块,但是当我以管理员身份登录并尝试使用迭代将表中的内容保存在数组中时我无法执行此操作。

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

我使用的代码是

@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

问题是脚本运行成功但是即使我设置了一个迭代,脚本只读取第一个元素并显示它的文本,而不是转到第二个第三个......依此类推。

3 个答案:

答案 0 :(得分:6)

Justin正朝着正确的方向前进,使用ruby的内置方法来迭代集合。但请考虑一下,如果我正确地阅读您的代码,您知道您正在使用特定链接的文本,那么为什么在您可以创建匹配链接的集合时迭代这些行呢?

link_text_array = Array.new
@browser.table(:id,'nodequeue-dragdrop').links(:href => /car-news/) do |link|
  link_text_array << link.text
end

答案 1 :(得分:4)

有内置的方法来迭代行/列。试试这个:

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)

答案 2 :(得分:0)

找到我的问题的解决方案

而不是行{}我使用了tds {}  即我将代码更改为

@text[y] = @browser.table(:id,'nodequeue-dragdrop').tbody.tds{x}.cell{1}.link(:href =>/car-news/).text

它按照我的意愿工作..