【问题标题】:Why Are Automated GUI Tools So Fragile?为什么自动化 GUI 工具如此脆弱?
【发布时间】:2012-05-23 16:42:03
【问题描述】:

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

Selenium Click() fails with Anchor Elements

Selenium Click() fails clicking button object

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

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

【问题讨论】:

    标签: user-interface automation silktest


    【解决方案1】:

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

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

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

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

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

    希望对您有所帮助。

    【讨论】:

    • 我同意存在不同的问题:1) 使测试稳定(始终检查控件是否可以接收输入 - 某些操作也需要任意长时间)2) 工具限制 - 有些事情是不可能的。还有许多工具试图在 1) 和 2) 周围有一些巧妙的内部逻辑,你只需要货比三家,Silk Test 并不是最好的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2011-08-20
    • 2019-09-12
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多