在量角器中,如何检查 table 单元格是否包含特定文本?

In protractor, how do I check if a table cell contains particular text?

我正在尝试使用带有量角器 5.4.3 的 Selenium webdriver manager v 12.1.7 调试 e2e 测试。我想看看我的页面上是否存在 table 单元格,其中包含特定文本。我正在尝试以下

const elements = await element.all(by.css(cellSelector));
console.log("cell selector:" + cellSelector);
for (const elem of elements) {
  console.log("elem:" + elem.getAttribute('innerHTML'));
  console.log("comparing " + elem.innerHTML + " with " + cellValue);
  if (elem.innerHTML === cellValue) {
    return true;

然而,即使我可以看到循环重复,

的值
elem.getAttribute('innerHTML')

总是返回为

[object Object]

的价值
elem.innerHTML

返回为

undefined

查看 table 单元格是否包含特定文本的正确方法是什么?

那是因为elem.getAttribute('innerHTML')returns答应。 returns 承诺需要解决的所有事情。

一种方法是 .then 语法,请参见下面的示例,然后将其从您的记忆中删除并且永远不要使用 :)

elem.getAttribute('innerHTML').then(result => console.log(result))

另一种被证明至少好 1000 倍的方法是 async/await

let result = await elem.getAttribute('innerHTML');
console.log(result);

但是当您使用 await 时,您需要将包装函数声明为异步的。你很可能想做这样的事情

describe(`describe`, () => {
    it('it block', async () => { // <-------------- see this async?
        let result = await elem.getAttribute('innerHTML');
        console.log(result);
    });
});

PS

您的 elem.innerHTML 不起作用的原因是您将其视为 webElement,而这是没有 属性 innerHTML 的 ElementFinder,因此是 undefined

如果您仍然想这样做,可以将此代码注入浏览器的控制台,其中所有元素都可以作为 webElements

let text = await browser.executeScript('return arguments[0].innerHTML', elem.getWebElement());
console.log(text)

但你还是要兑现承诺