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

如何使用Selenium C#获取ko.toJS生成的输入框值?

解决Selenium获取Knockout.js绑定输入框值的问题

问题原因

你遇到的问题源于Knockout.js的双向绑定机制:它不会修改HTML标签上的静态value属性(也就是你看到的value=""),而是直接更新DOM元素的动态value属性。GetAttribute("value")只能读取HTML标签上的初始静态值,因此会返回空结果。

解决方案

方法1:直接读取Knockout ViewModel的数据

页面已将ViewModel挂载到window.DocMVVM,可以通过执行JavaScript直接获取ViewModel中的值:

string receiverLastName = (string)driver.ExecuteScript("return window.DocMVVM.Reciever().LastName;");
  • 注意:Reciever()是KO的observable对象,必须加()才能获取其内部的实际数据对象,再访问LastName属性。

方法2:用GetProperty替代GetAttribute

如果需要从DOM元素获取当前显示值,使用GetProperty("value")获取DOM的动态属性,而非HTML的静态属性:

driver.FindElement(By.Id("Reciever_LastName")).GetProperty("value");
  • 定位元素时直接用By.Id("Reciever_LastName")即可,比复杂的CSS选择器更高效准确。

额外提示

如果页面加载或ViewModel初始化存在延迟,先等待元素可见再执行操作,避免元素未找到的错误:

// 等待元素可见
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement lastNameInput = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("Reciever_LastName")));

// 获取值
string value = lastNameInput.GetProperty("value");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:50:28