无法使用 QTP 识别对象,一旦对其执行操作,该对象就会从 UI 中删除
Unable to identify an object using QTP which is removed from UI once action is done on it
我这里有个情况。我正在自动化的应用程序是一个带有 .NET 包装器的 JavaScript 应用程序。其中一个 Web table 具有这样的功能,即在选择一行并对其执行操作后,该行将从 table 中删除,不再出现在 UI 中。脚本在重新运行时失败,因为它正在寻找该对象。
有人可以帮我解决这个问题吗?
QTP 版本 11.0
我正在使用两个在对象中没有改变但仍然失败的属性:
Browser("Browser").Page("page").Frame("frame").WebElement("htmltag:=DIV","class:=ntb-cell").Drag
Browser("Browser").Page("page").Frame("frame").WebElement("html tag:=DIV","class:=ntb-cell").Drop
拖放操作和单击操作完成后,此对象将从屏幕上删除。这个对象还有一个动态变化的文本字段,我使用 reg exp 来捕获它。
根据您目前所说的,所处理的项目在第一遍中存在,无法在第二遍中唯一标识。这意味着在第一次通过后,有不止一个项目符合您的描述。
如需进一步诊断,请全局关闭智能识别。接下来,重新运行你的脚本。还是像以前一样失败?好的。然后你会在第二遍中得到“无法唯一标识对象(有多个对象符合你的描述)。
尝试突出显示相关对象的单独实例:
Browser("Browser").Page("page").Frame("frame").WebElement("htmltag:=DIV","class:=ntb-cell").Highlight
仍然会失败,但是
Browser("Browser").Page("page").Frame("frame").WebElement("htmltag:=DIV","class:=ntb-cell","index:=0").Highlight
应突出显示第一个实例,“index:=1
” 应突出显示第二个实例,依此类推。如果是这样,请去查看那些对象的属性,并找出可以用来区分它们的属性。如果找不到,则必须使用索引 属性.
如果在第二个 运行 的上下文中您根本找不到匹配项,即使使用索引 属性,您可能 "missed" 页面刷新,并且对象引用由 QTP 内部创建的无效(即使用特定 windows 句柄寻址 GUI 对象,但该对象已被现在具有不同 windows 句柄的 GUI 对象替换或重新创建)。使用描述性编程时不应发生这种情况,只是为了确保插入
Browser("Browser").Page("page").RefreshObject
在拖放调用之前调用。然后重试,并使用上述步骤重新诊断。这应该足以说明该主题,因此您可能会找到解决方案(然后请post它!),或者使我们能够给出更好的答案(或改进这个答案)。
我这里有个情况。我正在自动化的应用程序是一个带有 .NET 包装器的 JavaScript 应用程序。其中一个 Web table 具有这样的功能,即在选择一行并对其执行操作后,该行将从 table 中删除,不再出现在 UI 中。脚本在重新运行时失败,因为它正在寻找该对象。
有人可以帮我解决这个问题吗?
QTP 版本 11.0
我正在使用两个在对象中没有改变但仍然失败的属性:
Browser("Browser").Page("page").Frame("frame").WebElement("htmltag:=DIV","class:=ntb-cell").Drag
Browser("Browser").Page("page").Frame("frame").WebElement("html tag:=DIV","class:=ntb-cell").Drop
拖放操作和单击操作完成后,此对象将从屏幕上删除。这个对象还有一个动态变化的文本字段,我使用 reg exp 来捕获它。
根据您目前所说的,所处理的项目在第一遍中存在,无法在第二遍中唯一标识。这意味着在第一次通过后,有不止一个项目符合您的描述。
如需进一步诊断,请全局关闭智能识别。接下来,重新运行你的脚本。还是像以前一样失败?好的。然后你会在第二遍中得到“无法唯一标识对象(有多个对象符合你的描述)。
尝试突出显示相关对象的单独实例:
Browser("Browser").Page("page").Frame("frame").WebElement("htmltag:=DIV","class:=ntb-cell").Highlight
仍然会失败,但是
Browser("Browser").Page("page").Frame("frame").WebElement("htmltag:=DIV","class:=ntb-cell","index:=0").Highlight
应突出显示第一个实例,“index:=1
” 应突出显示第二个实例,依此类推。如果是这样,请去查看那些对象的属性,并找出可以用来区分它们的属性。如果找不到,则必须使用索引 属性.
如果在第二个 运行 的上下文中您根本找不到匹配项,即使使用索引 属性,您可能 "missed" 页面刷新,并且对象引用由 QTP 内部创建的无效(即使用特定 windows 句柄寻址 GUI 对象,但该对象已被现在具有不同 windows 句柄的 GUI 对象替换或重新创建)。使用描述性编程时不应发生这种情况,只是为了确保插入
Browser("Browser").Page("page").RefreshObject
在拖放调用之前调用。然后重试,并使用上述步骤重新诊断。这应该足以说明该主题,因此您可能会找到解决方案(然后请post它!),或者使我们能够给出更好的答案(或改进这个答案)。