UFT14使用XPath运行测试报未知错误或找不到对象如何解决
UFT 14 XPath正则匹配对象识别报错排查方案
报错根因
- UFT调用的浏览器默认使用XPath 1.0引擎,本身不支持原生正则匹配语法,你直接在
normalize-space()后加.*的正则写法不符合XPath 1.0语法规范,会直接导致XPath解析失败,触发未知错误或对象找不到提示。 - 你调整后的XPath语法本身不完整,缺少
normalize-space()的右括号、匹配逻辑符以及条件块的闭合中括号,属于非法XPath表达式,引擎无法正常解析。 - UFT的正则匹配规则是作用于对象属性值的,不支持直接嵌入到XPath表达式内部的函数逻辑中。
解决方案
方案1:使用XPath 1.0原生函数替代正则(优先推荐)
如果你需要匹配文本开头为$的H3元素,直接用XPath 1.0原生支持的starts-with函数即可,完全覆盖你的匹配需求,代码如下:
SystemUtil.Run "Chrome.exe","https://www.mortgagecalculator.org/" val = Browser(MortCalPage).Page(MortCalPage).WebElement("xpath:=//DIV/DIV/H3[starts-with(normalize-space(), '$')]").GetROProperty("outertext")
方案2:先抓元素集再用VBScript正则匹配(适合复杂匹配规则)
如果需要更复杂的正则匹配逻辑,不要把正则写在XPath内,先抓取所有符合层级的H3元素,再用VBScript正则遍历匹配,代码示例:
SystemUtil.Run "Chrome.exe","https://www.mortgagecalculator.org/" ' 定义H3元素筛选条件 Set desc = Description.Create() desc("micclass").Value = "WebElement" desc("xpath").Value = "//DIV/DIV/H3" Set h3List = Browser(MortCalPage).Page(MortCalPage).ChildObjects(desc) ' 初始化正则对象 Set regEx = New RegExp regEx.Pattern = "^\$\d{1,3}(,\d{3})*\.\d{2}$" ' 可按需调整匹配规则 regEx.IgnoreCase = True regEx.Global = False ' 遍历匹配目标元素 Dim val For Each h3 In h3List curText = h3.GetROProperty("outertext") If regEx.Test(curText) Then val = curText Exit For End If Next
方案3:使用UFT属性正则匹配规则
开启UFT对象属性的正则匹配开关,不要把正则嵌入XPath:
SystemUtil.Run "Chrome.exe","https://www.mortgagecalculator.org/" Set desc = Description.Create() desc("micclass").Value = "WebElement" desc("xpath").Value = "//DIV/DIV/H3" desc("outertext").Value = "\$.*" desc("outertext").RegularExpression = True ' 开启outertext属性的正则匹配能力 val = Browser(MortCalPage).Page(MortCalPage).WebElement(desc).GetROProperty("outertext")
内容的提问来源于stack exchange,提问作者Prathamesh Deshmukh
相关产品推荐
相关产品推荐

