2012-06-07 53 views
3

我試圖自動化出現在網站上的塊,並通過CMS表比較其內容。 問題是我設法自動化出現在用戶界面上的塊,但是當我以管理員身份登錄並嘗試使用迭代將數據表中的內容保存到數組中時,我無法執行此操作。Watir Webdriver:迭代表並將其內容存儲在數組中

<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 

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

回答

6

賈斯汀是正確的方向與使用ruby的內置方法迭代集合。但請考慮一下,如果我正確地閱讀代碼,您知道自己是來自特定鏈接的文本,那麼爲什麼只需製作一組匹配鏈接就可以遍歷行?

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

謝謝賈斯汀高! – NewTester

+0

@JustinKo - 我如何檢測沒有ID,類等的表?它僅包含在

標籤中?謝謝。 – stack1

+1

@ stack1,你可以做很多事情。這真的取決於上下文。看看我的進行中的書,[Watirways](https://leanpub.com/watirways)的一些想法。最終,如果HTML中沒有標識符,請考慮用戶如何知道要查看哪個表。至少你應該能夠使用這些標識符。除此之外,我會建議用頁面的HTML開啓一個新的問題。 –

0

找到了解決我的問題

不是行{}我用TDS {} 即我改變了代碼

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

它的工作,我想它的以..

相關問題