2016-09-13 6 views
1

私はJava + WebDriverのバックグラウンドであり、Protractor、WebdriverJS、Jasmineを使用しています。表示された画像では、すべての泡の上にマウスを置いて、ツールチップの値(都市、販売、接続)を取得し、それらをオブジェクトとして配列に割り当て、呼び出し関数に返します。誰もこの状況でオブジェクトの配列を作成する方法を教えてもらえますか?私はspecファイルからそれをアサートしようとしています。分度器/ WebDriverJS要素の値をオブジェクトの配列として返します。

この関数を呼び出したときreturn arr;が残りのコードの前に実行されます。非同期の振る舞いが原因であると考えられます。

this.getSalesVolumeDistribution = function() { 
var arr = []; 
var icons = element.all(by.css('#map-container svg>circle')); 
icons.map(function(elm) { 
     browser.actions().mouseMove(elm).perform(); 
     var toolTipCity = element(by 
      .css('#map-container g.highcharts-tooltip tspan:nth-of-type(2)')); 
     var toolTipUnitsSold = element(by 
      .css('#map-container g.highcharts-tooltip tspan:nth-of-type(3)')); 
     var toolTipUnitsConnceted = element(by 
      .css('#map-container g.highcharts-tooltip tspan:nth-of-type(4)')); 

     toolTipCity.getText().then(function(text) { 
      var cityVal = text.replace('City: ', '').replace(',', ''); 
      console.log(text.replace('City: ', '').replace(',', '')); 
      var soldVal = toolTipUnitsSold.getText().then(function(text) { 
       return text.replace('Units Sold: ', '').replace(',', ''); 
      }); 
      var connVal = toolTipUnitsConnceted.getText().then(function(text) { 
       return text.replace('Units Connected: ', ''); 
      }); 

      arr.push({ 
       city: cityVal, 
       sold: soldVal, 
       conn: connVal 
      }); 

      }); 
    }); 
return arr; 
}; 

enter image description here

+0

ここでは正確には機能しないものはありますか?エラーとは何か/出力の何が問題なのですか? – Danmoreng

+0

私はこの関数を呼び出します。*** return arr; ***はコードの残りの部分より前に実行されます。非同期の振る舞いが原因であると考えられます。 –

答えて

2

あなたはは、オブジェクトの配列に解決する約束だろうmap()の結果を返す必要があります。私はここにreturn Sを入れているか

this.getSalesVolumeDistribution = function() { 
    var icons = element.all(by.css('#map-container svg>circle')); 

    // CHANGE WAS MADE HERE v 
    return icons.map(function(elm) { 
     browser.actions().mouseMove(elm).perform(); 
     var toolTipCity = element(by 
      .css('#map-container g.highcharts-tooltip tspan:nth-of-type(2)')).getText(); 
     var toolTipUnitsSold = element(by 
      .css('#map-container g.highcharts-tooltip tspan:nth-of-type(3)')).getText(); 
     var toolTipUnitsConnceted = element(by 
      .css('#map-container g.highcharts-tooltip tspan:nth-of-type(4)')).getText(); 

     // CHANGE WAS MADE HERE v 
     return protractor.promise.all([toolTipCity, toolTipUnitsSold, toolTipUnitsConnceted]).then(function(tooltips) { 
      var cityVal = tooltips[0].replace('City: ', '').replace(',', ''); 
      var soldVal = tooltips[1].replace('Units Sold: ', '').replace(',', ''); 
      var connVal = tooltips[2].replace('Units Connected: ', ''); 

      // CHANGE WAS MADE HERE v 
      return { 
       city: cityVal, 
       sold: soldVal, 
       conn: connVal 
      }; 
     }); 
    }); 
}; 

注意を(コメント付き)。また、ヒントテキストの複数の約束を解決するのに役立つprotractor.promise.all()に気づくこと。その後

、あなたは、関数の結果を主張expect()にそれを置く必要がある場合 - 例えば、それは暗黙的に約束を解決して、アサーションになるだろう:

expect(myPageObject.getSalesVolumeDistribution()).toEqual([ 
    {city: 'El Paso', sold: '344', conn: '321'}, 
    {city: 'New York', sold: '500', conn: '600'} 
]); 
+0

複数の編集を行い、この時点で編集を完了しました。最新バージョンのコードを試してください。 – alecxe

+0

これは私にとって完璧に機能しました。私はあなたの解決策から多くの新しいことを学びました。どうもありがとう。 –

関連する問題