【问题标题】:Watir Webdriver : Iterating table and storing its content in an arrayWatir Webdriver:迭代表并将其内容存储在数组中
【发布时间】:2012-06-11 09:10:12
【问题描述】:

我正在尝试自动化出现在网站上的块并通过 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

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

【问题讨论】:

    标签: ruby automation watir watir-webdriver


    【解决方案1】:

    Justin 正朝着正确的方向前进,他使用 ruby​​ 的内置方法来迭代集合。但是考虑一下,如果我没看错你的代码,你知道你是在特定链接的文本之后,那么当你可以创建一个匹配链接的集合时,为什么要遍历行呢?

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

    【讨论】:

      【解决方案2】:

      有内置的方法可以遍历行/列。试试这个:

      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)
      

      【讨论】:

      • @JustinKo - 如何检测没有 id、class 等的表?它仅包含在 标记中?谢谢。
      • @stack1,你可以做很多事情。这真的取决于上下文。看看我正在进行的书,Watirways 以获得一些想法。最后,如果 HTML 中没有标识符,请考虑用户如何知道要查看哪个表。至少您应该能够使用这些标识符。除此之外,我建议使用页面的 HTML 打开一个新问题。
      【解决方案3】:

      找到解决我问题的方法

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

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

      它按我的意愿工作..

      【讨论】:

        猜你喜欢
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 2020-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        相关资源
        最近更新 更多