You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用WebDriver测试Blazor网站中验证消息的可见性?

问题

我正在使用WebDriver对Blazor Web应用进行集成测试,想要测试验证消息的可见性。示例表单如下:

<form method="post" action="/users/register">
    <div>
        <input id="Name" class="form-control valid" type="text" aria-required="true" />
        <label for="Name" class="form-label">Name</label>
        <ValidationMessage For="Name" class="text-danger"/>
    </div>
    <div>
        <input id="EmailAddress" class="form-control valid" aria-required="true" type="email" />
        <label for="EmailAddress" class="form-label">Email Address</label>
    </div>
</form>

现有WebDriver测试代码如下:

webDriver.Navigate().GoToUrl(WebSite.FullUrl(url))

var name = webDriver.FindElement(By.Id("Name"))
name.Clear();

var emailAddress = webDriver.FindElement(By.Id("EmailAddress"))

此时验证消息已按预期显示,如何通过代码验证该验证消息的可见性?

解决方法

Blazor的ValidationMessage组件渲染后会生成带有特定标识的DOM元素,你可以通过以下几种可靠方式验证它的可见性:

1. 利用Blazor专属属性定位

Blazor渲染ValidationMessage时会自动添加data-valmsg-for属性,值对应绑定的字段名,这是最精准的定位方式:

// 定位Name字段对应的验证消息元素
var nameValidationMsg = webDriver.FindElement(By.CssSelector("[data-valmsg-for='Name']"));
// 验证元素是否可见
Assert.IsTrue(nameValidationMsg.Displayed);

2. 通过CSS类结合父元素定位

如果属性定位失效,可借助text-danger类和输入框的父容器来定位:

// 找到Name输入框的父div,再定位其中的text-danger元素
var nameValidationMsg = webDriver.FindElement(By.XPath("//div[input[@id='Name']]//*[contains(@class,'text-danger')]"));
Assert.IsTrue(nameValidationMsg.Displayed);

3. 处理异步渲染的显式等待

Blazor是异步渲染的单页应用,验证消息可能不会立即出现,建议用显式等待确保元素加载完成:

var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10));
// 等待验证消息元素可见
var nameValidationMsg = wait.Until(driver => 
{
    var element = driver.FindElement(By.CssSelector("[data-valmsg-for='Name']"));
    return element.Displayed ? element : null;
});
// 直接断言即可,因为等待已确保元素可见
Assert.IsNotNull(nameValidationMsg);

注:Displayed属性会自动判断元素是否在页面上可见(排除display:none、visibility:hidden等隐藏状态),完全符合验证需求。

内容的提问来源于stack exchange,提问作者Tim Murphy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:17:12