我正在尝试使用剧作家来断言如下所示的文本,该文本位于开放的影子根内部,没有与该特定文本关联的标签。这些文本位于表格单元格内。
<div>
<table-cell>
#shadow-root (open)
"Text content"
</table-cell>
我试图断言位于影子 DOM 下的“文本内容”。我能够唯一找到但无法获取其中的文本。它总是返回一个空字符串或对象,具体取决于我尝试检索文本的方法。我尝试过的示例打字稿代码如下,
const text = this.page.locator('table-cell').innerText();
我能够获取位于影子根内部的其他文本,该文本具有与该文本关联的标签。但在这种情况下,这个特定的文本行没有任何与之关联的标签,因此这些方法不适用于其他场景。
如果 #shadow-root 只包含文本,没有任何标签,我如何获取它的内容?
innerText
是 HTMLElement
的财产
shadowRoot 不是
HTMLElement
并且没有 innerText
属性。
它确实有一个
innerHTML
属性:https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot
let text = document.querySelector("your-element").shadowRoot.innerHTML
获取文本
您可以查询影子根外部的节点并对其文本进行断言:
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"
。