退出循环

时间:2015-12-07 14:57:44

标签: angularjs for-loop selenium-webdriver protractor

我需要在测试中比较两个数组。我正在测试一个过滤器,它读入一组数字并保存到spareArray。然后,我单击一个过滤器按钮,该按钮也是列表中列出的元素style。我再次读入列表并将其保存到第二个数组spareIntArray。在读取之后,我将数组发送到两个方法,一个解析字符串浮动,第二个方法得到' - '在我的列表中,我不想比较。但是,在spareIntArray中运行第二个for循环读数后,数组将设置为undefined。我通过做一个日志来测试数组是否填充了元素,它似乎是。我很困惑这里发生了什么。



/**
 * Created by nphillips on 8/11/2015.
 */

var helper = require('./../pages/helper-page.js');
var capacityPage = module.exports = {

  variables: {
    //the theaterStyle element list
    theaterStyle: element.all(by.css("[data-style='theater']")),
  },

  readsInTheater: function() {
    capacityPage.readsIn(capacityPage.variables.theaterStyle);
  },

  removesDashes: function(style, array) {
    while (array.indexOf('-') !== -1) {
      array.splice(array.indexOf('-'), 1);
    };
    console.log(array + "count ");
    return array;
  },

  readsIn: function(style) {
    var spareArray = [];
    var spareIntArray = [];
    style.count().then(function(count) {
      console.log(count);
      j = 0;
      for (var i = 0; i < count; i++) {
        //scrolls down the list element by element
        browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());
        style.get(i).getText().then(function(text) {
          spareArray[j] = text;
          console.log(text, spareArray[j], j);
          expect(text).toEqual(spareArray[j++]);
        });
      }
    }).then(function() {
      // style.click()
      browser.executeScript("arguments[0].scrollIntoView();", style.get(0).getWebElement());
      style.count().then(function(count) {
        console.log(count);
        for (var i = 0; i < count; i++) {
          //scrolls down the list element by element
          browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());
          style.get(i).getText().then(function(text) {
            spareIntArray[j] = text;
            console.log(text, spareIntArray[j], j + "frawer");
            expect(text).toEqual(spareIntArray[j++]);
          });
        };

      });
      spareArray = capacityPage.stringToFloatArray(spareArray);
      spareIntArray = capacityPage.stringToFloatArray(spareIntArray);
      capacityPage.removesDashes(style, spareArray);
      capacityPage.removesDashes(style, spareIntArray);
      expect(spareArray).toEqual(spareIntArray);
    });
  },

  stringToFloatArray: function(array) {
    function int_arr(a, b) {
      return parseFloat(a) - parseFloat(b);
    }

    array = array.sort(int_arr);
    console.log(array + "float");
    return array;
  },


};
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

spareIntArray未定义吗?这可能是因为你在备用之前在spareIntArray上调用stringToFloatArray。我认为你的支票应该在promise回调中。但是我有点担心你在文档上使用异步数据检索的原因。有没有办法以同步的方式做到这一点?像

这样的东西
style.count().then(function(count) {
  console.log(count);

  for (var i = 0; i < count; i++) {
    //scrolls down the list element by element
    browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());

    var text = style.get(i).getText();
    spareArray.push(text);
    console.log(text, spareArray[i], i);
    expect(text).toEqual(spareArray[i]);
    });
  }
}).then(function() {
  // style.click()
  browser.executeScript("arguments[0].scrollIntoView();", style.get(0).getWebElement());
  style.count().then(function(count) {
    console.log(count);
    for (var i = 0; i < count; i++) {
      //scrolls down the list element by element
      browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());

      var text = style.get(i);
      spareIntArray.push(text);
      console.log(text, spareIntArray[i], i + "frawer");
      expect(text).toEqual(spareIntArray[i]);
    };

  spareArray = capacityPage.stringToFloatArray(spareArray);
  spareIntArray = capacityPage.stringToFloatArray(spareIntArray);
  capacityPage.removesDashes(style, spareArray);
  capacityPage.removesDashes(style, spareIntArray);
  expect(spareArray).toEqual(spareIntArray);
  });
});

},