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

C#使用Selenium无法向Angular的<app-currency-input>发送sendKeys如何解决

解决方案

问题根因

是Angular封装的自定义组件,本身不是原生可交互的<input>节点,你之前操作的要么是外层自定义组件节点,要么仅修改了DOM的value属性没有触发Angular的双向绑定事件,所以操作无效也不报错。

操作步骤

  1. 先定位到组件内部真实的原生<input>节点:打开浏览器F12元素审查,点击目标货币输入框,展开<app-currency-input>的子节点即可找到内部的原生<input>标签。
  2. 任选以下一种方案执行:

方案1:直接操作原生输入框

// 相对定位找到内部真实input节点
var currencyWrapper = driver.FindElement(By.CssSelector("app-currency-input[name='InvoiceAmount']"));
var realInput = currencyWrapper.FindElement(By.TagName("input"));

// 先激活输入框再输入内容
realInput.Click();
realInput.SendKeys("100");

方案2:JS修改值+触发Angular绑定事件(方案1无效时使用)

如果原生输入框仍报键盘不可达错误,用JS修改值后主动触发Angular需要的输入变更事件即可:

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
var currencyWrapper = driver.FindElement(By.CssSelector("app-currency-input[name='InvoiceAmount']"));
var realInput = currencyWrapper.FindElement(By.TagName("input"));

// 可选:如果输入框有readonly/disabled属性,先移除限制
js.ExecuteScript("arguments[0].removeAttribute('readonly'); arguments[0].removeAttribute('disabled');", realInput);

// 修改值后触发input、change事件通知Angular更新绑定
js.ExecuteScript("arguments[0].value = '100';", realInput);
js.ExecuteScript("arguments[0].dispatchEvent(new Event('input', { bubbles: true }));", realInput);
js.ExecuteScript("arguments[0].dispatchEvent(new Event('change', { bubbles: true }));", realInput);

补充说明

如果组件有特殊的输入拦截逻辑,也可以借助剪贴板完成输入:先把目标值写入系统剪贴板,再对输入框发送Ctrl+V粘贴快捷键即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:36:02