在量角器中,如何检查 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)
但你还是要兑现承诺
我正在尝试使用带有量角器 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)
但你还是要兑现承诺