我是Selinium的新手。有一个表(在另一个表格内),我想点击每个<td>click here</td>
具有匹配的类值(注意开始和结束之间的文本td
将会改变但与匹配目的无关)。我想要匹配的类值是open
。 From here我通过//*[contains(concat(" ", normalize-space(@class), " "), " open ")]
这似乎有效但只适用于一个随机单元格。如何点击全部?我计划首先完成此步骤并重复该步骤,但值得注意的是,脚本也应该对类值available
执行相同的操作,而不仅仅是open
是否可以执行逻辑或?
TL; DR我想用<td class="open">...</td>
点击所有内容
和
<td class="available">...</td>
其中...
是示例文本,但会有所不同,但应予以忽略。
答案 0 :(得分:3)
获取所有元素并将它们存储在List中,然后迭代它们并依次单击按钮。
List<WebElement> list = driver.findElements(By.xpath("//*[contains(concat(" ", normalize-space(@class), " "), " open ")]"));
for(WebElement webelement : list) {
// webelement Click the button here
}
答案 1 :(得分:0)
要获取所有元素,您应该使用driver.FindElements
。确保它使用的是什么,而不是driver.FindElement
?
答案 2 :(得分:0)
请使用以下XPath
:
//td[normalize-space(@class)="open" or normalize-space(@class)="available"]
这应该与<td class=" open ">...</td>
和<td class=" available ">...</td>
匹配
Picked Available
+----------+ +-------+
| item1 | <= | item2 |
| item3 | => | item4 |
+----------+ | item5 |
| ... |
+ ------+
答案 3 :(得分:0)
使用以下方法可能会对您有所帮助 -
List<WebElement> allElements = driver.findElements(By.tagName("td"));
for(WebElement element:allElements)
{
if(element.getAttribute("class").contains("open"))
{
// manipulate with <td> tag data
}
}