Транспортир - получение текста из getText () - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь выяснить, как получить фактические текстовые значения getText () в следующем сценарии:

var elementNameRow = element.all(by.name('nameRow')).count().then(function(size){
  thisNum = parseInt(Math.random() * (size - 0) + 0);

  thisLast = element.all(by.name('last')).get(thisNum).getText();
  thisFirst = element.all(by.name('first')).get(thisNum).getText();

  console.log(thisLast.resolve());

  var elementNameRowSelect = element.all(by.name('nameRow')).get(thisNum).click();
  var newElement = element(by.tagName('h3'));
  var expectedString = thisFirst + " " + thisLast;
  expect(newElement.getText()).toContain(expectedString);
});

Как вы, вероятно, поняли, expectedString равно паре [Object Object] штук.

Как я могу получить текст этих имен для использования в ожидаемом? Я смотрел, как проходит тест, и все остальное работает как положено. Он делает правильные вещи, щелкает правильные ссылки и т. Д. Из сообщений об ошибках я могу сказать, что в newElement он даже получил нужную вещь. Он просто не осознает этого, так как я не могу найти нужный текст для сравнения. Я видел пару подобных вопросов здесь, но я не могу понять, как применить эти ответы здесь.

1 Ответ

0 голосов
/ 10 мая 2018

Вариант 1: использовать async / await

Вы должны использовать async / await, когда это возможно.Вам нужно будет установить флаг SELENIUM_PROMISE_MANAGER в false, чтобы отключить поток управления по умолчанию:

it ('some description', async () => {let elementNameRow = await element.all (by.name ('nameRow')). count (). then ((size) => {thisNum = parseInt (Math.random () * (size - 0) + 0);

  thisLast = await element.all(by.name('last')).get(thisNum).getText();
  thisFirst = await element.all(by.name('first')).get(thisNum).getText();

  console.log(thisLast + ' ' + thisFirst);

  await element.all(by.name('nameRow')).get(thisNum).click();
  let newElement = element(by.tagName('h3'));
  expect(await newElement.getText()).toContain(thisLast + ' ' + thisFirst);
});

});

Вариант 2: вложенные обещания

Я обычно говорю людям вкладывать ваши обещания в блоки, чтобы разрешить getText ИЛИ вы можете поместить их в массив обещаний и затем выполнить обещание.

Без обещания. Все

  it('some description',() => {
    let elementNameRow = element.all(by.name('nameRow')).count().then((size) => {
      thisNum = parseInt(Math.random() * (size - 0) + 0);

      element.all(by.name('last')).get(thisNum).getText().then(thisLast => {
        return element.all(by.name('first')).get(thisNum).getText().then(thisFirst => {
          return element.all(by.name('nameRow')).get(thisNum).click().then(() => {
            let newElement = element(by.tagName('h3'));
            expect(newElement.getText()).toContain(thisLast + ' ' + thisFirst);
          });
        });
      });
    });
  });

Если вы используете Promise.all:

  it('some description',() => {
    let elementNameRow = element.all(by.name('nameRow')).count().then((size) => {
      thisNum = parseInt(Math.random() * (size - 0) + 0);
      let promises = [];
      let thisFirst = '';
      let thisLast = '';
      promises.push(element.all(by.name('last')).get(thisNum).getText()
          .then(text => { thisLast = text; });
      promises.push(element.all(by.name('first')).get(thisNum).getText()
          .then(text => { thisFirst = text; });
      promises.push(element.all(by.name('nameRow')).get(thisNum).click());
      Promise.all(promises).then(() => {
        // resolve the get text and click on the name row
        let newElement = ;
        expect(element(by.tagName('h3')).getText()).toContain(thisLast + ' ' + thisFirst);
      });
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...