量角器:element.getText() 返回一个对象而不是 String

IT技术 javascript testing protractor
2021-02-12 01:13:00

我有一个元素定义为

this.clientRowName = element(by.id('CLIENT_NAME')); //page object file

我想阅读这个元素中的文本,它是“ABC”,但正在做: var client = page.clientRowName.getText();

返回一个对象而不是一个字符串。有没有其他方法可以获取元素的文本

4个回答

getText()返回一个 promise,你需要解决它:

page.clientRowName.getText().then(function (text) {
    console.log(text);
});

或者,如果您只想断言文本,让我们expect()为您解决Promise:

expect(page.clientRowName.getText()).toEqual("ABC");

Promises 和 Control Flow文档页面应该可以解决问题。

如果您使用 Chai 期望,它有一个.eventually方法来解析Promise并从其中获取值。 expect(page.clientRowName.getText()).to.eventually.equal("ABC")
2021-03-26 01:13:00
大家好,我可以在 toEqual() 或 toBe() 中使用 getText 函数吗?像这样:expect(element.getText()).toEqual(element2.getText())
2021-04-06 01:13:00

另一种解决方案可能是使用async/await.

class Page {
  constructor() {
    this.clientRowName = $('#CLIENT_NAME');
  }
}

/****************/

it('should console.log client name', async () => {
  const client = await Page.clientRowName.getText();
  console.log(client);
});

我通常用 element.getAttribute('value')

.getAttribute('value')可能不起作用。哟也可以试试.getAttribute('textContent').getAttribute('innerText')
2021-03-31 01:13:00

如果你在 2021 年,你会想要阅读这个答案

根据量角器文档,.getText()返回一个Promise。

到 2021 年,处理 Promise 的最佳方法是使用 async/await 关键字。这将使量角器“冻结”并等待,直到在运行下一个命令之前解决Promise

it('test case 1', async () => {
  let text = await page.clientRowName.getText();
  console.log(text);
})

.then()也可以使用,但使用async/await将使您的代码更具可读性和更易于调试。