无法使用 playwright 访问 Shadow DOM 内的文本

问题描述 投票:0回答:2

我正在尝试使用剧作家来断言如下所示的文本,该文本位于开放的影子根内部,没有与该特定文本关联的标签。这些文本位于表格单元格内。

<div>
<table-cell>
  #shadow-root (open)
  "Text content"
</table-cell>

我试图断言位于影子 DOM 下的“文本内容”。我能够唯一找到但无法获取其中的文本。它总是返回一个空字符串或对象,具体取决于我尝试检索文本的方法。我尝试过的示例打字稿代码如下,

const text = this.page.locator('table-cell').innerText();

我能够获取位于影子根内部的其他文本,该文本具有与该文本关联的标签。但在这种情况下,这个特定的文本行没有任何与之关联的标签,因此这些方法不适用于其他场景。

如果 #shadow-root 只包含文本,没有任何标签,我如何获取它的内容?

typescript playwright shadow-dom playwright-typescript
2个回答
1
投票

innerText
HTMLElement

的财产

shadowRoot 不是

HTMLElement
并且没有
innerText
属性。

它确实有一个

innerHTML
属性:https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot

let text = document.querySelector("your-element").shadowRoot.innerHTML

获取文本


0
投票

您可以查询影子根外部的节点并对其文本进行断言:

import {expect, test} from "@playwright/test"; // ^1.42.1

const html = `<!DOCTYPE html><html><body>
<div></div>
<script>
const el = document.querySelector("div");
const root = el.attachShadow({mode: "open"});
el.shadowRoot.innerHTML = "Text content";
</script>
</body></html>`;

test("Finds tagless text in a shadow root", async ({page}) => {
  await page.setContent(html);
  await expect(page.locator("div")).toHaveText("Text content");
});

根据您的情况,请将

"div"
替换为
"table-cell"

© www.soinside.com 2019 - 2024. All rights reserved.