2011-11-21 40 views
4

我使用的Watir自動化測試檢索文本,我需要在一個變量複製率的值。在下面的示例中(來自網頁源代碼),我需要該變量myrate具有值2.595。我知道如何從<input><span>(見下面)檢索價值,但不是直接從<td>檢索。任何幫助?由於使用的Watir

<TABLE> 
<TR> 
    <TD></TD> 
    <TD>Rate</TD> 
    <TD>2.595</TD> 
</TR> 
</TABLE> 

對於<span>我用這個代碼:

raRetrieved = browser.span(:name => 'myForm.raNumber').text 
+1

發佈實際樣本HTML從你的頁面,而不是一些通用的,我們可以更好地看到您面臨的實際挑戰,因此會讓您獲得更好的答案。 –

回答

8

試試這個,找到你想要使用正則表達式匹配包含單詞「費率」一排排,然後得到第三個單元格的文本在行中。

myrate = browser.tr(:text, /Rate/).td(:index => 2).text 
#or you can use the more user-friendly aliases for those tags 
myrate = browser.row(:text, /Rate/).cell(:index => 2).text 

如果單詞「費率」可能會在其他別的地方出現textin該表,但永遠只是你想要的行的第二個單元格的唯一入口,然後找到那個確切的文本的單元格,使用父方法來定位包含該單元格的行,然後從第三個單元格中獲取文本。

myrate = browser.cell(:text, 'Rate').parent.cell(:index => 2).text 

使用.cell & .row VS .td & .tr是你的,有些人喜歡的標籤,有些人喜歡更具描述性的名稱。使用任何您感覺使代碼對您或其他將使用它的人來說可讀性最高的代碼。

注:上面的代碼假定使用的Watir-webdriver的,或的Watir 2.x的其中兩個採用基於零索引。對於舊版本的Watir的,改變索引值3

並記錄在案我完全對缺乏您發佈的代碼示例的可測試性的人的意見一致。這很可怕。要求找到合適的元素(如ID值或名稱)不會使頁面更易於測試。

3

試試這個:

browser.td(how, what).text 

在這裏的問題是,tabletrtd標籤沒有任何屬性。你可以嘗試這樣的事情(未測試):

browser.table[0][2].text 
+0

謝謝!問題在於表格可能會變化很大,包括行的順序。是否有可能得到某種方式的「速率」​​(本文從不改變)的索引,然後請求下一​​(2.595)的文本,並將其存儲在變量? – Arturo

+4

@Arturo您可能有更高級別的問題;與開發人員交談,或與老闆交談或與客戶交談(或者如果您獨自與自己談談),讓前端更具可測性,並檢查您在脆弱自動化腳本中的投資。對於一個體面的項目,在一兩個月內,你將會進入代碼維護地獄。您可以使用browser.span(:text =>'Rate',:index => X)找到它,然後使用.parent作爲該行,然後使用該行的索引(除非該行發生更改)。哦,或者用正則表達式將它從行文本中解析出來。無論如何,一些想法。 – kinofrost

+1

@kinofrost同意這兩個計數。我剛纔發佈的答案涵蓋了一些想法(正則表達式可以通過文本查找,如果最簡單的方法是使用父方法找到具有特定文本的單元格)。 –

1

如果這有助於誰是有同樣的問題,任何人,這是爲我工作是這樣的:

browser.td(:text => "Rate").parent.cell(:index, 2).text 

謝謝大家