5

大约一年半以来,我一直在使用 SilkTest,它是一种 GUI 自动化工具,适用于桌面和 Web 应用程序。它模拟鼠标和键盘输入,最终模拟最终用户行为。但是,我发现它有点片状;连续 9 次正常工作的 Button.Click() 或 DialogBox.Close() 方法调用似乎在第 10 次调用时失败,只是在第 11 次返回工作。通常我会把这归结为 SilkTest(或测试下的应用程序,或操作系统,或者你有什么)的一个怪癖,但后来我发现其他 GUI 自动化工具(如 Selenium)也存在类似问题:

Selenium Click() 因锚元素而失败

Selenium Click() 无法单击按钮对象

我知道对于桌面应用程序,每个 GUI 控件/对话框都有一个与之关联的标签元素(至少在基于 Windows 的 GUI 中),而对于网页,则有页面元素的域对象模型层次结构。我的猜测是,这些工具有时会在导航这些层次结构和查找独特元素和控件时遇到问题。但是这里发生了什么?SilkTest 是一个相对较旧的商业软件包,而 selenium 相对较新、开源且不断发展。他们都可能有类似问题的事实引起了我的注意。

另外,其他 GUI 测试工具也是这种情况吗?还是我刚刚经历了一些不寻常的经历?

4

1 回答 1

6

您在这里谈论两件事,首先是在要自动化的被测应用程序中查找对象的概念。您对 SilkTest(和其他工具)如何做到这一点的描述非常准确,即只要自动化软件可以使用某些东西来识别控件,那么您就可以了。

第二件事是为什么自动化本身随机失败,因为工具没有报告它找不到控件,那么它必须认为它向应用程序发送了适当的操作,例如单击或类型。这可能是应用程序尚未准备好接受您发送的操作,这类似于您尝试“在它准备好之前”单击某物,在这种情况下,应用程序可以决定缓冲输入或丢弃输入。

那么,你如何解决这个问题?一种方法是使用该工具的功能来尝试确定应用程序何时准备好输入,而不是盲目地向其发送输入流。SilkTest 具有允许您执行此操作的功能(与 TestPartner 一样)。我无法评论 Selenium,因为它是我没有使用过的东西。

一种简单的测试方法是在违规操作之前插入暂停几秒钟,然后在循环中运行它以查看这是否解决了问题,如果是这种情况,那就是你的问题。如果这不能解决问题,那么您需要联系测试工具的供应商。

请记住,应用程序变得越来越复杂,即多线程、通信,其中任何一种都可能导致自动同步失败,从而导致操作失败。

希望有帮助。

于 2012-05-23T21:30:44.360 回答