0

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

这是一段代码:

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

最后它停止并弹出一个新窗口,要求我选择无法识别的对象时“picknewobject”,我看到对象 id 已动态更改。例如:“ND - New Declaration_ListViewItem_18”更改为“ND - New Declaration_ListViewItem_19”等等。

4

4 回答 4

0

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

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

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

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

于 2018-04-06T14:43:58.200 回答
0

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

因此,如果您发现 Squish 没有重复使用现有(并且据说是匹配的)名称而是生成一个新名称,您需要查看对象映射并检查与: .ND - New Declaration_ListViewItem_18and关联的真实名称: .ND - New Declaration_ListViewItem_19;实名可能涉及一些易变的属性,例如,在每次运行应用程序时都会更改其值的属性。

于 2016-09-19T07:56:33.970 回答
0

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

例如:

startApplication("通讯录")

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

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

于 2018-03-01T15:47:58.440 回答
0

有时当我们遇到这种情况时,这是因为每次我们尝试在特定的测试运行中访问该对象时都会得到一个新对象。这些新对象中的每一个都具有相同的属性。因此,Squish 尝试使用“occurrence='n'”属性引用后续实例。

可靠地解决此问题的一种简单方法是使用父对象(应用程序中稳定的东西,不会被实例化和丢弃),然后按名称遍历父对象的组件层次结构(希望您正在与之交互的组件具有唯一的名称)。

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

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

/** javascript **/
let listItemAncestor = findObject(":SomeSymbolicNameForAncestor");
let declarationListItem = aut.fetchDescendantByName(listItemAncestor, "NewDeclarationListItem");
mouseClick(waitForObject(delarationListItem));
于 2017-08-25T03:12:44.363 回答