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?
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);
});
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.
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.
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');
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