javascript - 无法单击表格单元格以打开记录
问题描述
我正在尝试动态单击一行中的单元格,即我传递单元格中存在的文本并尝试单击它。
以下是我的代码:
await element.all(by.xpath('//div/table/tbody/tr')).then(rows => {
rows.find(row => {
return row.all(by.tagName('td')).filter(async elem => {
await elem.getText().then(text => {
return text === cellValue;
});
});
}).click();
});
我希望这段代码可以为我解决问题,但事实并非如此。我避免使用那些旧的 for 循环,然后一一比较,然后单击假设这些功能要好得多。
上面的代码总是点击第一行,不进去
return row.all(by.tagName('td')).filter(async elem => {
也没有抛出错误。知道我在这里想念什么。
更新- 以下对我有用。
const rows = await element.all(by.xpath('//table/div/table/tbody/tr'));
for (const row of rows) {
const columns = await row.all(by.tagName('td'));
const actualCellValue = await columns[columnIndex].getText();
console.log(':::cell text:: ' + await columns[columnIndex].getText());
if (actualCellValue === cellValue) {
clickWhenAvailable(columns[columnIndex]);
break;
}
}
}
示例 HTML 表格单元格 -
<td _ngcontent-c30="" class="mat-cell cdk-column-Company mat-column-Company ng-star-inserted" mat-cell="" role="gridcell"> VAX - ABC </td>
解决方案
更新的答案
基本上你的代码失败了,因为你的第一个发现是返回包含单元格的行而不是单元格元素本身。这可能就是为什么点击似乎总是在第一个单元格中。
有关更多详细信息,这里有许多问题,因此我们可以按顺序查看它们。你不应该使用await
with .then
。这两行都用于解决承诺,因此这两行是等价的
await element(by.css('button')).getText().then(btnText=> {
console.log(btnText);
})
--- Is the same as (but below is much easier to read) ---
let btnText = await element(by.css('button')).getText();
console.log(btnText)
接下来,您将在表中找到所有tr
元素,并调用.find
包含行元素的 elementArray。.find
找到原始数组中的一个元素,在您的情况下这些元素都是行元素,看来您正在期待一个单元格值。
看来您根本不需要担心行,因此您可以尝试以下操作
await element(by.xpath('//div/table/tbody/tr//td[text()=cellValue]').click();
推荐阅读
- javascript - 切换按钮无法正确删除类
- ruby-on-rails - 如何处理 Rails 中 gems 发出的网络请求中呈现 json 错误?
- angular - Angular5 TestBed useValue 似乎没有注入相同的对象实例
- testing - Katalon Studio:将多个关键字映射到一个
- reactjs - 访问本地主机上的反应应用程序时,Testcafe 在 chrome 中运行测试时抛出错误
- docker - Gitlab 运行器和 git+ssh 依赖项
- c# - 使用 Management.Smo 在 C# 中创建 SQL FOREIGN KEY 约束时出错
- javascript - 让 Highcharts 上的 plotBand 跨越第一列
- node.js - 如何检查nodejs中的标题?
- c++ - 从父亲到孩子的动态转换