2016-09-13 4 views
1

저는 Java + WebDriver 배경이며 각도기, WebdriverJS 및 Jasmine을 사용합니다. 표시된 이미지에서 마우스를 모든 거품 위에 올려 놓고 도구 팁 값 (city, sold, connected)을 가져 와서 객체로 배열에 할당하고 호출 함수에 반환하려고합니다. 누구든지이 상황에서 객체의 배열을 만드는 방법을 알려주시겠습니까? 내 사양 파일에서 주장하려고 해요.각도기/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들 넣어 한 방법

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

완벽하게 작동했습니다. 나는 당신의 솔루션에서 많은 새로운 것을 배웠다. 고마워. –