无法在 XPath 中使用 text() 获取文本

Cannot get text using text() in XPath

这是 html 代码的一部分:

<td class="audit-context-break-word text-left" nowrap="nowrap">
<b class="ng-binding">PONumber</b></td>
<td class="audit-context-break-word text-left ng-binding">20202022  02_001  </td>

我只需要获取里面的文本(预期值:20202022 02_001)我尝试了以下变体:

By.xpath("/descendant::*[.='PONumber']/../descendant::*[@class=\"audit-context-break-word text-left ng-binding\"]/text()")
By.xpath("/descendant::*[.='PONumber']/../following::text()[1]")

问题是在 FirePath 中找到了选定的文本,但在测试中找不到。由于超时异常而失败,因为找不到元素

失败的原因是什么?

Selenium 无法评估 xpath 的 text() 函数。你可以 运行 javascript 并且可以得到结果。 运行 在您的程序中跟随 javascript:

document.evaluate("//span[@class='tableNode']/text()[preceding-sibling::br and following-sibling::br]", document, null, XPathResult.STRING_TYPE, null).stringValue;

如果你用Python或Java,我可以出示

following-sibling 是你应该使用的东西:

driver.findElement(By.xpath("//td[b = 'PONumber']/following-sibling::td")).getText();

我有一个类似的问题,其中一个元素是可见的,但测试不会通过 isTextPresent。当我检查源代码时,它是

  • 2-1180 \&\nbsp CITY 2
  • ,而测试正在寻找“2-1180 CITY 2”。检查你是否也有类似的问题。让我们知道什么对您有用,我们有兴趣知道。

    注意:请勿投反对票,只是想提供帮助。

    您可以使用following-sibling编写Xpath。

    WebElement element=driver.findElement(By.xpath("//td[b[contains(text(),'PONumber')]]/following-sibling::td"));
            String text = element.getText();
            System.out.println(text);
    
    1. 我正在网页上识别合适的网络元素并将其保存在网络元素中。

    2. 使用getText()方法从该网络元素中获取文本并将其保存在字符串中

    3. 打印那个字符串text