2015-04-07 3 views
5

Я писал тесты e2e для своего углового приложения js и не могу понять это. У меня есть таблица с данными. Я хочу извлечь данные первых строк.Транспортир: прочитайте содержимое таблицы

<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

Вы считаете, что каждый столбец является «именем», а затем используется 'by.name()' для захвата определенного столбца после первой строки (из '.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") 

Я реализовал его, и он работает для меня.

Смежные вопросы