我的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。
答案 0 :(得分:2)
我尝试使用xpath作为:
.//span[contains(text(),'some Text')]
它正在选择所有3个跨度。
所以我已经引用了父元素。
第一个范围:.//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元素。
答案 1 :(得分:0)
您可以使用jQuery获取“Table”中的所有span元素。
示例:
var items = $('table div span');
items.each(function (x) {
alert(items[x].innerHTML);
});
答案 2 :(得分:0)
tbody.FindElement(By.XPath(String.Format(“.// span [contains(text(),{0}))]”,&amp; var)));
(var = somex0020Text)但这总是返回我表格中的第一个元素。
这是Selenium中的预期行为。正如我所看到的,有3个元素具有与代码中提到的相同的xpath,在这种情况下 Selenium返回第一个元素。
tbody.FindElements(By.XPath(String.Format(“.// span [contains(text(),{0}))]”,&amp; var)));
返回了一个包含我表中每个元素的列表,我不知道为什么。
这也是expected behavior in Selenium。 FindElements
将返回具有相同xpath的所有元素。
因此,请将var
的值更改为some Text2
或some Text3
以找到其他两个元素。
以下xpath
适用于some Text2
:
.//span[contains(text(), 'some Text2'))]
答案 3 :(得分:0)
尝试使用此Xpath $ x(“// tr // span [contains(。,'some text')]”)
答案 4 :(得分:0)
据我所知,您在使用 contains
时遇到了问题。所有 3 个跨度都包含这个“一些文本”部分。
如果要检查整个字符串,可以使用 .//span[text()='some Text']
。
希望这会有所帮助,并享受网络解析的乐趣!