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

时间:2018-05-09 19:18:44

标签: protractor angular-promise

我正在尝试弄清楚如何在以下场景中获取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 :(得分:2)

选项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或者你可以把它们放在一个promise数组上然后做一个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);
      });
    });
  });
相关问题