петля не работает в транспортире - PullRequest
0 голосов
/ 30 мая 2018

Я использовал приведенный ниже цикл для щелчка по значку в 5-м индексе td , если 2-й индекс td содержит текст (который передается как внешний параметр), как и ожидалось.

Я получаю элементы строки как 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 голосов
/ 31 мая 2018

я отредактировал, как показано ниже, и теперь он работает

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");
            }
        });
    });
};
0 голосов
/ 30 мая 2018

Я подозреваю, что 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");
    }
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...