CodedUI测试中如何获取网页单选按钮的动态值?
解决CodedUI测试中动态Value单选按钮的定位问题
兄弟,我太懂你这种被动态元素坑的滋味了——录制测试时给单选按钮设了固定value,结果每次跑测试都因为这个值变了而失败,简直闹心。咱们直接针对你给出的HTML代码,用稳定不变的属性组合来搞定这个问题:
方法1:基于稳定属性+部分匹配定位
你的单选按钮里有几个不会变的属性,还有一个可以做部分匹配的属性,组合起来就能精准定位:
type="radio":单选按钮的类型永远不会变name="id[]":这个name属性看起来是固定的aria-label:虽然后面的时间是动态的,但前面的Check Domain Factvlog是固定的,咱们用包含匹配就能忽略动态部分
操作步骤(测试生成器界面):
- 打开测试生成器,找到这个单选按钮的搜索配置
- 删除原来基于
value的搜索条件 - 添加以下搜索属性:
- 选择
ControlType,值设为RadioButton - 选择
Name,值设为id[] - 选择
AriaLabel,匹配模式改成Contains,值填Check Domain Factvlog
- 选择
代码实现(如果手动写定位逻辑):
// 先定位浏览器窗口 BrowserWindow browserWindow = BrowserWindow.Launch(new Uri("你的测试页面URL")); // 创建单选按钮定位器 HtmlRadioButton targetRadio = new HtmlRadioButton(browserWindow); // 添加稳定属性搜索条件 targetRadio.SearchProperties.Add(HtmlRadioButton.PropertyNames.ControlType, "RadioButton"); targetRadio.SearchProperties.Add(HtmlRadioButton.PropertyNames.Name, "id[]"); // 用包含匹配处理动态的aria-label targetRadio.SearchProperties.Add(HtmlRadioButton.PropertyNames.AriaLabel, "Check Domain Factvlog", PropertyExpressionOperator.Contains); // 验证是否能找到元素 if (targetRadio.Exists) { // 执行点击操作 Mouse.Click(targetRadio); }
方法2:结合父元素缩小定位范围
如果页面上有多个name="id[]"的单选按钮,咱们可以先定位它的父容器(比如固定class/id的div、li),再在容器内找目标单选按钮,进一步缩小范围:
// 先定位父容器(假设父容器有固定class) HtmlDiv parentContainer = new HtmlDiv(browserWindow); parentContainer.SearchProperties.Add(HtmlDiv.PropertyNames.Class, "domain-check-item"); // 在父容器内找单选按钮 HtmlRadioButton targetRadio = new HtmlRadioButton(parentContainer); targetRadio.SearchProperties.Add(HtmlRadioButton.PropertyNames.ControlType, "RadioButton"); targetRadio.SearchProperties.Add(HtmlRadioButton.PropertyNames.AriaLabel, "Check Domain Factvlog", PropertyExpressionOperator.Contains);
小提醒:录制时避开动态属性
下次用测试生成器录制时,别默认选value这种动态属性当定位条件,手动挑那些稳定的属性(比如name、aria-label的固定部分、type),能省掉后续很多麻烦。
内容的提问来源于stack exchange,提问作者Bader H Al Rayyes
相关产品推荐
相关产品推荐

