我正在尝试自动化应用程序(基于Windows)。这是一个记录和播放。 Squish能够打开并登录我的应用程序,但是当我试图点击主屏幕中的一个标签时,它说无法识别该对象。
这是一段代码:
mouseClick(waitForObject(": .ND - New Declaration_ListViewItem_18"));
最后它会停下来,然后会弹出一个新窗口,要求我选择" picknewobject"当我选择无法识别的对象时,我看到对象id已动态更改。 例如:" ND - 新声明_ListViewItem_18"更改为" ND - 新声明_ListViewItem_19"等等。
答案 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'}”)
答案 3 :(得分:0)
如果保证此动态对象出现在对象层次结构中的同一个pont中,则可以捕获上层的唯一对象并循环到动态对象的位置。
例如,如果您的动态对象显示为面板的第二个对象(并且面板可以识别为uniquley),那么(使用JavaScript),
var myPanel = waitForObject(yourPanelObjectName);
var myPanel_children = object.children(myPanel);
var myDynamicObject = myPanel_children[1];
如果您可以在层次结构中的动态对象下方标识唯一对象,则也可以使用objet.parent()。