C# CodedUI测试:如何根据同行单元格文本定位按钮
解决CodedUI中基于单元格内容定位同行按钮的问题
嘿,我正好做过类似的CodedUI测试,给你分享个靠谱的思路!既然你已经定位到了带data-bind="requestNumber"的span,接下来只需要把搜索范围限定在这个span所在的行里,就能精准找到对应的"Start Examination"按钮了。
核心步骤:先锁定行,再找按钮
获取目标行容器
首先从你已经找到的requestNumberSpan出发,向上定位到它所在的行(一般是<tr>标签,如果你的表格是自定义div结构,就换成对应的容器标签):// 假设你已经拿到了包含请求编号的Span元素:requestNumberSpan HtmlControl targetRow = new HtmlControl(requestNumberSpan); // 搜索当前span所在的<tr>行,根据你的实际结构调整TagName targetRow.SearchProperties.Add(HtmlControl.PropertyNames.TagName, "tr");如果行不是直接父元素,你也可以用
requestNumberSpan.GetParent()多次往上找,直到拿到行元素。在目标行内查找按钮
以行作为父控件,直接在里面搜索标题为"Start Examination"的div:HtmlDiv startExamBtn = new HtmlDiv(targetRow); // 根据按钮的实际属性来设置搜索条件,比如InnerText或者Title startExamBtn.SearchProperties.Add(HtmlDiv.PropertyNames.InnerText, "Start Examination"); // 如果按钮是通过Title属性显示文本,就换成下面这行 // startExamBtn.SearchProperties.Add(HtmlDiv.PropertyNames.Title, "Start Examination");
备选方案:遍历行内元素匹配
如果上面的直接搜索不好用,还可以遍历行内的所有div元素,筛选出目标按钮:
// 获取行内所有的HtmlDiv控件 var allDivsInRow = targetRow.FindMatchingControls().OfType<HtmlDiv>(); // 匹配文本内容(忽略大小写更稳妥) var targetButton = allDivsInRow.FirstOrDefault(div => div.InnerText.Equals("Start Examination", StringComparison.OrdinalIgnoreCase));
小提示
- 一定要把搜索范围限定在目标行内,不然很容易匹配到其他行的同名按钮,导致测试失败
- 可以用CodedUI的
UITestControl.DrawHighlight()方法来验证你找到的行和按钮是否正确,方便调试
内容的提问来源于stack exchange,提问作者davefester
相关产品推荐
相关产品推荐

