【发布时间】:2016-12-09 07:49:16
【问题描述】:
假设我有以下 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 test”的文本。 这段代码看起来不错,但发生的情况是,当实习生已经单击 if 语句中的第一个元素时,下一个元素似乎也会执行单击并使元素失效。 当它找到第一个元素时,如何停止这个循环并继续?
感谢您提供的任何帮助
【问题讨论】:
-
我不确定我是否理解您的问题。你能改写一下吗?是否有几个元素要单击或多个?
Promise.all将等到所有的承诺都得到解决,然后让它运行。如果您只想等到 one 解决,请查看Promise.race()。 -
感谢您的回复。我只想单击满足 if 语句的第一个元素,而不是它找到的第一个元素。 Promise.race 将不满足 if 语句,因为它将采用第一个元素
标签: javascript selenium selenium-webdriver intern