2015-04-07 47 views
5

我一直在爲我的角度js應用程序編寫e2e測試,我無法弄清楚這一點。我有一張包含數據的表格。我想提取第一行數據。量角器:閱讀表格內容

<table> 
    <tr> 
     <td><\td> 
     <td><\td> 
     <td><\td> 
    </tr> 
</table> 

我這樣做的量角器elementExplorer和它打印出所有3列中的值

element.all(by.repeater('item in items.list')).get(0).getText() 
James 
Byrne 
1 

如果我這樣做,它打印出的第一列值

element.all(by.repeater('item in items.list')).get(0).element(by.css('td')).getText() 
WARNING - more than one element found for locator By.cssSelector("td") - the first result will be used 
James 

我問題是,我如何獲得其他列的值?

+0

你有沒有考慮給每列添加一個'name',然後使用'by.name()'獲取第一行(from .get(0)')之後的特定列? – Aaron

回答

6

使用all()結合map()

var row = element.all(by.repeater('item in items.list')).first(); 
var cells = row.all(by.tagName('td')); 

var cellTexts = cells.map(function (elm) { 
    return elm.getText(); 
}); 

然後,您可以斷言它是列文的數組:

expect(cellTexts).toEqual(["The first text", "The second text", "The third text"]); 
+0

感謝alexcxe。這工作。我如何獲取cellTexts的單個元素。例如,我想提取「第二個文本」。此外,「第三個文本」恰好是我想要點擊的按鈕的文本。 – JDunn

+0

@JDunn你可以使用'get()':'expect(cellTexts.get(1))。toEqual(「第二個文本」);'。如果您需要在第三個td:'cells.get(2).element(by.tagName(「button」))。click();'中找到該按鈕。希望能幫助到你。 – alecxe

+0

我得到一個失敗:undefined不是一個函數cellTexts.get(1),按鈕點擊部分運作良好,雖然 – JDunn

5

最簡單的方法是如下:

var tabledata = element.all(by.css("./table")); 

// get rows 
var rows = tabledata.all(by.tagName("tr")); 

// get cell values 
var cells = rows.all(by.tagName("td")); 

expect(cells.get(0).getText()).toEqual("something") 
expect(cells.get(1).getText()).toEqual("something") 
expect(cells.get(2).getText()).toEqual("something") 

我實現了它,它爲我工作。