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

使用Playwright .NET测试Blazor InputNumber时FillAsync类型转换错误解决

问题:Blazor InputNumber组件的Playwright测试输入报错处理

我用.NET 5搭配Blazor开发,表单里有如下InputNumber组件:

<InputNumber id="age" @bind-Value="@myObject.Age" />

为了测试表单输入的边界条件验证错误提示,我写了以下Playwright测试代码:

[Theory]
[InlineData(-1)]
[InlineData(0)]
[InlineData(1001)]
public async void CreatePerson_InvalidAge(int age)
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true, SlowMo = 500 });
    await using var context = await browser.NewContextAsync();

    var page = await context.NewPageAsync();

    await page.GotoAsync(baseUrl);

    await page.Locator("id=age").FillAsync(age);
    await page.Locator("id=saveBtn").ClickAsync();

    var errorMessage = await page.Locator("id=ageErrMsg").First.InnerTextAsync();

    Assert.Equal("Age must be between 1 - 200", errorMessage);
}

调用FillAsync时出现“cannot convert int to string”错误,请问该如何为InputNumber表单控件输入数字?


解决方案

错误原因

Playwright的FillAsync方法要求传入字符串类型参数,但你直接传入了int类型变量,导致类型转换失败。

修改方法

把int类型的age转换为字符串后再传入FillAsync,常用两种方式:

  • 使用age.ToString()直接转换
  • 用字符串插值$"{age}"

修改后的核心代码示例:

// 方式1:ToString转换
await page.Locator("id=age").FillAsync(age.ToString());

// 方式2:字符串插值
await page.Locator("id=age").FillAsync($"{age}");

完整修改后的测试代码

[Theory]
[InlineData(-1)]
[InlineData(0)]
[InlineData(1001)]
public async void CreatePerson_InvalidAge(int age)
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true, SlowMo = 500 });
    await using var context = await browser.NewContextAsync();

    var page = await context.NewPageAsync();

    await page.GotoAsync(baseUrl);

    // 转换为字符串后传入
    await page.Locator("id=age").FillAsync(age.ToString());
    await page.Locator("id=saveBtn").ClickAsync();

    var errorMessage = await page.Locator("id=ageErrMsg").First.InnerTextAsync();

    Assert.Equal("Age must be between 1 - 200", errorMessage);
}

补充说明

Blazor的InputNumber最终渲染为浏览器标准的<input type="number">元素,Playwright对这类元素的输入逻辑和普通输入框一致,传入字符串格式的数字即可被正常识别。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:25:40