for循环不适用于量角器

时间:2018-05-30 07:18:15

标签: javascript for-loop protractor

我已使用以下for循环点击 td 的第5个索引中的图标,如果 td的第2个索引 包含预期的文本(作为外部参数传递)。

我将行元素设为 tenantRowElements 并编写以下代码。

达到了结果,即单击了预期的按钮,但仍然面临以下错误,并且它没有进入下一个方法。

Error Image

  

陈旧元素引用:元素未附加到页面文档    错误。

this.clickEditOfTenant=function(userobj) {
    console.log("Edit of tenant is clicked");
    basePage.waitForElement(this.tenantRowElements, 5000);

    this.tenantRowElements.then(function (tenants) {
        console.log("element length : " + tenants.length);
        for (var i = 0; i < tenants.length; i++) {
            tenants[i].$$('td').then(function (tds) {
                tds[1].getText().then(function (text) {
                    return text;
                }).then(function (name) {
                    console.log("tenant name : " + name + "; given name :" + userobj.tname);
                    if (name === userobj.tname) {
                        tds[5].click();
                    }
                });
            });
        }
    }).then(function () {
        if(basePage.isVisible(updateTenant.tenantNameTxtBox))
        {console.log("Edit button is clicked");}

    });
};

2 个答案:

答案 0 :(得分:1)

我编辑如下,现在正在工作

this.clickEditOfTenant = function(userobj) {
    console.log("call clickEditOfTenant()");
    basePage.waitForElement(this.tenantRowElements, 10000);

    //browser.sleep(15000);
    this.tenantRowElements.filter(function (tr) {
        return tr.all(by.css('td')).get(1).getText().then(function (name) {
            return name === userobj.tname;
        });
    }).then(function (eles) {
        eles[0].$$('td').then(function (btn) {
            //console.log(text);
            btn[5].click();
        }).then(function () {
            browser.sleep(5000);
            if (basePage.isVisible(updateTenant.tenantNameTxtBox)) {
                console.log("Edit button is clicked");
            }
        });
    });
};

答案 1 :(得分:0)

我怀疑basePage.waitForElement(this.tenantRowElements, 5000);不足以等待页面完全加载。所以你在第一次循环迭代中遇到了这个问题,

browser.sleep(15000)之后添加basePage.waitForElement(this.tenantRowElements, 5000);以进行调试。

您可以使用filter()来简化代码:

this.clickEditOfTenant = function(userobj) {

  console.log("call clickEditOfTenant()");

  // basePage.waitForElement(this.tenantRowElements, 5000);

  browser.sleep(15000)

  this.tenantRowElements.filter(function(tr) {
    return tr.all(by.css('td')).get(1).getText().then(function(name) {
      return name === userobj.tname;
    });
  })
  .then(function(eles) {
    if(eles.length > 0) {
      eles[0].click();
    }
  })
  .then(function () {
    if(basePage.isVisible(updateTenant.tenantNameTxtBox)) {
      console.log("Edit button is clicked");
    }
  });
};