Javascript 量角器如何测试最后一项';上榜

Javascript 量角器如何测试最后一项';上榜,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,在我的应用程序中,我有一个项目列表,我可以向其中添加新项目,我可以检查列表是否有新项目,现在我想测试新项目是否具有“nuovo”类,这是我的测试用例: it("should add an item to the address list with class 'nuovo'",function(){ ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function(arr) {

在我的应用程序中,我有一个项目列表,我可以向其中添加新项目,我可以检查列表是否有新项目,现在我想测试新项目是否具有“nuovo”类,这是我的测试用例:

    it("should add an item to the address list with class 'nuovo'",function(){
    ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function(arr) {
      expect(arr.length).toEqual(2);
        var initial_length = arr.length;
      // set values to  new address
      ptor.findElement(protractor.By.model('street')).sendKeys('via');
      ptor.findElement(protractor.By.model('city')).sendKeys('G');
      ptor.findElement(protractor.By.model('number')).sendKeys('xx');
      ptor.findElement(protractor.By.model('use')).sendKeys('n');
        element(by.id('addAddressButton')).click();

        //check one address more
        ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function(arr) {

            expect(arr.length).toEqual(initial_length+1);
            var inserted_item = element(arr[arr.length-1]) //get the last element, the just inserted one
            //console.log(inserted_item);
            var lastRow = element(by.repeater('a in customer.LIVES_IN').last);
            expect(lastRow).toHaveClass('nuovo');
        })
});

})
it("should add an item to the address list with class 'nuovo'", function () {
  ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function (arr) {
    expect(arr.length).toEqual(2);
    var initial_length = arr.length;
    // set values to  new address
    ptor.findElement(protractor.By.model('street')).sendKeys('via');
    ptor.findElement(protractor.By.model('city')).sendKeys('G');
    ptor.findElement(protractor.By.model('number')).sendKeys('');
    ptor.findElement(protractor.By.model('use')).sendKeys('');
    element(by.id('addAddressButton')).click();

    //check one address more
    ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function (arr) {

      expect(arr.length).toEqual(initial_length + 1);
      var inserted_item = element(arr[arr.length - 1]) //get the last element, the just inserted one
      //console.log(inserted_item);
      var lastRow = arr[2];
      var attributes = '';
      //console.log(
      arr[2].getAttribute('className').then(function (o) {
        // console.log('then');
        //console.log(o)
        attributes = o;
        //console.log(attributes);
        var pos = attributes.indexOf('nuovo'); // if != -1 nuovo is in the attribute's list
        //console.log(attributes.indexOf('nuovo'));
        expect(pos != -1).toBe(true);
      });

    });
  });
});
我得到这个错误:

    Failures:

  1) E2E: main page should add an item to the address list with class 'nuovo'
   Message:
     TypeError: Object [object Object] has no method 'toHaveClass'
   Stacktrace:
     Error
    at null.<anonymous> (/home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:19:1)
    at Object.<anonymous> (/home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:2:1)
At async task:
      TypeError: Object [object Object] has no method 'toHaveClass'
    at /home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:38:29
==== async task ====
WebDriver.call(function)
    at Object.findElementsOverride (/home/arpho/Projects/neo4Scrum/node_modules/protractor/lib/locators.js:273:21)
    at Protractor.findElements (/home/arpho/Projects/neo4Scrum/node_modules/protractor/lib/protractor.js:765:21)
    at /home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:31:14
==== async task ====
asynchronous test function

Finished in 20.703 seconds
故障:
1) E2E:主页应向地址列表中添加一个类为“nuovo”的项目
信息:
TypeError:对象[Object]没有方法“toHaveClass”
堆栈跟踪:
错误
在空。(/home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:19:1)
反对。(/home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:2:1)
异步任务时:
TypeError:对象[Object]没有方法“toHaveClass”
at/home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:38:29
==异步任务====
WebDriver.call(函数)
在Object.findelementsoferride(/home/arpho/Projects/neo4Scrum/node_modules/dragrator/lib/locators.js:273:21)
位于gragrator.findElements(/home/arpho/Projects/neo4Scrum/node_modules/gragrator/lib/gragrator.js:765:21)
at/home/arpho/Projects/neo4Scrum/test/e2e/addAddress_spec.js:31:14
==异步任务====
异步测试函数
以20.703秒完成

我会这样做:

expect(lastRow.getAttribute('className')).toMatch('nuovo');

我做了一些肮脏的事情,但现在我的测试似乎奏效了: 这是我的新测试用例:

    it("should add an item to the address list with class 'nuovo'",function(){
    ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function(arr) {
      expect(arr.length).toEqual(2);
        var initial_length = arr.length;
      // set values to  new address
      ptor.findElement(protractor.By.model('street')).sendKeys('via');
      ptor.findElement(protractor.By.model('city')).sendKeys('G');
      ptor.findElement(protractor.By.model('number')).sendKeys('xx');
      ptor.findElement(protractor.By.model('use')).sendKeys('n');
        element(by.id('addAddressButton')).click();

        //check one address more
        ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function(arr) {

            expect(arr.length).toEqual(initial_length+1);
            var inserted_item = element(arr[arr.length-1]) //get the last element, the just inserted one
            //console.log(inserted_item);
            var lastRow = element(by.repeater('a in customer.LIVES_IN').last);
            expect(lastRow).toHaveClass('nuovo');
        })
});

})
it("should add an item to the address list with class 'nuovo'", function () {
  ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function (arr) {
    expect(arr.length).toEqual(2);
    var initial_length = arr.length;
    // set values to  new address
    ptor.findElement(protractor.By.model('street')).sendKeys('via');
    ptor.findElement(protractor.By.model('city')).sendKeys('G');
    ptor.findElement(protractor.By.model('number')).sendKeys('');
    ptor.findElement(protractor.By.model('use')).sendKeys('');
    element(by.id('addAddressButton')).click();

    //check one address more
    ptor.findElements(protractor.By.repeater('a in customer.LIVES_IN')).then(function (arr) {

      expect(arr.length).toEqual(initial_length + 1);
      var inserted_item = element(arr[arr.length - 1]) //get the last element, the just inserted one
      //console.log(inserted_item);
      var lastRow = arr[2];
      var attributes = '';
      //console.log(
      arr[2].getAttribute('className').then(function (o) {
        // console.log('then');
        //console.log(o)
        attributes = o;
        //console.log(attributes);
        var pos = attributes.indexOf('nuovo'); // if != -1 nuovo is in the attribute's list
        //console.log(attributes.indexOf('nuovo'));
        expect(pos != -1).toBe(true);
      });

    });
  });
});

谢谢,现在我得到了以下信息:TypeError:无法读取Undefine的属性'findElementsOverride',我认为我的错误是我将expect放在了外部,因此它无法工作,因为它是异步的。这是有道理的;)如果现在问题解决了,你应该接受答案。如果你考虑你原来的问题,如果你认为它更完整,就如你所愿。