Registro de la consola del transportador


Quiero generar el texto de un div en mi prueba de transportador, hasta ahora tengo:

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

Pero esto produce

[object Object]

He intentado "toString()" y el mismo resultado.

¿Hay alguna forma de enviar el texto a la consola?

Author: bmw0128, 2013-11-13

4 answers

getText y la mayoría de los otros métodos de transportador devuelven promesas. Quieres poner tu declaración console.log dentro de la resolución promise:

Usando la nueva sintaxis del Transportador:

element(by.id('view-container')).getText().then(function(text) {
  console.log(text);
});
 97
Author: Jmr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-12 23:25:20

Esto es bastante antiguo, pero como antiguo n00b en protractor, desearía que hubiera más documentación.

También puedes usar:

element(by.id('view-container')).getText().then(console.log);

O lo que me gusta hacer para la legibilidad es poner todos los objetos en una página en su propia función, sección o archivo:

//top declaration of variables
var viewContainer = element(by.id('view-container')).getText();

.... //bunch of code
....

viewContainer.then(console.log);

Que se encargará de la mayoría de sus necesidades de depuración de jardín-variedad.

Para las promesas en general, puedes intentar usar protractor.promise.all()

Digamos que tienes dos cosas que son ambas promesas:

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
});

Esto el segundo método es útil para cuando las cosas comienzan a volverse más complejas. personalmente, sin embargo, encuentro otras formas de evitarlo. Aunque no es malo, es un poco funky para otros desarrolladores que tienen que leer mi código.

 32
Author: Zach Folwick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-12 13:22:30

Me gustaría sugerir una pequeña mejora a otras respuestas.

Respuesta corta : Me gusta usar browser.sleep(0).then(..); donde necesito empujar algo al flujo del transportador.

Es genérico y fácil de mover.

Tl; dr

Así que usando lo anterior, puede agregar fácilmente una función en el navegador (o ptor) algo como:

browser.log = function( logger, level, msg ){
     browser.sleep(0).then(function(){ logger[level](msg); });
}

O algo un poco más sofisticado con apply - pero eso depende de su registrador.

Obviamente se puede mejorar que un poco para tener logger como api

var logger = browser.getLogger('name');

Debe implementarse como (supongamos 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'), ... }
}

Básicamente, el cielo es el límite.

Estoy seguro de que hay una manera de hacer mi código mucho más corto, el punto es usar el método sleep como base.

 5
Author: guy mograbi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-05 15:10:17

Siempre puedes afirmar que el texto que obtienes es el texto que esperas:

expect(element(by.id('view-container')).getText()).toBe('desired-text');

 2
Author: Vlad Alexa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-25 15:54:46