量角器 - 从 getText() 中获取文本

Protractor - getting the text out of getText()

我试图弄清楚如何在以下情况下获取 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] 件。

如何获取这些名称的文本以在 expect 中使用?我已经看到测试通过,其他一切都按预期进行。它做了正确的事情,点击了正确的链接,等等。我可以从错误消息中看出它甚至在 newElement 中得到了正确的结果。它只是没有意识到,因为我无法获得合适的文本进行比较。我在这里看到了几个类似的问题,但我不太明白如何在这里应用这些答案。

选项 1:使用异步/等待

您应该尽可能使用 async / await。您需要将标志 SELENIUM_PROMISE_MANAGER 设置为 false 以禁用默认控制流:

它('some description', async() => { 让 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:嵌套承诺

我通常告诉人们将您的承诺嵌套在 then 块中以解决 getText 或者您可以将它们放在承诺数组中然后执行 promise.all。

没有promise.all

  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);
      });
    });
  });