从 TD/B HTML 标签中提取文本 ,xpath="//table[@class

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



牧羊人nacy
浏览 399回答 3
3回答

慕容森

要仅匹配文本“$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&nbsp;text=&nbsp;driver.findElement(By.xpath("substring(//table[@class='table']/tbody/tr[1]/td/b,2)")).getText();

繁星点点滴滴

首先你需要getText(),而不是属性。其次,您需要<b元素的文本,而不是<td.&nbsp;你也不需要xpath=在 xpath 最后,XPath 可以改进:消除了您不关心的元素(例如tbody)不要使用像 那样的索引tr[1],它们会使 xpath 很容易被破坏。而是使用一些有意义的定位器。在这种特殊情况下,您似乎想找到<td,<th谁说Amount。所以像这样:String text= driver&nbsp; &nbsp; .findElement(&nbsp; &nbsp; &nbsp; &nbsp; By.xpath("//table[@class='table']//th[text()='Amount']/../td/b"))&nbsp; &nbsp; .getText();

拉丁的传说

您是否尝试将<b>元素添加到 xpath 中?此外,getAttribute() 获取 HTML 标签中的属性,而不是标签内的值。您需要 getText() 函数。TL;DR:试试这个:String text = driver.findelement(by.xpath("xpath="//table[@class='table']/tbody/tr[1]/td/b")).getText()那应该返回$2000,您可以轻松地剥离 $ 。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java