2

我有一个已经用 Selenium Flex 重新编译的 Flash 应用程序。
使用 FlashFirebug,我能够找到该应用程序的定位器,并且我已经使用 Selenium RC 的 selenium flex API 编写了脚本,当我运行脚本时,这些定位器被识别但无法执行操作。
在 selenium IDE 中,也可以识别这些定位器,但无法执行单击等操作。在这里,我已将 user-extension.js 附加到我的 IDE。

4

2 回答 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 回答
0

通过 SFAPI(Slenium Flex API)点击 flex 应用程序非常简单,您必须使用 SeleniumFlexAPI.swc 文件编译您的 flex 代码,您将在 SFAPI 文件夹中获得该文件,对于这些 SFAPI 文件,您需要按照以下步骤操作,请参见此处

在此处查看示例

于 2014-06-03T10:49:43.887 回答