Журнал консолей
Я хочу вывести текст div в мой тест-протранс, пока у меня есть:
console.log(ptor.findElement(protractor.By.id('view-container')).getText());
но это выводит
[object Object]
Я попробовал "toString()" и тот же результат.
Есть ли способ вывода текста на консоль?
Ответы
Ответ 1
getText
, и большинство других методов Трантрактор возвращают promises. Вы хотите поместить свой оператор console.log
в разрешение обещания:
Использование нового синтаксиса Protractor:
element(by.id('view-container')).getText().then(function(text) {
console.log(text);
});
Ответ 2
Это довольно старый, но, как бывший n00b у транспортира, я хотел, чтобы было больше документации.
вы также можете использовать:
element(by.id('view-container')).getText().then(console.log);
или то, что мне нравится делать для удобства чтения, помещает все объекты на странице в их собственную функцию, раздел или файл:
//top declaration of variables
var viewContainer = element(by.id('view-container')).getText();
.... //bunch of code
....
viewContainer.then(console.log);
Это позаботится о большинстве ваших отладочных потребностей в саду.
Для promises в общем случае вы можете попробовать использовать protractor.promise.all()
скажем, у вас есть две вещи, которые являются как promises:
var getTime = element(by.xpath(theTimeXpath)).getText();
var getPageTitle = element(by.xpath(thePageTitle)).getInnerHtml();
protractor.promise.all([getTime, getPageTitle]).then(function(theResultArray){
var timeText = result[0];
var pageTitleInnerHtml = result[1];
console.log(timeText); // outputs the actual text
console.log(pageTitleInnerHtml); //outputs the text of the Inner html
});
Этот второй метод полезен, когда вещи начинают усложняться. лично, однако, я нахожу другие способы обойти это. Хотя это неплохо, это вроде напугано для других разработчиков, которые должны прочитать мой код.
Ответ 3
Я хотел бы предложить небольшое улучшение для других ответов.
короткий ответ. Мне нравится использовать browser.sleep(0).then(..);
, где мне нужно толкать что-то к потоку транспортировщика.
он является общим и легко перемещается.
TL;DR
поэтому, используя вышеизложенное, вы можете легко добавить функцию в браузере (или ptor), например:
browser.log = function( logger, level, msg ){
browser.sleep(0).then(function(){ logger[level](msg); });
}
или что-то более сложное с apply
- но это зависит от вашего регистратора.
вы, очевидно, можете улучшить это, чтобы иметь регистратор, подобный api
var logger = browser.getLogger('name');
должен быть реализован как (позволяет предположить log4js)
browser.getLogger = function( name ){
var logger = require('log4js').getLogger(name);
function logMe( level ) {
return function(msg ){
browser.sleep(0).then(function(){ logger[level](msg); });
}
}
return { info : logMe('info'), ... }
}
в основном, небо - предел.
Я уверен, что есть способ сделать мой код намного короче, точка использует метод sleep
в качестве основы.
Ответ 4
Вы всегда можете утверждать, что текст, который вы получаете, является текстом, который вы ожидаете:
expect(element(by.id('view-container')).getText()).toBe('desired-text');
Ответ 5
Вы можете попробовать это:
const textInfo = element(by.id('view-container'));
console.log('text: ', textInfo.getText());