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

C# Selenium清空数值输入框后SendKeys赋值异常求解

Selenium操作number类型输入框清空后自动重置最小值、输入值拼接异常解决方案

问题根因

该异常由两点共同触发:

  • 目标输入框为type="number"的受控表单组件,绑定了前端实时校验逻辑:当输入框值被清空为空时,会自动重置为min属性定义的最小值0.01,该动作触发时机在Clear()方法执行完成、SendKeys()方法执行之前,因此Clear操作结束后输入框已存在默认值0.01,后续输入内容会直接拼接在该值后,最终得到0.01002的错误结果。
  • Selenium原生Clear()方法对绑定了自定义input/change事件的前端组件兼容性较差,无法拦截清空动作触发的自动赋值逻辑。

可行解决方案

方案1:全选覆盖输入(无JS依赖,兼容性最好)

不调用Clear()方法,通过快捷键全选输入框内已有内容,直接输入新值覆盖选中内容,全程不会出现输入框为空的阶段,不会触发最小值重置逻辑。

IWebElement element = webdriver.FindElement(By.Id("entry-lots"));
element.Click();
// Windows环境下发送Ctrl+A全选,MacOS环境替换为Keys.Command + "a"
element.SendKeys(Keys.Control + "a");
// 输入新值直接覆盖选中内容
element.SendKeys("0.02");

方案2:JS直接赋值(稳定性最高,不受UI焦点影响)

通过JavaScript执行器直接修改输入框的值,手动触发组件绑定的更新事件,绕过UI层面的键盘、点击交互,完全避开清空触发的校验逻辑。

IWebElement element = webdriver.FindElement(By.Id("entry-lots"));
IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)webdriver;
jsExecutor.ExecuteScript(@"
    const input = arguments[0];
    input.value = arguments[1];
    // 触发前端框架监听的输入、变更事件,确保值同步生效
    input.dispatchEvent(new Event('input', { bubbles: true }));
    input.dispatchEvent(new Event('change', { bubbles: true }));
", element, "0.02");

方案3:退格删除后输入(适配特殊严格校验场景)

如果上述两种方案被页面特殊校验拦截,可以通过多次发送退格键删除原有内容,删除后立即输入新值,缩短空值存在的窗口,避开自动重置逻辑。

IWebElement element = webdriver.FindElement(By.Id("entry-lots"));
element.Click();
// 多预留3次退格,覆盖自动填充的0.01长度
int deleteTimes = element.GetAttribute("value").Length + 3;
for (int i = 0; i < deleteTimes; i++)
{
    element.SendKeys(Keys.Backspace);
}
element.SendKeys("0.02");

注意事项:禁止在调用Clear()方法后添加显式/隐式等待,否则自动填充的最小值会稳定写入输入框,必然出现内容拼接问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:42:17