2017-10-06 2 views
0

私はspec.tsファイル内itブロックに次のコードを使用する場合:分裂器は2つの連続した行で参照されているときに要素を見つけられないのはなぜですか?

Project 

Expected '' to equal 'Project'. 
Expected :"Project" 
Actual :"" 

これでいくつかの所見:

element(by.css(".header-text")).getText().then(function(text) { 
     console.log(text); 
    }); 
    expect(element(by.css(".header-text")).getText()).toEqual("Project"); 

を私は次は私のコンソールに出力され得ます。

  • console.logでコードの最初の "行"を削除すると、expectが期待通りに機能します。
  • マシンを起動した後にこのコードを実行すると、最初の2-3回の実行が行われます。分度器が新しいブラウザを起動するたびに(私は思っていて観察しているように見えます)、何らかのタイプのキャッシュが行われるべきではないので、これは変です。
  • これは、私が実際にプログラミングから期待していない "測定値、値の変化"の動作のいくつかのタイプのようですが、私はJavascript/Angular/Protractorを初めて使用しています。起こる何かであり、あなたはこのように行動するという部族の知識を持たなければなりません。

これはプロジェクトが破られるわけではないので、私は自分のテストが私が望むように働いています。私はこの現象がなぜ起こるのかについて説明したいと思います。

答えて

1

あなたはすでに約束を解決しているので、同時に使用することができます。

element(by.css(".header-text")).getText() 
    .then(function(text) { 
     console.log(text); 
     expect(text).toEqual("Project"); 
    }); 

expect方法は約束を解決することになっていますが、すでにそれを持っている場合、なぜ二度尋ねています。

あなたのアプリケーションの中でAngularが仕事をしているように見えるものは何でもありますが、その後タイトルが変更されます - 人口が入る前にタイトルを取得しているように見えるので、一部では競合状態を示唆するケース

+0

同時に使用することについて全面的に合意しました。 console.logは私が前に行ったデバッグのステップの多くでした。私はちょうどそれが実行されたときに応じて動作を変更するように見えるという奇妙な動作を発見しました。したがって、質問を明確にすると、最初のgetTextはページがロードされた後に評価されますが(コード実行時に行に達したときに約束されます)、ページがロードされる前に2番目のgetTextが実行されますが、まだコード順ですか? 2番目のものの後にconsole.logが最初に評価されますが、最初にコードオーダーのbcが出力されますか? –

関連する問題