2011-05-23 52 views
1

我有類似如下的表:Selenium RC如何處理動態行?

零件編號                  價格          狀態
第1部分#    $ 1.0 0     OK
第二零件編號    $ 2.00     停產
第N零件編號      $ N.00     重新排序

我的java代碼將查找「Nth Part#」的狀態,我不知道表有多大,有多少列,並且不知道N是什麼(直到運行時)。在Ruby/WATIR中,我將使用表的id來獲取它的HTML,然後使用Ruby對行進行迭代,直到part#匹配,然後在Status列中檢查該行的相應狀態(無論哪列可能是,但它設置在高清頭的行中)。

Selenium的標準查表函數selenium.getTable(「table.1.2」)僅適用於每個測試包含相同內容的靜態表。過度使用selenium.get_html_source是一種浪費,因爲硒知道如何找到表,然後我必須解析整個網頁。

關於如何獲取表的html的任何想法,以及什麼是遍歷行和/或列的最佳方式?

在此先感謝。

回答

0

不完全是你要求的,但我解決了類似的問題,通過分配唯一的ID(在你的情況下聽起來像部件號)是tr的HTML ID。然後,我使用Selenium xpath定位器獲取我測試所需的行和列。

+0

謝謝,衛斯理。我想我按照自己想要的方式工作。使用xpath似乎是避免基於異常計數的方法,但xpath並不完全是我稱之爲編程語言的東西。我現在正在瀏覽w3schools教程。猜猜這是在工作中學習。 :-) – 2011-05-23 19:26:09

1

做的是使用getTable這樣

selenium.getTable("table." + (1 + n) + ".3") 

得到了n個行的「狀態」單元格,如果你知道n會在運行時什麼最容易的事情。

如果你想遍歷所有在表中的行,你可以做這樣的事情

try { 
    for(int n = 1; true; n++) { 
     String cellContents = selenium.getTable("table." + n + ".3"); 
     //do something with n 
    } 
} 
catch { 
    //handle end of table 
} 

,或者

final int rowCount = (int)selenium.getXPathCount("id('table')/tbody/tr"); 
for(int n = 1; n < rowCount; n++) { 
    String cellContents = selenium.getTable("table." + n + ".3"); 
} 

請記住,在getTable(locator.row.column)rowcolumn從1開始。

+0

謝謝!這種工作。一些注意事項: – 2011-05-23 18:16:29

+0

@Tihamer Toth-Feijel什麼具體的,我可以嘗試幫助你? – 2011-05-23 18:21:21

+0

雖然有一些注意事項。在表達式中:selenium.getTable(「table。」+ n +「.3」); 的「表格」。是表格的ID;如果它沒有ID,或者你不知道它,那麼它將不起作用。會怎樣?其次,使用異常失敗來計算行(和列)似乎相當......如果。 看來,getXpathCount()應該得到它,但我有一個非常困難的時間。以下終於研究出: INT行= selenium.getXpathCount( 「//表[@ ID = 'MYTABLE'] // TR」)的intValue(); 列= selenium.getXpathCount( 「//表[@ ID = 'MYTABLE'] // TR [2] // TD」)的intValue(); – 2011-05-23 19:23:20