如何使用Coded UI Test获取编辑控件的值?含订单号文本框代码咨询
解决Coded UI Test获取指定ID编辑控件值的问题
嘿,我来帮你搞定这个获取订单号的需求!对比你熟悉的Selenium写法,Coded UI Test在控件定位和属性获取上有一些小差异,我给你调整并完善代码,同时讲清楚关键要点:
正确的实现代码
public static string GetOrderNumber() { // 绑定到当前浏览器窗口(如果是已打开的页面,也可以用BrowserWindow.Launch指定URL启动) BrowserWindow targetBrowser = BrowserWindow.CurrentWindowHandle != null ? new BrowserWindow() { WindowHandle = BrowserWindow.CurrentWindowHandle } : BrowserWindow.Launch(new Uri("你的目标网页URL")); // 创建编辑控件实例,指定父控件为浏览器窗口(这一步很重要,缩小搜索范围) UITestControl orderNoTextBox = new UITestControl(targetBrowser); orderNoTextBox.TechnologyName = "Web"; // 用官方枚举属性名更规范,避免拼写错误 orderNoTextBox.SearchProperties.Add(UITestControl.PropertyNames.ControlType, "Edit"); orderNoTextBox.SearchProperties.Add(UITestControl.PropertyNames.Id, "order_no"); // 等待控件加载完成,防止未渲染导致的错误 if (orderNoTextBox.WaitForControlExist(10000)) // 10秒超时 { // Web编辑控件的文本值可能存在于Text或Value属性,做兜底处理 string orderNumber = orderNoTextBox.GetProperty(UITestControl.PropertyNames.Text)?.ToString() ?? orderNoTextBox.GetProperty("Value")?.ToString(); return orderNumber; } else { throw new Exception("未找到ID为order_no的编辑控件"); } }
关键注意点
- 指定父控件:一定要把编辑控件的父控件设为
BrowserWindow,否则Coded UI Test会在整个桌面搜索控件,容易定位失败或找错控件。 - 属性名的规范用法:用
UITestControl.PropertyNames.Id、UITestControl.PropertyNames.ControlType这类枚举值代替字符串,能避免拼写错误,也更符合官方最佳实践。 - 属性获取的兜底:和Selenium里用
getAttribute("value")不同,Coded UI Test中Web编辑控件的输入值可能存在于Text或Value属性中(取决于控件的渲染方式),所以同时尝试两个属性更稳妥。 - 等待控件加载:添加
WaitForControlExist方法确保控件已渲染完成,避免因页面加载延迟导致的控件未找到异常。
内容的提问来源于stack exchange,提问作者Abraham Dlamini
相关产品推荐
相关产品推荐

