簡體   English   中英

Watir Webdriver:迭代表並將其內容存儲在數組中

[英]Watir Webdriver : Iterating table and storing its content in an array

我正在嘗試自動使網站上顯示的一個區塊並通過CMS表比較其內容。 問題是我設法使出現在UI上的塊自動化,但是當我以admin身份登錄並嘗試使用迭代方法將表的內容保存在數組中時,我無法做到這一點。

<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

問題是腳本成功運行,但是即使我設置了迭代,腳本也只能讀取第一個元素並顯示文本,而不能轉到第二個第三個...等等。

賈斯汀(Justin)使用ruby的內置方法遍歷集合,朝着正確的方向前進。 但是請考慮一下,如果我正確地閱讀了您的代碼,您知道您在特定鏈接的文本之后,那么為什么只可以收集一組匹配的鏈接來遍歷行呢?

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

有內置的方法可以遍歷行/列。 嘗試這個:

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)

找到了解決我問題的方法

代替行{},我使用了tds {},即我將代碼更改為

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

它的工作如我所願。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM