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

C# CodedUI测试:如何根据同行单元格文本定位按钮

解决CodedUI中基于单元格内容定位同行按钮的问题

嘿,我正好做过类似的CodedUI测试,给你分享个靠谱的思路!既然你已经定位到了带data-bind="requestNumber"的span,接下来只需要把搜索范围限定在这个span所在的行里,就能精准找到对应的"Start Examination"按钮了。

核心步骤:先锁定行,再找按钮

  1. 获取目标行容器
    首先从你已经找到的requestNumberSpan出发,向上定位到它所在的行(一般是<tr>标签,如果你的表格是自定义div结构,就换成对应的容器标签):

    // 假设你已经拿到了包含请求编号的Span元素:requestNumberSpan
    HtmlControl targetRow = new HtmlControl(requestNumberSpan);
    // 搜索当前span所在的<tr>行,根据你的实际结构调整TagName
    targetRow.SearchProperties.Add(HtmlControl.PropertyNames.TagName, "tr");
    

    如果行不是直接父元素,你也可以用requestNumberSpan.GetParent()多次往上找,直到拿到行元素。

  2. 在目标行内查找按钮
    以行作为父控件,直接在里面搜索标题为"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:13:29