我的HTML代码如下所示:
<html>
<body>
<div>
</div>
<div>
<table>
<tbody id=a>
<tr>
<td>
<div>
<span>
some Text
</span>
</div>
</td>
</tr>
<tr>
<td>
<div>
<span>
some Text2
</span>
</div>
</td>
</tr>
<tr>
<td>
<div>
<span>
some Text3
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</body>
我试图通过文本选择每个span元素 . 我可以通过id选择tbody . 我试过这个:
tbody.FindElement(By.XPath(String.Format(".//span[contains(text(), {0}))]", &var)));
(var = somex0020Text)
但这总是返回我表中的第一个 <span>
元素 .
我也尝试过:
tbody.FindElements(By.XPath(String.Format(".//span[contains(text(), {0}))]", &var)));
它返回了一个包含我表中每个 <span>
元素的列表,我不知道为什么 .
我也不明白为什么
tbody.FindElement(By.XPath(String.Format(".//span[text() = {0})]", &var)));
当contains方法返回一个只有相同文本的 <span>
元素时,抛出一个Element not found Exception .
4 回答
试试这个Xpath $ x(“// tr // span [contains( . ,'some text')]”)
这是Selenium中的预期行为 . 正如我所看到的,有3个元素具有与代码中提到的相同的xpath,在本例中为 Selenium returns the first element .
这也是一个expected behavior in Selenium .
FindElements
将返回具有相同xpath的所有元素 .因此,将
var
的值更改为some Text2
或some Text3
以找到其他两个元素 .以下
xpath
适用于some Text2
:我尝试使用xpath作为:
它正在选择所有3个 Span .
所以对此我已经引用了父元素 .
第一跨:
.//tbody[@id='a']//tr[1]//span[contains(text(),'some Text')]
第二名:
.//tbody[@id='a']//tr[2]//span[contains(text(),'some Text')]
第3名:
.//tbody[@id='a']//tr[3]//span[contains(text(),'some Text')]
通过这个,我可以单独选择每个span元素 .
您可以使用jQuery获取“Table”中的所有span元素 .
例: