Javascript 如何在intern中打破元素循环

Javascript 如何在intern中打破元素循环,javascript,selenium,selenium-webdriver,intern,Javascript,Selenium,Selenium Webdriver,Intern,假设我有以下DOM结构 <table id="campaigns"> <tr> <th>Name</th> <th>Status</th> </tr> <tr> <td>first data</td> </tr> <tr data-id="1"> <td>inter

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


感谢您提供的任何帮助

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

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

返回所有
tr
元素,其文本在id为
活动的表中包含
intern test


使用索引,如
0,1,2
来匹配包含
内部测试的
第一、第二和第三个
元素

无需遍历所有元素来查找包含文本“intern test”的第一个元素

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

返回所有
tr
元素,其文本在id为
活动的表中包含
intern test


使用索引,如
0,1,2
来匹配
第一、第二和第三个
元素,这些元素包含
实习测试

我不确定我是否理解您的问题。你能重新措辞吗?要单击的元素是多个还是多个<代码>承诺。所有
将等待所有承诺得到解决,从而让它运行。如果您只想等待一个问题得到解决,请查看
Promise.race()
。感谢您的回复。我只想单击满足if语句的第一个元素,而不是它找到的第一个元素。Promise.race不会满足if语句,因为它将使用第一个元素。我不确定我是否理解您的问题。你能重新措辞吗?要单击的元素是多个还是多个<代码>承诺。所有
将等待所有承诺得到解决,从而让它运行。如果您只想等待一个问题得到解决,请查看
Promise.race()
。感谢您的回复。我只想单击满足if语句的第一个元素,而不是它找到的第一个元素。Promise.race不会满足if语句,因为它将使用第一个元素感谢您的响应。但我的要求是单击tr元素,而不是td元素,您所建议的xpath将无助于满足该要求编辑我的答案。请试一试。刚刚添加“/…”以获得家长,即“tr”谢谢。这对我有帮助。需要在XPath上刷我的技能谢谢你的回复。但我的要求是单击tr元素,而不是td元素,您所建议的xpath将无助于满足该要求编辑我的答案。请试一试。刚刚添加“/…”以获得家长,即“tr”谢谢。这对我有帮助。需要提高我的xpath技能吗
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;
                    })
            }))
         })
//table[@id='campaigns']/tbody/tr/td[contains(text(),'intern test')]/..