web-dev-qa-db-ja.com

分度器コンソールのログ

分度器テストでdivのテキストを出力したいのですが、これまでのところ:

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

しかし、この出力

[object Object]

「toString()」と同じ結果を試しました。

テキストをコンソールに出力する方法はありますか?

49
bmw0128

getTextおよび他のほとんどのProtractorメソッドはpromiseを返します。 console.log約束解決内のステートメント:

新しい分度器構文の使用:

element(by.id('view-container')).getText().then(function(text) {
  console.log(text);
});
104
Jmr

これはかなり古いですが、分度器の以前の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);
_

これで、ほとんどの園芸品種のデバッグのニーズに対応できます。

一般的な約束については、protractor.promise.all()を使用してみてください。

両方が約束である2つの事柄があるとしましょう:

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

この2番目の方法は、物事がより複雑になり始めるときに役立ちます。個人的には、しかし、私はこれを回避する他の方法を見つけます。悪くはありませんが、私のコードを読まなければならない他の開発者にとってはちょっとファンキーです。

33
Zach Folwick

他の回答を少し改善することを提案したいと思います。

短い答え:分度器のフローに何かをプッシュする必要がある場合、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メソッドをベースとして使用することです。

5
guy mograbi

取得するテキストが期待するテキストであることを常に主張できます。

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

2
Vlad Alexa

これを試すことができます:

const textInfo = element(by.id('view-container'));
console.log('text: ', textInfo.getText());
0
SeanRay