使用node.js在带有Selenium的HTML表上进行迭代



我是Selenium的新手,正在尝试迭代一组表行,以查找第一个单元格中的时间(例如08:00(,然后填充相邻的4个单元格。

我找到了使用以下内容的表,但它告诉我forEach是未定义的。

driver.findElement(By.xpath("//body/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/table[1]/tbody/tr"))
.then(function (rows) {
forEach(rows=> {

});       
})

这就是表格结构。

<table class="deliveries" id="deliveries">
<tbody>
<tr>
<th colspan="5">Location: //dynamically added</th>
</tr>
<tr>
<td class="time">
<font>08:00</font>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td class="time">
<font>09:00</font>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td class="time">
<font>10:00</font>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td class="time">
<font>11:00</font>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td class="time">
<font>12:00</font>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

关于如何到达"时间"单元格附近的单元格,有什么建议吗?

像这样全面的Xpath非常精细/很少工作。我知道它是自动发送给你的代码firefox/edge/athing,但selenium看到的html不同,你的xpath非常依赖html。网站上的一个变化就会打破它们。你应该不惜一切代价避开他们

您需要熟悉更高级的xpath功能。

在这种情况下,最好先使用元素名称,然后使用包含的文本。

"//font[contains(.,'08:00')]")

我已经在firefox上测试过了,它可以在代码笔上工作。我试过你的,但什么也没给我。

看看这个来测试你最喜欢的浏览器的Xpath表达式。如何使用Firefox Web Developer插件验证XPath?

大家好,谢谢你们的两份意见。

作为Selenium的新手,我还没有发现executeScript函数,但我想我现在可以实现我想要的了。下面展示了我在表行上迭代的解决方案——从那里开始,它应该是相当直接的(尽管我还没有尝试(。

再次感谢您抽出时间做出回应。

var IterateRows = function (rows) {
//iterate and populate row cells - return true if successful or false if error condition
return true
}

var el = driver.findElements(By.xpath("//table[1]/tbody/tr"))

driver.executeScript(IterateRows, el).then(function (returnValue) {
console.log("Return Value of IterateRows -> " + returnValue);
});

最新更新