我们正在尝试使用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网络驱动程序在这个或某些路线上进行研究以处理基于Flex的自动化,请建议。
答案 0 :(得分:4)
试试Sikuli。 它应该适用于你的情况。
答案 1 :(得分:-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
是像素值
element_to_append
是jquery webelement reference
移动按钮并单击它(如播放或暂停按钮)
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"));
请注意,在不添加Native事件的情况下,FF支持Actions,但您需要在Chrome中添加Native events支持。
该方法的唯一缺点是您需要为按钮创建映射(每个flash元素的像素映射)。