使用量角器获取表数据并进行存储

时间:2018-03-16 10:56:12

标签: javascript selenium-webdriver protractor

假设我有一个这样的表

    <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)});

但是,脚本运行时没有任何问题,但文本未打印。怎么办呢。

1 个答案:

答案 0 :(得分:2)

过滤以查找带有文本

的tr

因此我们需要遍历每个表行并使用过滤器函数。 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');
  });
});

从tr

中查找代码表数据

获得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);
});

快乐的量角器!