Javascript 量角器/WebDriverJ将元素值作为对象数组返回

Javascript 量角器/WebDriverJ将元素值作为对象数组返回,javascript,jasmine,promise,protractor,webdriverjs,Javascript,Jasmine,Promise,Protractor,Webdriverjs,我有Java+WebDriver的背景,对量角器、WebdriverJS和Jasmine是新手。在显示的图像中,我试图将鼠标悬停在所有气泡上,获取工具提示值(city、Seld、connected),并将它们作为对象分配给数组,然后将其返回给调用函数。有人能告诉我在这种情况下如何创建对象数组吗?我试图从我的规范文件中断言它 当我调用此函数时,返回arr在代码的其余部分之前运行。似乎这是由于异步行为 this.getSalesVolumeDistribution = function() { va

我有Java+WebDriver的背景,对量角器、WebdriverJS和Jasmine是新手。在显示的图像中,我试图将鼠标悬停在所有气泡上,获取工具提示值(city、Seld、connected),并将它们作为对象分配给数组,然后将其返回给调用函数。有人能告诉我在这种情况下如何创建对象数组吗?我试图从我的规范文件中断言它


当我调用此函数时,返回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;
};

您应该返回一个解析为对象数组的承诺:

注意我是如何将
return
s放在这里的(用注释标记)。请注意有助于解析工具提示文本的多个承诺的
量角器.promise.all()

然后,如果需要断言函数的结果,请将其放入
expect()
-它将隐式解析承诺,然后进行断言,例如:

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

量角器中的映射函数将允许您返回一个值数组:

因此,与其推进阵列,不如执行以下操作: 返回 { 城市:cityVal,, 售出:索尔德瓦尔, 康瓦尔
}

这里到底有什么不起作用?输出有什么错误?当我调用这个函数时,返回arr;在代码的其余部分之前运行。似乎是由于异步行为。此时进行了多次编辑并完成了编辑-确保您正在尝试最新版本的代码。这对我来说非常有效。我从你的解决方案中学到了很多新东西。非常感谢。
expect(myPageObject.getSalesVolumeDistribution()).toEqual([
    {city: 'El Paso', sold: '344', conn: '321'},
    {city: 'New York', sold: '500', conn: '600'}
]);