如何在没有html tag/attribute的情况下为文本编写xpath

How to write xpath for the text without html tag/attribute

[在此处输入图片描述][1]

<mat-chip role="option" cdkdrag="" container="body" class="cdk-drag mat-chip mat-focus-indicator mat-primary mat-standard-chip mat-chip-with-trailing-icon ng-star-inserted" tabindex="-1" aria-disabled="false" style="" xpath="1"><div class="mat-chip-ripple"></div> Table data <mat-icon role="img" aria-hidden="false" aria-label="icon-drag-doubledot" class="mat-icon notranslate icon-drag material-icons mat-icon-no-color" data-mat-icon-type="font"></mat-icon><mat-icon role="img" matchipremove="" aria-hidden="false" aria-label="icon-close" class="mat-icon notranslate mat-chip-remove mat-chip-trailing-icon icon-close material-icons mat-icon-no-color" data-mat-icon-type="font"></mat-icon></mat-chip>

从上面的 HTML 标签中,我想提取那些 Table 数据文本。我无法使用下面的 xpath

获取文本
//mat-chip[@role='option']//div
//mat-chip[@role='option']//div/following-sibling::text()[1]

执行时抛出错误“失败:选择器无效:xpath 表达式的结果”//mat-chip[@role='option']//div/following-sibling::text() [2]”是:[对象文本]。它应该是一个元素。'

谁能帮忙

[在此处输入图片描述][2]

没错,文字属于这个元素//mat-chip[@role='option']

我在本地查了一下,一切正常。如果对您不起作用,那么问题出在其他地方


P.S。证明

Selenium 需要一个元素而不是文本 () 节点。所以使用这个: 你需要这个:

//mat-chip[@role='option']/div

虽然我怀疑[@role='option']有什么好处。

如果您确定该 mat-chip 中只有一个 div,您可以通过添加 [1] 来加速 XPath,如下所示:

//mat-chip[@role='option']/div[1]

这会告诉 XPath 引擎在找到第一个后停止搜索 div。