Подтвердить что ты не робот

Журнал консолей

Я хочу вывести текст div в мой тест-протранс, пока у меня есть:

console.log(ptor.findElement(protractor.By.id('view-container')).getText());

но это выводит

[object Object]

Я попробовал "toString()" и тот же результат.

Есть ли способ вывода текста на консоль?

4b9b3361

Ответ 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());