如何使用Protractor获取表格中Ernst对应的Code字段数据
获取表格中含Ernst的公司对应Code的Protractor实现方案
首先,先把你提供的HTML表格转换成更易读的Markdown格式:
| Company | Contact | Code |
|---|---|---|
| Alfreds Futterkiste | Maria Anders | THK-ASA-AKK |
| Centro comercial Moctezuma | Francisco Chang | KAL-ASA-AKK |
| Ernst Handel | Roland Mendel | MAK-ASA-AAKS |
| Island Trading | Helen Bennett | ABC-ASA-AKK |
| Laughing Bacchus Winecellars | Yoshi Tannamuri | BSA-ASA-AKK |
| Ernst Alimentari Riuniti | Giovanni Rovelli | KAL-ASA-AKK |
你的代码问题分析
你当前的脚本没输出内容,主要有两个问题:
- 拼写错误:
elment应该是element——这个小笔误会导致代码逻辑直接中断 - 逻辑偏差:
by.cssContainingText('td','Ernst')定位到的是包含"Ernst"的<td>单元格本身,而不是它所在的整行。你后续尝试找这个单元格下的td:nth-child(3),但这个单元格是该行的第一个子元素,它内部根本没有第3个<td>,自然拿不到内容。
可行的解决方法
我们需要先定位到包含Ernst的公司所在的行,再从每行中提取第3列的Code。这里给你几种实用的实现方式:
方法一:从目标单元格向上找父行
// 找到所有包含"Ernst"的公司单元格 element.all(by.cssContainingText('td', 'Ernst')).each(function(companyCell) { // 通过XPath获取当前单元格所在行的第3个td companyCell.element(by.xpath('../td[3]')).getText().then(function(code) { console.log('匹配到的Code:', code); }); });
这里的../td[3]表示“当前元素的父元素(也就是<tr>)下的第3个<td>”,能精准定位到每行的Code列。
方法二:直接定位符合条件的整行
// 用XPath直接筛选出第一列含"Ernst"的行 element.all(by.xpath('//tr[td[1][contains(text(), "Ernst")]]')).each(function(row) { // 从行中提取第3个td的文本 row.element(by.css('td:nth-child(3)')).getText().then(function(code) { console.log('匹配到的Code:', code); }); });
这个XPath的逻辑很清晰:找到所有<tr>,其中第一个<td>的文本包含"Ernst",再从这些行里取第3列内容。
高效批量获取的方式
如果需要把所有结果收集到数组里(而不是逐个打印),可以用更高效的写法:
// 直接定位所有符合条件的Code单元格,批量获取文本 element.all(by.xpath('//tr[td[1][contains(text(), "Ernst")]]/td[3]')).getText().then(function(allCodes) { console.log('所有符合条件的Code:', allCodes); // 输出: ["MAK-ASA-AAKS", "KAL-ASA-AKK"] });
这种方式只需要一次定位操作,性能更好,也方便后续对结果做处理。
内容的提问来源于stack exchange,提问作者demouser123
相关产品推荐
相关产品推荐

