.toHaveCount(2)
不计算定位器的子代数量;它统计与定位器本身匹配的元素的出现次数。
我认为您希望选择results元素内部的h1元素:
import {expect, test} from "@playwright/test"; // ^1.42.1
const html = `<!DOCTYPE html><html><body>
<button>Submit</button>
<div id="results"></div>
<script>
function addHeading() {
const results = document.querySelector("#results");
const h1 = document.createElement("h1");
h1.textContent = "heading1";
results.appendChild(h1);
const h2 = document.createElement("h1");
h2.textContent = "heading2";
results.appendChild(h2);
}
const submitButton = document.querySelector("button");
submitButton.addEventListener("click", addHeading);
</script>
</body></html>`;
test("empty search returns all results", async ({page}) => {
await page.setContent(html);
await page.getByRole("button", {name: "Submit"}).click();
const results = page.locator("#results h1");
await expect(results).toHaveText(["heading1", "heading2"]);
await expect(results).toHaveCount(2);
});
话虽如此,
.toHaveCount(2)
现在是多余的,因为我使用了更好的版本
toHaveText
具有两个元件的阵列。删除计数断言。
您也可以使用
await expect(page.locator("#results").getByRole("heading"))
如果你想更接近剧作家的最佳实践(
getByRole
是优选的定位器)。您仍然可以将其限制为特定
"level"
(例如h1)。
至于页面刷新,您提供的代码不会再现这种行为,但通常情况下,如果页面的JavaScript没有拦截表单提交事件并调用
event.preventDefault()
在上面。我必须看看你的实际页面,或者更完整的复制品才能提出建议。