Squish没有认识到动态变化的对象

时间:2016-08-25 21:04:32

标签: testing automation record squish

我正在尝试自动化应用程序(基于Windows)。这是一个记录和播放。 Squish能够打开并登录我的应用程序,但是当我试图点击主屏幕中的一个标签时,它说无法识别该对象。

这是一段代码:

mouseClick(waitForObject(": .ND - New Declaration_ListViewItem_18"));

最后它会停下来,然后会弹出一个新窗口,要求我选择" picknewobject"当我选择无法识别的对象时,我看到对象id已动态更改。 例如:" ND - 新声明_ListViewItem_18"更改为" ND - 新声明_ListViewItem_19"等等。

4 个答案:

答案 0 :(得分:0)

以冒号(:)开头的字符串传递给waitForObject,例如: .ND - New Declaration_ListViewItem_18,它们本身没有任何意义。它们只是符号标识符(称为"符号名称"在Squish中),用于在所谓的对象图中执行查找。对象图将每个符号名称与"真实姓名"相关联,该真实姓名实际上定义了识别对象的属性。

因此,如果您发现Squish不会重复使用现有(并且可能是匹配的)名称而是生成新名称,则需要查看对象图并检查与: .ND - New Declaration_ListViewItem_18关联的真实姓名和: .ND - New Declaration_ListViewItem_19;实名可能涉及一些不稳定的属性,例如:在每次运行应用程序时更改其值的属性。

答案 1 :(得分:0)

有时当我们碰到这个时,我们每次尝试访问特定测试运行中的对象时都会得到一个新对象。这些新对象中的每一个都具有相同的属性。因此,Squish试图用" occurrence =' n'""属性。

可靠地解决这个问题的一种简单方法是使用父对象(在应用程序中稳定的东西,没有实例化和删除),然后按名称遍历父对象的组件层次结构(希望你的组件是&#39) ;与之交互有一个独特的名称)。

您可以创建一个函数来执行此操作...

我的经验是使用JavaScript作为测试语言在Linux上使用Squish for Java。所以,我不确定我的脚本示例会有所帮助。但是,我们有一个" aut"我们创建的命名空间,我们在该命名空间中放置了一堆不同的函数,这些函数知道如何遍历Java组件层次结构(在层次结构中上下),以便按名称,类型,文本等查找对象。

/** javascript **/
let listItemAncestor = findObject(":SomeSymbolicNameForAncestor");
let declarationListItem = aut.fetchDescendantByName(listItemAncestor, "NewDeclarationListItem");
mouseClick(waitForObject(delarationListItem));

答案 2 :(得分:0)

我建议您监视对象并使用这些属性来执行鼠标单击事件。维护测试变得容易,您可以使用通配卡使测试更加健壮。

例如:

startApplication( “地址簿”)

mouseClick(“{type ='MenuItem'text?='File'}”)

参考https://doc.froglogic.com/squish/5.1/rg-namelookup.html

答案 3 :(得分:0)

如果保证此动态对象出现在对象层次结构中的同一个pont中,则可以捕获上层的唯一对象并循环到动态对象的位置。

例如,如果您的动态对象显示为面板的第二个对象(并且面板可以识别为uniquley),那么(使用JavaScript),

var myPanel = waitForObject(yourPanelObjectName);
var myPanel_children = object.children(myPanel);
var myDynamicObject = myPanel_children[1];

如果您可以在层次结构中的动态对象下方标识唯一对象,则也可以使用objet.parent()。