无法使用QTP识别对象,一旦对其执行操作,该对象将从UI中删除

时间:2015-01-27 00:25:59

标签: qtp

我有一个情况。我正在自动化的应用程序是一个带有.NET包装器的JavaScript应用程序。其中一个Web表具有以下功能:在对行进行选择和执行操作之后,此行将从表中删除,而不再在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来捕获它。

1 个答案:

答案 0 :(得分:0)

根据您到目前为止所说的内容,所述项目在第一遍中出现,并且在第二遍中无法唯一识别。这意味着在第一次通过后,有多个项目符合您的描述。

要进一步诊断,请全球切换智能识别。接下来,重新运行您的脚本。它还像以前一样失败吗?好。然后你将得到“无法在第二遍中唯一地识别对象(与你的描述匹配的对象不止一个)。

尝试突出显示相关对象的单独实例:

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”突出显示第二个实例,依此类推。如果是这样,请查看这些对象的属性,找出可以区分它们的对象。如果找不到,则必须使用索引属性。

如果在第二次运行的上下文中你根本找不到匹配项,即使使用索引属性,你可能“错过”了页面刷新,而QTP内部创建的对象引用也是无效的(即处理GUI对象)使用特定的Windows句柄但是对象已被GUI对象替换或重新创建,该GUI对象现在具有不同的窗口句柄。使用它时,描述性编程不应该发生这种情况,只是为了确保插入

Browser("Browser").Page("page").RefreshObject
在拖放调用之前调用

。然后重新尝试,并使用上述步骤重新诊断。这应该足以说明主题,以便您可以找到解决方案(然后请发布它!),或者让我们提供更好的答案(或者改进这个答案)。