假设我有一个这样的表
<h2>HTML Table</h2>
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Code</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>THK-ASA-AKK</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>KAL-ASA-AKK</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>MAK-ASA-AAKS</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>ABC-ASA-AKK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>BSA-ASA-AKK</td>
</tr>
<tr>
<td>Ernst Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>KAL-ASA-AKK</td>
</tr>
</table>
我需要找到Ernst的Code头的内容 - 数量为两个。如何使用Protractor实现这一目标。
我目前正在尝试使用以下代码
找到该元素element.all(by.cssContainingText('td','Ernst')).elment(by.css('td:nth-child(3)')).getText().then(function(code){
console.log(code)});
但是,脚本运行时没有任何问题,但文本未打印。怎么办呢。
答案 0 :(得分:2)
因此我们需要遍历每个表行并使用过滤器函数。 filter函数将允许我们返回ElementArrayFinder对象,该对象是满足条件的行的集合。我们试图满足的条件是特定的表数据文本包含文本'Ernst'。
因此,从tr
开始,我们需要获取该表行中的tds
集合。我们将从包含文本'Ernst'的第一列的文本返回承诺的布尔值。如果是这样,我们会将其添加到ElementArrayFinder对象。
let ernstTrs = element.all(by.tagName('tr')).filter(tr => {
tds = tr.all(by.tagName('td'));
return tds.get(0).getText().then(text => {
return text.includes('Ernst');
});
});
获得ernstTrs
后,我们可以获得第一个获取ElementFinder对象的元素。我们将进行相同的搜索以获取td
的集合。获取索引2处的第3列,我们将从中获取文本并将其打印到控制台。
let ernstTr = ernstTrs.get(0); // get an ElementFinder from the ElementArrayFinder
let ernstTds = ernstTr.all(by.tagName('td'));
let ernstTdCode = ernstTds.get(2);
// let's output the ernst code in column 2:
ernstTdCode.getText().then(text => {
console.log(text);
});
快乐的量角器!