从TD / B HTML标签中提取文本,xpath =“ // table [@ class ='table'] / tbody / tr [1] / td

时间:2018-09-06 21:58:00

标签: java selenium-webdriver xpath

我试图提取文本“ 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")

3 个答案:

答案 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()。 (我还删除了ByfindElement的错字):

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,您可以轻松剥离$。