如何打破实习生中的元素循环

How do I break a loop of elements in intern

假设我有以下 DOM 结构

<table id="campaigns">
   <tr>
      <th>Name</th>
      <th>Status</th>
   </tr>
   <tr>
      <td>first data</td>
   </tr>
   <tr data-id="1">
      <td>intern test at Fri, 09 Dec 2016 03:12:26 GMT</td>
   </tr>
   <tr data-id="2">
      <td>intern test at Fri, 09 Dec 2016 03:12:26 GMT</td>
   </tr>
   <tr data-id="3">
      <td>intern test at Fri, 09 Dec 2016 03:12:26 GMT edit</td>
   </tr>
   <tr data-id="4">
      <td>another data</td>
   </tr>
   <tr data-id="5">
      <td>next data</td>
   </tr>
</table>

这就是我在实习期间的做法

this.remote
     .findAllByXpath("//*[@id='campaigns']/tr"") //  get allitem from list
        .then(function (options) {
            return Promise.all(options.map(function (option) {
                return option.getVisibleText()
                    .then(function (text) {
                        if (text.includes("intern test")) {  //   checked whether the value is exist
                             option.click(); // click the value
                        }
                         return text;
                    })
            }))
         })

我的要求只是单击一个包含“实习生测试”的文本。 这段代码看起来不错,但实际情况是,当 intern 已经单击 if 语句中的第一个元素时,下一个元素似乎也将执行单击并使该元素失效。 当它找到第一个元素时,如何停止此循环并继续?

感谢您提供的任何帮助

无需遍历所有元素即可找到第一个包含文本的元素"intern test"

使用 findAllByXpath 尝试以下 XPath(我不知道 Javascript - selenium,因此,如果需要请更正语法):

//table[@id='campaigns']/tbody/tr/td[contains(text(),'intern test')]/..

returns 所有 tr 元素的文本包含 intern test 在 table 内,id 为 campaigns.

使用索引,例如 0, 1, 2 来匹配包含 intern test

first, second and third 个元素