使用Microsof UFT点击WebElement子级WebButton的实现问题求助
问题解决:UFT中通过父元素定位子级data-testid元素
问题梳理
Web自动化测试场景下的核心问题:
- 目标元素依赖
data-testid做识别,但部分data-testid不唯一且无法修改 - 需先定位父元素
data-testid="Orderbeleg_Segmentumbuchung",再点击其子级data-testid="add:b"按钮,但现有UFT代码无法识别目标对象
原代码的问题点
- 定位表达式含无效空格:
var = "data-testid:= .*" & pParent &".*"中:=后的多余空格,导致正则匹配失效 - ChildItem方法误用:UFT的
ChildItem主要用于表格(WebTable)的子元素定位,普通WebElement下应使用ChildObjects或相对定位 - 冗余操作与逻辑瑕疵:先点击父元素的操作无意义,且元素存在性判断的执行顺序不合理
修正后的代码
Option Explicit Dim bcName bcName = "Webbuttonclick_add" '--------------------------------------------------------------------------------------------- Dim pDoit, pParent, parentLocator, parentElem, childElems, i pParent = Parameter("parent") pDoit = CBool(evalVarAndOffset(Parameter("doit"))) ' 修正定位表达式,移除多余空格,确保正则匹配准确 parentLocator = "data-testid:=.*" & pParent & ".*" If pDoit = True Then Set parentElem = Browser("index:=0").Page("index:=0").WebElement(parentLocator) ' 等待父元素加载完成,提升稳定性 If parentElem.Exist(5) Then ' 获取父元素下所有符合子元素定位条件的对象集合 Set childElems = parentElem.ChildObjects("data-testid:=add:b") ' 遍历集合,找到第一个可用的子元素并执行点击 For i = 0 To childElems.Count - 1 If childElems(i).Exist(1) Then childElems(i).Click Wait 1 Exit For End If Next End If End If SQS_ActionFinish
关键优化说明
- 修正定位表达式:去掉
data-testid:=后的空格,保证正则能正确匹配包含目标父元素ID的元素 - 替换为ChildObjects方法:针对普通WebElement的子元素,
ChildObjects可返回符合定位条件的所有子元素集合,适配当前场景 - 增加等待逻辑:给父元素设置5秒等待时间,避免因页面加载延迟导致的元素识别失败
- 遍历子元素集合:若存在多个匹配的子元素,遍历找到第一个可用元素执行点击,提升脚本稳定性
内容的提问来源于stack exchange,提问作者T.Naz
相关产品推荐
相关产品推荐

