我有一个已经用 Selenium Flex 重新编译的 Flash 应用程序。
使用 FlashFirebug,我能够找到该应用程序的定位器,并且我已经使用 Selenium RC 的 selenium flex API 编写了脚本,当我运行脚本时,这些定位器被识别但无法执行操作。
在 selenium IDE 中,也可以识别这些定位器,但无法执行单击等操作。在这里,我已将 user-extension.js 附加到我的 IDE。
问问题
2643 次
2 回答
3
这就是我如何找到问题的根本原因:
- 确保您的 *.swf(flex 应用程序)是针对Selenium-Flex API *.swc 库正确
编译的
- 在带有 Javascript 调试控制台的网络浏览器中运行您的 swf(例如带有Firebug的 Firefox )。
- 使用 Javascript 控制台,使用 DOM ID 获取对 swf 的引用 -
document.getElementById(swfId)
- 现在,通过运行它为 Selenium 公开的测试命令之一来测试 Flex-Selenium 是否已编译到您的 swf OK 中。这些命令是在上一步中获得的对象上执行的 Javascript 函数 - 有关详细信息,请参阅从 Javascript 访问 Flex 应用程序。Flex-Selenium 公开的所有命令都可以在Commmands.as的 Flex-Selenium 源代码中找到。例如,
ExternalInterface.addCallback("doFlexMouseDown", mouseCommands.doFlexMouseDown);
意味着一个名为doFlexMouseDown(在MouseCommands.as中定义)的 Javascript 函数已在您的 swf 中公开。执行 Javascript 表达式typeof document.getElementById('swfId').doFlexMouseDown
应计算为函数(不是未定义)。您还应该能够在没有错误的情况下调用此函数 -您的 swf 中某个对象(例如按钮)的 IDdocument.getElementById(swfId).doFlexClick('idOfFlexObject')
在哪里。idOfFlexObject
- 因此,现在您应该能够找到您在通过 selenium 调用您的 swf 时遇到问题的命令,并针对 swf 测试它们是否存在 Javascript 调试控制台中的错误。
- 如果您的 swf 确实是针对您的 swf 正确编译的,那么当您针对您的 swf 调用相应的 Javascript 函数时,您很可能会收到错误(Javascript 函数本身已正确定义并暴露给 Javascript,但您的swf 当它被调用时)。然后,您可以通过下载 Flex-Selenium 的源代码(请参阅前面的超链接)并将 flex 调试器附加到您的 swf 并在其搜索路径中使用此源代码来查找此错误的原因。您将在执行失败的命令时设置一个断点。根据我自己的经验,我不得不自定义和修复 Flex-Selenium 源代码中的小错误。
- 如果您没有在 Javascript 调试控制台上观察到错误,您应该发布堆栈跟踪,其中 Selenium RC 无法针对您的 swf 运行命令,因为您使用或配置 Selenium RC(或 Selenium IDE ) 是问题所在。
于 2012-12-13T04:33:44.610 回答