我试图提取文本“ 2000”并将其存储在HTML下面的字符串中:
<table class="table" _ngcontent-c13="">
<tbody _ngcontent-c13="">
<tr _ngcontent-c13="">
<th _ngcontent-c13="" scope="row">Amount</th>
<td class="" _ngcontent-c13="">
<b _ngcontent-c13="">$2000</b>
</td> <!-- Added by edit -->
</tr> <!-- Added by edit -->
</tbody> <!-- Added by edit -->
</table> <!-- Added by edit -->
我正在尝试使用XPath,但是它返回了null
:
String text= driver.findelement(by.xpath("xpath="//table[@class='table']/tbody/tr[1]/td")).getAttribute("value")
答案 0 :(得分:1)
首先,您需要getText()
,而不是属性。
其次,您需要<b
元素而不是<td
的文本。
您也不需要在xpath中使用xpath=
最后,可以改进XPath:
tbody
)tr[1]
这样的索引,它们会使xpath易于破坏。而是使用一些有意义的定位符。在这种特殊情况下,您似乎想要找到<td
,其<th
表示Amount
。是这样的:
String text= driver
.findElement(
By.xpath("//table[@class='table']//th[text()='Amount']/../td/b"))
.getText();
答案 1 :(得分:1)
要仅匹配文本“ $ 2000”,可以使用以下XPath表达式:
//table[@class='table']/tbody/tr[1]/td/b
要删除“ $”或第一个字符,请使用以下XPath表达式:
substring(//table[@class='table']/tbody/tr[1]/td/b,2)
要获取这些值,请不要使用.getAttribute("value")
,因为这些值都不是属性。尝试使用.getText()
。 (我还删除了By
和findElement
的错字):
String text= driver.findElement(By.xpath("substring(//table[@class='table']/tbody/tr[1]/td/b,2)")).getText();
答案 2 :(得分:0)
您是否尝试将<b>
元素添加到xpath?另外,getAttribute()获取HTML标记中的属性,而不是标记内的值。您需要getText()函数。引用此线程:Difference b/w getText() and getAttribute() in Selenium WebDriver?
TL; DR:试试这个:
String text = driver.findelement(by.xpath("xpath="//table[@class='table']/tbody/tr[1]/td/b")).getText()
应该返回$2000
,您可以轻松剥离$。