4

我们正在尝试使用 Selenium Web 驱动程序自动化具有基于 Flex 功能的 Web 应用程序。当我们了解到我们需要依靠第三方扩展来完成这项工作时,我们对此感到震惊。

我们探索了几个选项,例如:

1.机器人框架

2.sfapi

但是发现了一个问题:拖放使用doFlexDragTo(id:String, pos:String)不起作用。 http://code.google.com/p/sfapi/issues/detail?id=7

我们实际上需要这个函数在我们的应用程序中使用它。

3.现在我们正在考虑探索以下内容(我认为两者都相同) https://www.gorillalogic.com/monkeytalk/legacy-products 和 FlexMonkium

如果有比上述更好的选择,请建议我们。如果有人已经对此或使用 Selenium Web 驱动程序处理基于 Flex 的自动化进行了研究,请提出建议。

4

2 回答 2

4

试试斯库里。它应该适用于您的情况。

于 2012-12-15T17:36:44.283 回答
-1

为什么不尝试行动?

创建您将点击的隐形按钮

((JavascriptExecutor) driver).executeScript("var mybutton = $('<button/>', {id: 'invisbutton', class: 'invisbutton',text: '', style: 'position:absolute; width:20px; height:20px;top:" + result_pos_y + "px;left:" + result_pos_x + "px;visibility:hidden'}); $('" + element_to_append + "').append(mybutton);");

result_pos_y并且result_pos_x是像素 int 值

element_to_append是 jquery webelement 参考

移动到按钮并单击它(如播放或暂停按钮)

Actions builder = new Actions(driver.getWebDriver());
        builder.moveToElement(driver.findElement(By.xpath("//button[@id='invisbutton']"))).build().perform();
        builder.moveToElement(driver.findElement(By.xpath("//button[@id='invisbutton']"))).click().build().perform();

并使用断言插入您的代码。就我而言,我可以通过 JS 达到一些 Flash 播放器状态,所以下面是我的断言示例

String brightcove_id = driver.findElement(By.xpath("//div[@id='bcplayer-container']//object")).getAttribute("id");
    ((JavascriptExecutor) driver).executeScript("brightcove.api.getExperience('" + brightcove_id + "').getModule(brightcove.api.modules.APIModules.VIDEO_PLAYER).getIsPlaying( function(isPlaying) { alert(isPlaying)})");
    driver.pause(200);
    String alert_text = driver.switchTo().alert().getText();
    driver.switchTo().alert().accept();
    assertTrue("Video is not stopped after clicking pause button", alert_text.equals("false"));

请注意,FF 中支持 Actions,无需添加 Native 事件,但您需要在 Chrome 中添加 Native 事件支持。

该方法的唯一缺点是您需要为按钮创建映射(每个 Flash 元素的像素映射)。

于 2014-06-18T12:27:50.437 回答